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/authorize (北美环境)
    https://euoauth.ablecloud.cn/authorize (欧洲环境)

    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获取技术支持。