语音助手(Virtual Personal Assistants, VPA)是物联网智能家居中很火的一个领域,用户能够经过语言做为入口来控制家里各类各样的设备,而亚马逊的Alexa(echo,echo dot)是作的最先也是最优秀的一款产品,衍生出了很大的开发生态圈。本文基于亚马逊的官方文档试图记录做者对其Skill工做原理的理解。html
这不是一个手把手Skill开发入门教程,仅仅讲解了概念与我的的一些理解node
Alexa提供一系列内置的功能,好比回答问题,语音游戏,控制智能家居设备,这些功能都是由skill实现的。亚马逊为Alexa skill提供了一个开放的开发环境,相似于google的Android,任何开发者均可以自由的开发skill并上传到市场中供Alexa的用户使用。Skill调用的基本过程:识别用户调用请求——根据输入语音判断用户意图——执行功能。web
更具体来说,一个skill主要分为两部分:语音用户接口部分(Voice User Interface (VUI) )和功能部分。VUI部分是运行在亚马逊的Alexa云上,Alexa根据设置的规则和用户的语音判断调用哪一个skill。当选择调用你的skill后,才会执行到skill的功能部分。那么功能部分是怎么实现的呢?其实很简单,就是Alexa云发一个JSON格式的数据的HTTPS请求给你预设好的服务器(能够本身搭建web服务器来处理这个HTTPS请求,也能够用AWS的lambda设置alexa来触发)。这个JSON数据就是Alexa规定好的“协议”了,详见文档,发来的JSON内容包括用户intent,用户和设备的ID,本次会话的ID,访问用户隐私数据的令牌,用户控制设备的的token(Oauth2.0)等等不少。你本身Web服务器(本身搭建须要验证签名来判断这请求是否是Alexa服务器发来的)/Lambda的代码来处理这个发来的JSON,同时你再给Alexa回复JSON来响应。事实上,skill的功能代码能够完成任意功能,好比使用用户的token来向第三方云发送请求,实现根据语音控制他的智能家居设备。json
官方文档将skill分为了几个类别,如定制(custom)、智能家居、资讯等。
定制类型的skill须要开发者本身处理skill中涉及的几乎全部步骤:服务器
而其余类型的skill亚马逊给提供了预约义的模板,开发者不须要处理全部的步骤。好比智能家居类型(Smart Home pre-built model),就是预约义来控制门锁、灯等设备的,选择了这个模板就丧失了灵活的定制性,可是能够更方便快速的开发。使用这类的skill,由Smart Home Skill API 定义了:ide
开发者须要本身定义本身的skill如何响应某一个指令(directive),例如,须要写代码完成收到“turn on the light”指令时的功能,代码须要使用亚马逊的另外一个服务AWS Lambda来完成。注意,使用Smart Home Skill API 就只能响应这些API里预设的特殊指令(device directives)。(这里有个疑问,alexa是如何断定调用哪一个skill来管理本身家灯的?)ui
用户作出请求——Skill收集补充信息——用户提供须要的信息——skill完成请求功能
Custom skill的例子: User: Alexa, get high tide for Seattle from Tide Pooler.
其中Tide Pooler是skill的invocation name ,调用custom skill的用户必须明确说明这个skill的调用名称。“get high tide for Seattle ”就是须要映射到intent的语音了。google
智能家居的例子: User: Alexa, turn on the living room lights.
“turn on the...”会被Alexa识别成预设的interaction model,判断用户是要开灯。
“living room lights”是用户以前设置的具体设备的名称,而不是skill的名字,Alexa会将device directive发送给能够控制living room lights这个设备的智能家居skill,这个skill再经过与设备的云平台来交互,打开这个具体的设备,并返回结果给Alexa。orm
转载请注明出处 http://www.javashuo.com/article/p-fpaavxdo-p.htmlhtm