如何在用户打开技能时验证用户的 PIN 码 (启动请求)



我的Alexa技能遇到了一些问题。我希望对话是这样的:

用户:"亚历克萨,开放派对">

Alexa:"你好,你的四位数秘密密码是什么?

用户:"1234">

Alexa:"确认了,我能帮你什么?

但我对如何构建它感到困惑。我需要获取用户的 PIN 码并在我的代码库中进行验证。我知道你不能让对话代表团在LaunchRequest内工作。LaunchRequest无法自定义,因此我无法向其添加插槽。我在互联网上找不到任何其他建议/示例。以前有没有人这样做过,或者有什么建议吗?

亚马逊支持账户关联作为将用户与其其他账户联系起来的方法。这允许用户在安装技能时使用 OAuth 登录其其他帐户。虽然可以根据会话对象 userid 确定用户,但可能很难发布此类技能。

事实证明,您不能将插槽收集委托给LaunchRequest内的Alexa,因为它不是LaunchRequest的有效响应类型的一部分。

我的初始逻辑是:

  1. 用户说"Alexa,开放派对">
  2. 亚历克萨技能称LaunchRequest.(此时我需要通过委托 Alexa 进行插槽收集来要求用户提供他们的 pin)
  3. LaunchRequest中,立即用this.emit(':getPinIntent');回应,getPinIntent是我的Alexa技能中存在的另一个意图。上面的代码是我在互联网上看到的关于如何在用户不必使用语音挑衅的情况下调用另一个意图的代码。
  4. getPinIntent被调用并立即检查是否所有必需的插槽都已填满(即插槽PIN是否有值)。如果它们不是并且dialogState !== 'COMPLETED'那么我将插槽集合委托给 Alexa。
  5. 上面的步骤是出错的地方。由于委派不是LaunchRequest的有效响应类型,因此没有委派到 Alexa 所需的字段dialogueState。Alexa 请求仍然是LaunchRequest而不是意图请求,因为用户没有通过对 Alexa 说些什么来调用意图。
  6. 总之,这不是完成对话的有效方式,在启动时要求用户输入引脚,然后只需说出该引脚即可回复,如下所示:

用户:"Alexa,开放派对">

Alexa:"你的密码是什么"(Alexa永远不会到达这里,因为上面的#4和#5)

用户:"一二三四">

Alexa:"确认了,我能帮你什么?

如果我犯了任何错误或错误的假设,请告诉我。

我目前的逻辑现在已经改变了。如果不使用技能生成器测试版,则可以将槽作为其中一个意向的语句存在。所以我现在有一个名为{PIN}的插槽和{PIN}形式的话语的getPinIntent。这允许上述类型的对话发生,因为当用户说出他或她的引脚("一二三四")时,它会启动getPinIntent,然后我可以继续或将对话委托给 Alexa,因为对于IntentRequest对话框是有效的响应类型。

我现在唯一的问题是,因为我没有使用技能生成器测试版,所以我无法(或没有找到方法)将对话模型添加到我的意图架构中/内部。添加正确的对话模型后,我尝试将 JSON 文本从技能生成器测试版复制到我的意图架构中,但这总是会导致构建错误。

所以现在我可以完成用户的 pin 身份验证并回复"我能帮上什么忙",但之后的 IntentRequest 可能需要委派给 Alexa 的插槽,这会导致崩溃,因为如果没有技能生成器测试版,我无法为 Alexa 添加适当的对话模型,以便在委派插槽收集期间使用。

最新更新