gpt4 book ai didi

python-3.x - 如何使用 Python 和 ask-sdk( intent 链接)将 intent 委托(delegate)给 Alexa?

转载 作者:行者123 更新时间:2023-12-01 21:45:49 25 4
gpt4 key购买 nike

在我的 Alexa-Skill 中,我问用户一个是/否问题(他是否喜欢听新闻)- 在是的部分,我想启动 NewsIntent,就像用户手动调用它一样。

它背后的想法来自 Justin Jeffress:https://developer.amazon.com/de/blogs/alexa/post/9ffdbddb-948a-4eff-8408-7e210282ed38/intent-chaining-for-alexa-skill

handler_input.response_builder.add_directive(DelegateDirective('NewsIntent')).speak(speech_text)
return handler_input.response_builder.response

当我在开发人员控制台中对其进行测试时,我收到了 speach_text,但随后我被告知发生了错误。

这是它的 JSON 输出:

{
"body": {
"version": "1.0",
"response": {
"outputSpeech": {
"type": "SSML",
"ssml": "<speak>My pleasure!</speak>"
},
"directives": [
{
"type": "Dialog.Delegate",
"updatedIntent": {
"name": "NewsIntent",
"confirmationStatus": "NONE",
"slots": {}
}
}
],
"type": "_DEFAULT_RESPONSE"
},
"sessionAttributes": {
"IntentOrigin": null
},
"userAgent": "ask-python/1.13.0 Python/3.6.9 ask-webservice django-ask-sdk ask-webservice django-ask-sdk"
}
}

有人知道如何解决这个问题吗?在这种情况下,Python 不会抛出任何异常。 (在Django下运行)

谢谢!

最佳答案

我不知道这对你是否有用。不幸的是,我无法使用您的解决方案,因为它没有重置/启动 intent 所需的所需插槽问题。它只会保留上次触发时的存储值。

对于您的情况,我会确保您在 NewsIntent 中设置 session 属性,如下所示:

def handle(self, handler_input):
attribute_manager = handler_input.attributes_manager
session_attr = attribute_manager.session_attributes

# Your logic for your intent here

session_attr['news'] = 'some string or value'
speak_output = "I found some news! Would you like to find more?"
return (handler_input.response_builder.speak(speak_output).response)

您需要在构建器 UI 中添加 AMAZON.YesIntent intent 。

您需要一个类来定义在 AMAZON.YesIntent 触发时如何处理它。对于此示例,我将该类命名为 MoreNewsIntentHandler。将此添加到代码的底部:

sb.add_request_handler(MoreNewsIntentHandler())

然后最后,在 AMAZON.YesIntent 触发时创建具有预期操作的类。

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

class MoreNewsIntentHandler(AbstractRequestHandler):
def can_handle(self, handler_input):
attribute_manager = handler_input.attributes_manager
session_attr = attribute_manager.session_attributes
return (is_intent_name("AMAZON.YesIntent")(handler_input) and "news" in session_attr)

def handle(self, handler_input):
attribute_manager = handler_input.attributes_manager
session_attr = attribute_manager.session_attributes
if "news" in session_attr:
speak_output = "Ok. Let's get some more news"
intent_name = "NewsIntent"
return handler_input.response_builder.speak(speak_output).add_directive(delegate_directive.DelegateDirective(updated_intent=Intent(name=intent_name))).response


有了这个,我打算使用 session 属性来输出不同的语句,并根据 session 属性识别需要触发的正确 intent 。我计划继续修改 session 属性以确保我可以通过它们处理自定义 AMAZON.YesIntent 操作。如果我发现更多信息,我会发布经过编辑的更新。

关于python-3.x - 如何使用 Python 和 ask-sdk( intent 链接)将 intent 委托(delegate)给 Alexa?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60686421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com