python - Alexa:使用 Dialog.Delegate 和 Python 链接 Intent
问题描述
我正在寻找一些示例代码,例如本文中描述的 nodejs 存在:
我试图调用另一个意图但没有成功
def handle(self, handler_input):
#some code
return handler_input.response_builder.add_directive(DelegateDirective(updated_intent= {"name":"OrderIntent", "confirmationStatus": "None", "slots" : {}}))
解决方案
我知道这个问题是很久以前提出的。我认为发布答案可能对寻找基于 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 转换。
推荐阅读
- spring - Spring JPA - 实体之间是否有一种内部连接的好方法,或者唯一的方法是 JPQL?
- python - “工具提示”在 python 传单映射中不起作用
- flutter - Flutter - 不再出现在小部件树中的小部件或此错误可能表示内存泄漏警告
- json - 我不知道现在如何处理问题无效语法(
,第 20 行)pylint(语法错误) - java - 测试多个文件并查看每个文件的结果的最佳方法或 method() 是什么?
- javascript - npm run build index.html 创建没有错误/警告的空白页面
- ruby-on-rails - 如何使用凭据在 Rails 6 中实现 Sendgrid
- xcode - 公司应该如何为外部开发者管理他们的证书?
- ansible - 循环多次创建多个目录
- javascript - 将画布数据保存为 mp4 - Javascript