首页 > 解决方案 > Alexa:使用 Dialog.Delegate 和 Python 链接 Intent

问题描述

我正在寻找一些示例代码,例如本文中描述的 nodejs 存在:

https://developer.amazon.com/blogs/alexa/post/9ffdbddb-948a-4eff-8408-7e210282ed38/intent-chaining-for-alexa-skill

我试图调用另一个意图但没有成功

def handle(self, handler_input):
    #some code
    return handler_input.response_builder.add_directive(DelegateDirective(updated_intent= {"name":"OrderIntent", "confirmationStatus": "None", "slots" : {}}))

标签: pythonalexaalexa-skills-kitalexa-skillalexa-slot

解决方案


我知道这个问题是很久以前提出的。我认为发布答案可能对寻找基于 python 的 Alexa 问题的其他人有所帮助。

经过大量测试,通过api 文档,并试图自己解决这个问题,我想出了以下方法来让它工作。我个人的问题是我在这里找到了一个解决方案,允许当前函数调用另一个意图的句柄函数;但是,这不会产生我需要的必需的强制插槽对话框。

我的解决方案如下:

from ask_sdk_model.dialog import delegate_directive
from ask_sdk_model.intent import Intent

def handle(self, handler_input):
    speak_output = "We're going to another intent"
    return handler_input.response_builder.speak(speak_output).add_directive(delegate_directive.DelegateDirective(updated_intent=Intent(name="<insert_intent_name>"))).response 

只需<insert_intent_name>将上述代码段中的内容更改为您尝试调用的任何意图。像这样调用它时,它会确保保持意图模型的所有部分都完好无损。IE 如果您需要插槽,它们将像最初触发初始意图时一样被处理。

注意:在测试过程中,我一直遇到错误说明: [ERROR] AttributeError: 'ResponseFactory' object has no attribute deserialized_types'. 我发现这是因为我没有添加.response到 return 语句的末尾。

它应该允许基于原始意图中的设置属性的 YesIntent 和 NoIntent 转换。

Alexa 输出


推荐阅读