您好我正在创建一个Alexa技能,我编写了几个自定义和默认意图,他们工作正常。
现在我想写一个后备意图,其中我想得到确切的声明要求/发送给Alexa技能,有没有办法我们可以获得已经被要求Alexa技能的整个问题字符串/文本。我知道我们可以获得插槽值和意图信息,但我需要将整个文本语句发送给技能。
由于
答案 0 :(得分:1)
嗯,我也遇到过同样的问题。在尝试了几种方法之后,我得到了问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"
}
}
}
注意*:如果有多个意图,则在这种方法中,您将需要正确处理语音。
答案 1 :(得分:0)
没有办法从最高意图直接获得全部话语。现在,您可以获得的最接近的结果是使用类型为 AMAZON.SearchQuery 的自定义广告位(不是另一个答案中建议的自定义类型),但是您必须在发声中定义一个锚定短语在插槽之前。例如,您将定义这样的发音:
search {query}
其中的查询是类型为 AMAZON.SearchQuery 的广告位。
话语中的锚点搜索是强制性的( SearchQuery 类型的要求),因此只要用户通过说出 search 来开始话语,将被捕获,这与您想要实现的目标非常接近。
已经说过,实际上有一种间接的方式来捕获用户所说的利用 AMAZON.SearchQuery 的全部话语,但这仅是使用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}
并捕获用户根据提示说的全部内容,例如“从学校接孩子们”
答案 2 :(得分:-1)
英语美国语言有一个名为AMAZON.LITERAL
的插槽类型,可让您捕捉所使用的确切短语或句子(取决于您在话语中的使用方式)。但是,此插槽类型在其他地区不可用。
亚马逊也不建议使用它:
虽然您可以提交新的和更新的英语(美国)技能 AMAZON.LITERAL,自定义插槽类型提供更好的准确性 AMAZON.LITERAL在大多数情况下。因此,我们建议您 如果可能,请考虑迁移到自定义插槽类型。注意 除英语之外的任何语言均不支持AMAZON.LITERAL (US)。
请参阅:https://developer.amazon.com/docs/custom-skills/literal-slot-type-reference.html
答案 3 :(得分:-1)
曾经有一种叫做Amazon.LITERAL
的插槽类型,允许在特定区域中使用。但是,现在已弃用(或将其删除)。
但是,可以使用自定义广告位解决此问题。
假设我们正在Alexa上创建食品订购系统。像Zomato或Yelp这样的Alexa技能。让我们为技能赋予调用名 robert 。
因此,首先我们列出将要创建的语句类型的列表。如果您的技能不是特定技能,则可以跳过此步骤。但是,这仅有助于您定义技能可能期望遇到的陈述类型。
列出语句后,将它们存储在csv文件中。 我们继续并点击广告位类型旁边的添加按钮。 给您的自定义广告位类型命名。 现在,一旦完成此操作,就可以提出可以调用您的技能的结构列表。其中一些已在下面给出。
三个点(...)代表订单/声明的实际部分。这是您要提取的文本。一个例子是;对于该语句,
Alexa请罗伯特给我送一桶鸡块。
您将只想提取粗体部分。
现在,Amazon根据意图对语句进行分类。它们具有五种默认的预定义意图,分别用于“欢迎”,“取消”,“帮助”和其他基本功能。我们继续并创建一种习惯性意图,以处理将主要与我们的技能进行交互的主流陈述。
在新的“自定义意图窗口”下方,页面底部是用于添加意图的插槽的空间。我们添加之前创建的自定义广告位,并将其命名为 literal 。 (您可以命名任何东西)
在我们的示例中,自定义广告位 文字 是我们要从用户语句中提取的文本。
现在我们继续用{literal}
替换结构列表中的三个点(...),并将其添加到示例话语列表中。
声明
Alexa命令罗伯特给我寄来一份鸡肉土豆泥。
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”小节下,我们有一个文字插槽,其值为我们提供了用户语音的文本。
"slots": {
"literal": {
"name": "literal",
"value": "to send me a chicken steak with mashed potatoes."