Alexa Echo Dot - ASK技能问题

时间:2017-01-05 15:45:40

标签: alexa-skills-kit alexa-skill amazon-echo

我想要做一个简单的测试自定义Alexa Skill,但是我被卡住了,我不确定问题是什么。也许更有经验的人知道我失踪了什么?

调用名称

家庭系统

意图架构

{
  "intents":  [
    {
      "intent": "AMAZON.HelpIntent",
      "slots": []
    },
    {
      "intent": "TestIntent",
      "slots": [
        {"name": "test", "type": "AMAZON.NUMBER"}
      ]
    }
  ]
}

示例话语

TestIntent set state {test}
TestIntent add state

我在自己的自托管服务器上编写了自己的小python服务器,我已经在同一个系统上有一个工作新闻flash技能。我花了很多时间查看文档,阅读教程,看起来我已经完成了我应该做的事情。

我得到的结果是:

LaunchRequest 在服务模拟器和Echo中都有效。它触发带有预期JSON的HTTP POST,我得到了预期的语音回复。

IntentRequest 仅适用于服务模拟器,它从不适用于Echo。我说例如" alexa家庭系统设置状态8",没有请求到我的服务器,回声只发出声音,这就是全部。

我不知道如何调试此技能,该技能是美国技能,而我的Echo是美国模式。我试图在欧洲和北美设置端点。尝试了不同的触发词,不同的插槽,没有插槽......我当然在设置下检查了 - >历史以确保设备正确理解我。

知道下一步该尝试什么吗?如何调试?

1 个答案:

答案 0 :(得分:2)

我发现了问题,这是一个经典的PEBCAK(椅子和键盘之间存在问题)问题。

我错过了我必须更精确地如何调用一个意图(一个包含触发词和意图的单个句子)。有效和有效示例的示例如下:

Alexa, ask home system to set state nine
Alexa, set state twelve using home system
Alexa, tell home system set state one

当我使用替代的两步调用时,我意识到这一点,并意识到它有效。它必须是我调用技能的方式,而不是后端:

Alexa, open home system
(Alexa responds, and listens for the command)
Set state to eight
(Intent triggered, Alexa responds)
  • 上面的第一个请求是 LaunchRequest
  • LaunchRequest shouldEndSession: false回复,否则会话将结束。这会在我的代码中映射到question(...)

有很多方法可以触发技能,完整列表请参阅此页面:https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/supported-phrases-to-begin-a-conversation(向下滚动到表格)

最后,感谢u-gen提供反馈,bst是一个有趣的项目(从未尝试过),如果您使用像lambda这样的托管解决方案,那么它可能非常有用。但是感谢文档,我发现了一个简化我的代码的项目。

最后,我的测试项目的python部分是否有其他人喜欢尝试它。

#!/usr/bin/env python

from flask import Flask, render_template
from flask_ask import Ask
from flask_ask import statement, question, convert_errors

app = Flask(__name__)
ask = Ask(app, '/ask/')

@app.route('/')
def hello_world():
    return 'Hello, World!'

@ask.launch
def launched():
    return question('Welcome to Foo')

@ask.intent('TestIntent')
def hello():
    return statement('Hello, world')

@ask.session_ended
def session_ended():
    return "", 200

if __name__ == '__main__':
    app.run(debug=True, host="0.0.0.0", threaded=True)