我的 Alexa 技能有一些问题。我希望对话是这样进行的:
用户:'Alexa,公开派对'
Alexa:“你好,你的四位数密码是多少?”
用户:'1234'
Alexa:“已确认,我能为您提供什么帮助?”
但是我对如何构建它感到困惑。我需要获取用户的密码并在我的代码库中对其进行验证。我知道你无法让对话代表团在
LaunchRequest
内部工作。 LaunchRequest
无法自定义,因此我无法为其添加插槽。我在互联网上找不到任何其他建议/示例。以前有没有人这样做过或有什么建议?
Amazon 支持 account linking 作为连接用户和他们的其他账户的方法。这允许用户在安装技能时使用 OAuth 登录他们的其他帐户。虽然可以根据 session 对象 userid 确定用户,但可能很难发布这样的技能。
事实证明,您不能在
LaunchRequest
内将插槽收集委托给 Alexa,因为它不是 LaunchRequest
的有效 response type的一部分。
我最初的逻辑是:
LaunchRequest
。 (此时我需要通过委托 Alexa 进行插槽收集来向用户询问他们的密码)LaunchRequest
中,立即用this.emit(':getPinIntent');
回应,其中getPinIntent
是我的Alexa Skill中存在的另一个意图。上面的代码是我在互联网上看到的如何在用户不必使用语音挑衅的情况下调用另一个意图。getPinIntent
被调用并立即检查是否所有必需的槽都已填充(即槽 PIN
是否有值)。如果他们不是,dialogState !== 'COMPLETED'
那么我将插槽集合委托给 Alexa。LaunchRequest
的有效响应类型,所以没有字段 dialogueState
是委托给 Alexa 所必需的。 Alexa 请求仍然是 LaunchRequest
而不是 Intent 请求,因为用户没有通过对 Alexa 说些什么来调用 Intent。用户:“Alexa,公开派对”
Alexa:“你的密码是什么”(Alexa 永远不会到达这里,因为上面的#4 和#5)
用户:“一二三四”
Alexa:“已确认,请问有什么可以帮到您的吗?”
如果我有任何错误或错误的假设,请告诉我。
我现在的逻辑已经改变了。如果您不使用 Skill Builder Beta,您可以有一个插槽作为您的一个意图的话语存在。所以我现在有
getPinIntent
和一个名为 {PIN}
的槽和一个 {PIN}
形式的话语。这使得上述类型的对话发生,因为当用户说出他或她的 pin back(“一二三四”)时,它会启动 getPinIntent
然后我可以继续或将对话委托给 Alexa,因为 IntentRequest
对话是一个有效的响应类型.
我现在唯一的问题是,因为我没有使用 Skill Builder Beta,所以我无法(或没有找到方法)将对话模型添加到我的 Intent Schema 中/我的 Intent Schema 中。在添加正确的对话模型后,我尝试将 JSON 文本从 Skill Builder Beta 复制到我的 Intent Schema 中,但这总是会导致构建错误。
所以现在我可以完成用户的 pin 身份验证并以“我能提供什么帮助”作为响应,但是之后出现的 IntentRequest 可能需要委托给 Alexa 进行插槽,这会导致崩溃,因为没有 Skill Builder Beta 我是无法为 Alexa 添加适当的对话模型以在委托插槽收集期间使用。