我正在创建一个 Alexa 技能,我已经编写了几个自定义和默认意图,它们运行良好。
现在我想编写一个备用意图,其中我想获得询问/发送到 Alexa 技能的确切语句,有没有一种方法可以让我们获得已被询问到 Alexa 技能的整个问题字符串/文本。我知道我们可以获得槽值和意图信息,但我需要将整个文本语句发送到技能。
谢谢
我正在创建一个 Alexa 技能,我已经编写了几个自定义和默认意图,它们运行良好。
现在我想编写一个备用意图,其中我想获得询问/发送到 Alexa 技能的确切语句,有没有一种方法可以让我们获得已被询问到 Alexa 技能的整个问题字符串/文本。我知道我们可以获得槽值和意图信息,但我需要将整个文本语句发送到技能。
谢谢
好吧,我遇到了同样的问题。在尝试了几种方法后,我得到了询问 Alexa 的语句的完整文本。
您必须在您的 Alexa 技能中进行以下设置(您可以根据需要选择意图名称、插槽名称和插槽类型)
设置意图
设置自定义插槽类型
设置好 Alexa 技能后,您可以调用您的技能,为启动请求保留一些响应并说出您想要的任何内容,您可以捕获整个文本,如下所示。
"intent": {
"name": "sample",
"confirmationStatus": "NONE",
"slots": {
"sentence": {
"name": "sentence",
"value": "hello, how are you?",
"resolutions": {
"resolutionsPerAuthority": [
{
"authority": "xxxxxxx",
"status": {
"code": "xxxxxxx"
}
}
]
},
"confirmationStatus": "NONE",
"source": "USER"
}
}
}
注意*:在这种方法中,如果有多个意图,您将需要正确处理话语。
没有办法直接从顶级意图获得整个话语。现在,您可以获得的最接近的是使用类型为AMAZON.SearchQuery的自定义插槽(不是另一个答案中建议的自定义类型),但您必须在插槽之前的话语中定义一个锚短语。例如,您将定义如下语句:
search {query}
其中 query 是AMAZON.SearchQuery类型的插槽。
话语中的锚点搜索是强制性的(SearchQuery类型的要求),因此只要用户通过说search开始话语,就会捕获随后的任何内容,这与您想要实现的目标非常接近。
话虽如此,实际上有一种间接的方法可以利用AMAZON.SearchQuery来近似捕获用户所说的整个话语(由 NLU 过滤),但仅作为使用Dialog Management正在进行的对话的一部分。如果您正在参与此类对话,其中 Alexa 自动使用定义的提示来请求槽信息,您可以定义一个话语,它是一个单独的 AMAZON.SearchQuery 类型的独立槽,没有锚。例子:
Alexa: Ok, I will create a reminder for you. Please tell me the text of the reminder
User: Pick of the kids from school
Alexa: Ok. I will remind you to Pick up the kids from school
在上面的示例中,Alexa 检测到用户想要发送提醒,但没有设置提醒文本,因此它会引发插槽。当您作为开发人员定义 Alexa 需要询问的提示时,还定义了可能的响应。在这种情况下,您可以将响应话语定义为:
{query}
并捕捉用户响应提示所说的全部内容,例如“从学校接孩子”
美国英语语言有一个称为 Slot Type 的 Slot Type AMAZON.LITERAL
,可让您捕捉所使用的确切短语或句子(取决于它在您的话语中的使用方式)。但是,此插槽类型在其他地区不可用。
亚马逊也不推荐使用它:
尽管您可以使用 AMAZON.LITERAL 提交新的和更新的英语(美国)技能,但在大多数情况下,自定义槽类型提供比 AMAZON.LITERAL 更好的准确性。因此,我们建议您尽可能考虑迁移到自定义槽类型。请注意,除英语(美国)以外的任何语言都不支持 AMAZON.LITERAL。
请参阅:https ://developer.amazon.com/docs/custom-skills/literal-slot-type-reference.html
曾经有一种叫做 的插槽类型Amazon.LITERAL
,允许在特定区域使用。但是,它现在已被弃用(或删除)。然而,使用自定义插槽还有另一种解决方案。
假设我们正在 Alexa 上创建一个食品订购系统。像 Zomato 或 Alexa 的 Yelp 这样的技能。让我们为该技能命名为 robert。
因此,首先我们列出将要进行的陈述类型。如果你的技能不是这个特定的,你可以跳过这一步。但是,这只是帮助您定义您的技能可能会遇到的语句类型。
在我们制作了一个语句列表后,我们将它们存储在一个 csv 文件中。我们继续并单击Slot Types旁边的Add按钮。为您的自定义插槽类型命名。 现在,一旦你完成了这个,拿出你的技能可以被调用的结构列表。其中一些已在下面给出。
三个点 (...) 代表订单/报表的实际部分。这是您有兴趣提取的文本。一个例子是;对于声明,
Alexa 让罗伯特送我一桶鸡块。
您可能有兴趣仅提取粗体部分。
现在亚马逊根据意图对陈述进行分类。它们有五个默认的预定义意图,用于欢迎、取消、帮助和其他基本功能。我们继续创建一个自定义意图来处理主要用于与我们的技能交互的主流语句。
在新的自定义意图窗口下,页面底部是用于添加将在您的意图中使用的插槽的空间。我们添加我们之前创建的自定义插槽并将其命名为literal。(你可以任意命名)自定义槽,在我们的例子中是文字,是我们想要从用户语句中提取的文本。现在我们继续将构造列表中的三个点 (...) 替换为{literal}
并将其添加到示例话语列表中。
对于声明
Alexa 让 robert 给我送一份带有土豆泥的鸡排。
JSON 将包含这样的部分,用于自定义意图并突出显示自定义插槽文本。
"request": {
"type": "IntentRequest",
"requestId": "",
"timestamp": "2019-01-01T19:37:17Z",
"locale": "en-IN",
"intent": {
"name": "InteractionIntent",
"confirmationStatus": "NONE",
"slots": {
"literal": {
"name": "literal",
"value": "to send me a chicken steak with mashed potatoes.",
"resolutions": {
"resolutionsPerAuthority": [
{
"authority": "",
"status": {
"code": ""
}
}
]
},
"confirmationStatus": "NONE",
"source": "USER"
}
}
}
}
在自定义意图下的槽子部分下,我们有我们的文字槽,其值为我们提供了用户语音的文本。
"slots": {
"literal": {
"name": "literal",
"value": "to send me a chicken steak with mashed potatoes."