接受Alexa自定义技能的任何用户输入,但仅在确认中包括该输入的一部分

时间:2019-05-11 15:56:11

标签: alexa alexa-skill

我正在尝试为感激日记建立自定义的Alexa技能。目标是进行一次交互,在这种交互中,Alexa设备会询问用户他们要感谢的内容,然后重复进行确认。

在重复用户所说的内容时,我遇到了一个问题。我希望对话像这样进行:

  

Alexa:您今天要感谢什么?   
用户我感谢狗   
Alexa:您说过,您对狗表示感谢。正确吗?

我将其设置为单个意图,如下所示:

  • gratitude_object作为必需的插槽,类型为AMAZON.SearchQuery
  • 此广告位的用户语音为I'm grateful for {gratitude_object}(以及一些变化)
  • 该插槽的
  • 确认消息为You're feeling grateful for {gratitude_object}. Is that correct?

我遇到的问题是,当我在Utterance Profiler中测试该模型时,它是这样的:

  

Alexa:您今天要感谢什么?   
用户我感谢狗   
Alexa:您说过,我很感谢狗,对此您表示感谢。正确吗?

我猜测这与AMAZON.SearchQuery会接受任何内容作为有效输入这一事实有关,但我不确定如何解决这个问题。

我还尝试为I'm grateful for短语创建一个自定义广告位:

  • 广告位名称:gratitude_phrase_initiator
  • 插槽类型:自定义插槽类型
  • 广告位值:“我感谢”,“我感谢”(等)

但是,如果我随后尝试通过使用户说出gratitude_object插槽来意图使用此插槽,则:

  

{gratitude_phrase_initiator} {gratitude_object}

...然后出现以下错误:

  

意图“ NewEntryIntent”中的插槽“ gratitude_object”的示例话语“ {gratitude_statement_initiator} {gratitude_object}”不能同时包含短语插槽和另一个意图插槽。错误代码:InvalidSlotSamplePhraseSlot

我真的很想保持当前的互动状态,用户首先要说“我感谢...”。关于如何使用交互模型使这项工作可行的任何建议,还是只是不可能?这是我可以在代码中处理的东西,而不是交互模型吗?

1 个答案:

答案 0 :(得分:0)

看起来您设置得很完美,但是您希望SearchQuery在排除初始话语短语方面做得更好。因此,您将不得不在代码中对其进行更多解析。您应该使用Lambda函数来字符串替换插槽值以删除所有初始短语。

Node.js中的示例:

var gratitude_object = this.event.request.intent.slots.gratitude_object.value;

var initial_phrases = [
    "i'm grateful for",
    "i am grateful for",
];

initial_phrases.forEach(function(value){
    gratitude_object = gratitude_object.toLowerCase().replace(value,"");
});

请注意,初始短语数组以小写形式编写,并且forEach循环在检查替换之前也将插槽值设置为小写。这样,您在编写要删除的初始短语时就不必担心大小写匹配。