在我的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下运行)
谢谢!
发布于 2020-03-22 23:49:55
最后我找到了答案:
return NewsIntentHandler.handle(self, handler_input)发布于 2021-12-06 23:49:52
我不知道这对你是否有用。不幸的是,我无法使用您的解决方案,因为它没有重置/启动意图所需的插槽问题。它将简单地保留上次触发时存储的值。
对于您的情况,我将确保您在NewsIntent中设置一个会话属性,如下所示:
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意图。
您需要一个类来定义在触发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 因此,我计划使用会话属性来输出不同的语句,并根据会话属性确定需要触发的正确意图。我计划继续修改会话属性,以确保可以通过它们处理自定义的AMAZON.YesIntent操作。如果我发现了更多,我会发布一个经过编辑的更新。
https://stackoverflow.com/questions/60686421
复制相似问题