接受 Alexa Custom Skill 的任何用户输入,但在确认中仅包含该输入的一部分
Accept any user input for Alexa Custom Skill, but include only part of that input in confirmation
我正在尝试为感恩日记构建自定义 Alexa 技能。目标是进行交互,Alexa 设备询问用户他们感谢什么,并重复作为确认。
我在重复用户所说的内容时遇到了问题。我希望对话是这样进行的:
Alexa: What are you grateful for today?
User I'm grateful for dogs
Alexa: You said you're grateful for dogs. Is that correct?
我已将其设置为单一意图,如下所示:
gratitude_object
作为必需的插槽,类型为 AMAZON.SearchQuery
- 此插槽的用户话语是
I'm grateful for {gratitude_object}
(以及一些变体)
- 此插槽的确认消息是
You're feeling grateful for {gratitude_object}. Is that correct?
我遇到的问题是,当我在 Utterance Profiler 中测试这个模型时,它是这样的:
Alexa: What are you grateful for today?
User I'm grateful for dogs
Alexa: You said you're grateful for I'm grateful for dogs. Is that correct?
我猜这与 AMAZON.SearchQuery 将接受任何内容作为有效输入这一事实有关,但我不确定如何解决这个问题。
我还尝试为 I'm grateful for
短语创建一个自定义插槽:
- 插槽名称:
gratitude_phrase_initiator
- 插槽类型:自定义插槽类型
- 插槽值:"I'm grateful for"、"I am grateful for"(等等)
但是,如果我随后尝试在我的意图中使用这个插槽,通过让用户为 gratitude_object
插槽发声:
{gratitude_phrase_initiator} {gratitude_object}
...然后出现以下错误:
Sample utterance "{gratitude_statement_initiator} {gratitude_object}" for slot "gratitude_object" in intent "NewEntryIntent" cannot include both a phrase slot and another intent slot. Error code: InvalidSlotSamplePhraseSlot
.
我真的很想保持当前的交互,让用户先说 "I'm grateful for..."。关于如何使用交互模型完成这项工作的任何建议,或者它是不可能的?这是我可以在代码而不是交互模型中处理的东西吗?
看起来您的设置很完美,但您希望 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 循环还在检查替换之前使槽值变为小写。这样,您在编写要删除的初始短语时就不必担心大小写匹配问题。
我正在尝试为感恩日记构建自定义 Alexa 技能。目标是进行交互,Alexa 设备询问用户他们感谢什么,并重复作为确认。
我在重复用户所说的内容时遇到了问题。我希望对话是这样进行的:
Alexa: What are you grateful for today?
User I'm grateful for dogs
Alexa: You said you're grateful for dogs. Is that correct?
我已将其设置为单一意图,如下所示:
gratitude_object
作为必需的插槽,类型为 AMAZON.SearchQuery- 此插槽的用户话语是
I'm grateful for {gratitude_object}
(以及一些变体) - 此插槽的确认消息是
You're feeling grateful for {gratitude_object}. Is that correct?
我遇到的问题是,当我在 Utterance Profiler 中测试这个模型时,它是这样的:
Alexa: What are you grateful for today?
User I'm grateful for dogs
Alexa: You said you're grateful for I'm grateful for dogs. Is that correct?
我猜这与 AMAZON.SearchQuery 将接受任何内容作为有效输入这一事实有关,但我不确定如何解决这个问题。
我还尝试为 I'm grateful for
短语创建一个自定义插槽:
- 插槽名称:
gratitude_phrase_initiator
- 插槽类型:自定义插槽类型
- 插槽值:"I'm grateful for"、"I am grateful for"(等等)
但是,如果我随后尝试在我的意图中使用这个插槽,通过让用户为 gratitude_object
插槽发声:
{gratitude_phrase_initiator} {gratitude_object}
...然后出现以下错误:
Sample utterance "{gratitude_statement_initiator} {gratitude_object}" for slot "gratitude_object" in intent "NewEntryIntent" cannot include both a phrase slot and another intent slot. Error code: InvalidSlotSamplePhraseSlot
.
我真的很想保持当前的交互,让用户先说 "I'm grateful for..."。关于如何使用交互模型完成这项工作的任何建议,或者它是不可能的?这是我可以在代码而不是交互模型中处理的东西吗?
看起来您的设置很完美,但您希望 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 循环还在检查替换之前使槽值变为小写。这样,您在编写要删除的初始短语时就不必担心大小写匹配问题。