Alexa AMAZON.YesIntent/NoIntent对话流转及模糊场景JSON配置咨询
处理Alexa的AMAZON.YesIntent/NoIntent:对话流转与歧义处理
嘿,我来帮你搞定Alexa里AMAZON.YesIntent/NoIntent的对话流转和歧义处理问题——这在技能开发里是个高频需求,我给你拆解清楚,再附上实打实的JSON配置示例。
一、让Yes/No Intent接入对话流程并传递到带响应槽的意图
默认情况下,AMAZON.YesIntent和NoIntent是全局触发的,要让它们能精准对应到特定的对话流程(比如确认某个槽位后继续填充其他槽),核心是用会话属性(sessionAttributes)跟踪对话上下文,让Alexa知道用户的“是/否”对应哪个未完成的意图请求。
具体步骤:
- 第一步:在需要用户确认的主意图(比如
BookTableIntent)中,当需要确认某个槽位(比如预订日期)时,返回带确认提示的响应,同时把当前意图名称、目标槽位等信息存入会话属性。 - 第二步:在AMAZON.YesIntent/NoIntent的处理逻辑中,读取会话属性里的上下文信息,判断用户是在确认哪个意图的哪个槽位,然后把控制权转交给对应的意图,直接处理确认结果。
示例1:主意图触发确认请求的JSON响应
当BookTableIntent需要用户确认日期时,返回的响应如下:
{ "version": "1.0", "sessionAttributes": { "currentIntent": "BookTableIntent", "targetSlot": "date", "pendingConfirmation": true, "tempDateValue": "2024-06-15" }, "response": { "outputSpeech": { "type": "PlainText", "text": "你确认要预订2024年6月15日的晚餐吗?" }, "reprompt": { "outputSpeech": { "type": "PlainText", "text": "请告诉我是或者否哦。" } }, "shouldEndSession": false } }
示例2:YesIntent传递到带槽的意图的JSON响应
当用户说“是”触发AMAZON.YesIntent后,读取会话属性,确认日期有效,然后转去BookTableIntent继续收集“用餐人数”槽位:
{ "version": "1.0", "sessionAttributes": { "currentIntent": "BookTableIntent", "pendingConfirmation": false, "date": "2024-06-15" }, "response": { "outputSpeech": { "type": "PlainText", "text": "好的,日期已确认!接下来请告诉我你需要的用餐人数。" }, "directives": [ { "type": "Dialog.ElicitSlot", "slotToElicit": "partySize", "updatedIntent": { "name": "BookTableIntent", "slots": { "date": { "name": "date", "value": "2024-06-15" }, "partySize": { "name": "partySize" } } } } ], "shouldEndSession": false } }
二、处理Yes/No Intent的歧义情况
如果用户的“是/否”可能对应多个未完成的请求(比如之前同时触发了预订餐桌和点饮料的意图),或者Alexa无法明确用户的指向,就需要返回澄清对话,或者根据规则转去自定义的澄清意图。
核心思路是在会话属性里维护一个待处理意图的栈,当上下文不明确时,触发澄清流程,让用户明确自己的需求。
示例:歧义时返回澄清对话的JSON响应
当会话属性里存在多个待处理意图,AMAZON.YesIntent触发后返回的澄清响应:
{ "version": "1.0", "sessionAttributes": { "pendingIntents": ["BookTableIntent", "OrderDrinkIntent"] }, "response": { "outputSpeech": { "type": "PlainText", "text": "抱歉,我没太明白你是确认预订餐桌还是确认点饮料呢?" }, "reprompt": { "outputSpeech": { "type": "PlainText", "text": "请告诉我你指的是哪个请求哦。" } }, "directives": [ { "type": "Dialog.ElicitSlot", "slotToElicit": "targetIntent", "updatedIntent": { "name": "ClarifyIntent", "slots": { "targetIntent": { "name": "targetIntent" } } } } ], "shouldEndSession": false } }
一些关键注意点
- 会话属性是核心:一定要维护好会话属性的上下文信息,避免混乱,否则Yes/No的流转会出现错误。
- 全局意图的触发范围:在Alexa开发者控制台的Intent Builder里,确保已经添加了AMAZON.YesIntent和NoIntent,并且可以通过自定义样本 utterance 调整触发的精准度。
- 歧义处理优先级:如果上下文太复杂,优先用澄清对话,不要强行猜测用户意图,避免降低用户体验。
内容的提问来源于stack exchange,提问作者ina
相关产品推荐
相关产品推荐

