Amazon Echo对接
完整控制流程图
与亚马逊Echo对接后,终端用户可以通过对Echo说出控制命令来调用云端的业务逻辑,最终将正确的操作反馈给用户。
流程图如下所示。
相关连接汇总
亚马逊开发者网站:https://developer.amazon.com/home.html
Lambda Function: https://aws.amazon.com/cn/lambda/
Lambda示例代码见:https://github.com/AbleCloudGit/aws_lambda_demo
Echo Skills:http://alexa.amazon.com/spa/index.html
Alexa Skill 配置
-
前往亚马逊开发者网站(https://developer.amazon.com/home.html)注册后登陆开发者平台。
-
选择Alexa Skill Kit。
- 点击"Add a New Skill"新增一个Skill。
- 按照界面提示配置 Skill 基本信息
序号 | 选项 | 备注 |
---|---|---|
1. | SkillType | 选择“Custom Interaction Model(开发者自定义语音交互模型)” |
2. | Name | 在SkillStore中显示的名称,由开发者自定义 |
3. | Invocation Name | 唤醒词,当用户向Echo说出类似于“Alexa ask matrix to .....”语句时,即代表我们的skill被唤起了,其中“matrix”则为此处的Invocation Name。Invocation Name的取名有一些限制, 要避开Alexa设定的关键字, 以及会造成误判语意的名称, 由开发者自定义,详细的限制说明可以参考这里:https://developer.amazon.com/appsandservices/solutions/alexa/alexa-skills-kit/docs/choosing-the-invocation-name-for-an-alexa-skill |
- 配置用户语音交互模型
序号 | 选项 | 备注 |
---|---|---|
1. | intent | 每一个intent代表一个用户操作意向即:用户说出的一句语音指令 |
2. | slot | 每个intent可以有多个slot,slot可以理解为用户指令中的变量。slot.name:变量名称,slot.type:变量值的类型,注意:slot.value并非所有值的列表,如果用户所说指令不存在于列表当中,lambda中也是可以直接通过slot.value获取到用户所说的指令词的,其次如果slot.value如果会出现词组,那么建议在列表当中增加如: a b c 此种空格分割的词作为识别对象以增加识别率。 |
4. | Sample Utterances | 填入每个intent所对应的用户语音指令 |
{
"intents": [
{
"intent": "ControlLight",
"slots": [
{
"name": "LightState",
"type": "LIGHT_STATE"
}
]
},
{
"intent": "ControlSwitch",
"slots": [
{
"name": "SwitchState",
"type": "SWITCH_STATE"
}
]
}
]
}
- 配置Amazon Lambda
用户指令通过AlexaSkill的解析后,会将解析后的用户intents以及session和用户信息(包含下一步骤中配置的通过OAuth获取的AbleCloud平台的用户AccessToken)发送至此处配置的Lambda function id对应的处理函数当中进行处理。
此处的Lambda function id需要前往(https://aws.amazon.com/cn/lambda/)进行申请配置
1. 注册账号,并进入管理控制台。
2. 选择Lambda服务。
3. 创建新的Lambda函数。
4. 选择一个空的模板。
5. 选择要连接的功能,这里我们选择AlexaSkillKit。
6. 输入LambdaFunction的名称并选择语言,这里我们选择NodeJs进行处理。
示例代码见:https://github.com/AbleCloudGit/aws_lambda_demo
7. 选择处理函数入口,我们使用默认的index.handler即可,接着配置Lambda的角色(即此处理函数对aws的一些访问权限设置)。
8. 我们给基本的权限(只有日志权限)增加IoT资源操作权限。填入如下全下配置即可
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"iot:*"
],
"Resource": "arn:aws:iot:*:*:*"
}
]
}
9. 现在我们返回之前的角色配置界面,选择我们刚刚配置好的角色。并且在高级设置中将Lambda请求超时时长由默认的3秒增加至6秒(由于网络原因可能会存在请求延时较大的情况)。配置完成之后选择下一步
10. 确认信息并且创建函数。
11. 此时我们便完成了LambdaFunction的创建,自动返回控制界面后,我们会看到页面右上角的function id 。
此时我们返回之前AlexaSkill配置界面,将获得的LambdaFunctionId填入此处.
- 配置Account Link(用于连接AbleCloud的用户体系)
1.Client Id以及底部的Client Secret需要前往AbleCloud管理控制台进行申请配置。
2.Authorization Url 填入:
https://oauthtest.ablecloud.cn/authorize (测试环境)
https://oauth.ablecloud.cn/authorize (国内环境)
https://usoauth.ablecloud.cn/authorize (北美环境)
https://euoauth.ablecloud.cn/authorize (欧洲环境)
3.Access Token Url 填入:
https://oauthtest.ablecloud.cn/token (测试环境)
https://oauth.ablecloud.cn/token (国内环境)
https://usoauth.ablecloud.cn/token (北美环境)
https://euoauth.ablecloud.cn/token (欧洲环境)
4.配置完成后选择下一步。
-
测试AlexaSkill
打开测试功能开关。
此处可以把输入的文字模拟为用户的语文指令并经过AlexaSkill解析后发送至Lambda函数进行处理。左边的request为模拟向Lambda发出的请求,右面为Lambda处理后返回的响应其中outputSpeech.text为最终响应给用户的语音输出。
测试完成后我们选择下一步,进入发布信息填写界面,填入对应的信息,并点击下一步。
进入用户隐私界面填写相关信息,然后提交审核即可。
在审核通过之前可以通过左侧Beta版的test功能进行AlexaSkill的测试。点击addTester后,填入想要邀请测试的用户的email点击确认,会生成一个InviteUrl将此Url发送给邀请的测试用户打开并且Accept邀请即可。
-
测试者代开 http://alexa.amazon.com/spa/index.html 并登陆
进入skills界面。
点击LinkAccount与AbleCloud用户账户体系进行关联。
输入AbleCloud的账户名和密码并授权Amazon获取用户token。
关联成功后即可对AlexaSkill通过Echo进行测试了。
至此,一个完整的亚马逊Echo对接流程就完成了,若有任何疑问,欢迎联系AbleCloud获取技术支持。