2017-06-20 25 views
0

我的Alexa技能存在一些问题。我想对话是这样的:如何在打开技能时验证用户的PIN(LaunchRequest)

用户:“Alexa的,开party”

Alexa的:“你好,你是什么四位秘密针”

用户: '1234'

Alexa的: '经证实,有什么可以帮您?'

但我很困惑如何构造这个。我需要获取用户的密码并在我的代码库中进行验证。我知道你不能得到对话代表团在LaunchRequest里面工作。 LaunchRequest不能定制,所以我不能添加插槽。我在互联网上找不到任何其他建议/例子。有没有人以前做过或有什么建议?

+0

您的示例对话与您正在寻找的帮助相矛盾。在这个例子中,launchRequest会触发你的技能请求销售。之后,您会询问用户是否可以在启动请求中指定其针脚。 – aberger

+0

我已经想出了一些其他的东西,这使得这个问题现在不相关,所以我很抱歉,如果有任何混淆。我即将关闭它。 –

回答

0

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

我最初的逻辑是:

  1. 用户说 'Alexa的,开party'
  2. Alexa的技能要求LaunchRequest。 (在这一点上,我需要通过委托Alexa进行插槽集体询问用户的销售号码)
  3. LaunchRequest中,立刻用this.emit(':getPinIntent');回应,其中getPinIntent是我的Alexa技能中存在的另一个意图。上面的代码是我在互联网上看到的如何调用另一个意图,而用户不必挑起使用语音。
  4. getPinIntent被调用并立即检查是否填满了所有需要的插槽(即如果插槽PIN有一个值)。如果他们不是,并且dialogState !== 'COMPLETED'然后我将插槽集合委托给Alexa。
  5. 上述步骤(#4)是出问题的地方。由于代表团不是LaunchRequest的有效回复类型,因此没有字段dialogueState,这是授权给Alexa所需的字段。 Alexa请求仍然是LaunchRequest而不是Intent请求,因为用户没有通过对Alexa说些什么来调用意图。
  6. 总之,这是没有完成,其中一经推出,要求用户输入PIN,然后可以通过只说引脚回复对话的有效方式,下面显现:

用户:“Alexa的,开party “

Alexa的: ”你是什么针“(ALEXA从来没有送过来,因为#4及以上#5)

用户: ”一二三四“

Alexa的:” Confirme d,我能帮你什么?“

如果我犯了任何错误或错误的假设,请让我知道。

我现在的逻辑现在已经改变。如果您不使用技能生成器测试版,则您可以将插槽作为您的意图之一的话语存在。所以我现在有getPinIntent带有一个名为{PIN}的插槽和一个{PIN}形式的话语。这使上述类型的对话会发生,因为当用户他或她的脚说回(“一二三四”),它会启动getPinIntent,我可以再继续或委托的对话,以Alexa的,因为IntentRequest对话框是一个有效的response type

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

所以,现在我可以完成用户的PIN认证并回应一个“我该怎么帮忙”,但是之后发布的IntentRequest可能需要委派给Alexa插槽,并且这会导致崩溃,因为没有Skill Builder测试版我无法为代理插槽收集期间的Alexa添加适当的对话模型。

0

亚马逊支持account linking作为连接用户与其他帐户的方法。这允许用户在安装技能时使用OAuth登录到他们的其他帐户。尽管可能根据session object userid确定用户,但发布此类技能可能很困难。

+0

对,但在用户关联帐户之后,我仍然希望让他们在使用我的技能中的任何东西之前(例如手机上的四位数字引脚)使用他们的四位数字引脚。 –

+0

好的。您是否尝试过接收号码输入作为号码插槽的意图?例如,“我的脚是{PinSlot}”,“这是{PinSlot}”,“{PinSlot}”,“{PinSlot}是我的脚” –

+0

我做的,现在,它的工作,但只有当你这样做不使用技能生成器测试版。 Skill Builder Beta不会允许只有时隙的话语(即话语“{PinSlot}”)。现在我遇到了另一个问题,因为显然你不能在没有测试版的情况下构建对话框模型。 –