我正试着建立一个定制的Alexa技能来写一本感恩日记。目的是实现一个交互,在这个交互中,Alexa设备询问用户他们感激的是什么,并将其重复作为确认。
在重复用户所说的内容时,我遇到了一个问题。我希望谈话能这样进行:
Alexa:,你今天感激什么?用户我很感激狗,:,你说你很感激狗。对吗?
我将其设置为一个单一意图,如下所示:
gratitude_object
作为必需的插槽,类型为AMAZON.SearchQueryI'm grateful for {gratitude_object}
(和一些变化)。You're feeling grateful for {gratitude_object}. Is that correct?
。我遇到的问题是,当我在语音分析器中测试这个模型时,它是这样的:
Alexa:,你今天感激什么?用户我很感激狗,:,,你说你感激我,我感谢狗。对吗?
我猜想这与AMAZON.SearchQuery会接受任何作为有效输入的事实有关,但我不知道如何解决这个问题。
我还尝试为I'm grateful for
短语创建一个自定义插槽:
gratitude_phrase_initiator
但是,如果我试图在我的意图中使用这个插槽,可以让用户对gratitude_object
插槽发表意见:
{gratitude_phrase_initiator} {gratitude_object}
...then我得到以下错误:
意图“gratitude_statement_initiator”中的插槽"gratitude_object“的示例语句”{gratitude_object}{NewEntryIntent}“不能同时包含短语插槽和另一个意图插槽。错误代码: InvalidSlotSamplePhraseSlot
。
我真的很想保持目前的交互,用户从说“我很感激……”开始。对于如何使用交互模型来完成这项工作,有什么建议吗?还是说这是不可能的?这是我可以在代码中而不是交互模型中处理的东西吗?
发布于 2019-05-14 01:33:33
看起来,您的设置很完美,但是您希望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循环在检查替换之前也会使槽值小写。这样,在编写要删除的初始短语时,不必担心大小写匹配。
https://stackoverflow.com/questions/56091957
复制相似问题