如何用Python ASK SDK在Amazon.FallbackIntent触发时保存用户响应
在Python ASK SDK中捕获FallbackIntent的用户响应并保存到会话属性
核心实现思路
要捕获FallbackIntent触发时的用户原始响应,正确方式是直接从请求对象的input_transcript字段获取,而非从槽值中查找。你之前尝试用input_transcript失败,大概率是访问路径错误,或是没正确从RequestEnvelope中提取该字段。
具体实现步骤及代码示例
确保Skill已启用FallbackIntent
在Alexa开发者控制台的交互模型中,添加并启用AMAZON.FallbackIntent,确保它能被正确触发。编写FallbackIntent处理类
继承ASK SDK的AbstractRequestHandler,在handle方法中完成用户输入捕获和会话属性存储:from ask_sdk_core.dispatch_components import AbstractRequestHandler from ask_sdk_core.utils import is_intent_name from ask_sdk_core.handler_input import HandlerInput from ask_sdk_model import Response class FallbackIntentHandler(AbstractRequestHandler): def can_handle(self, handler_input: HandlerInput) -> bool: return is_intent_name("AMAZON.FallbackIntent")(handler_input) def handle(self, handler_input: HandlerInput) -> Response: # 获取用户的原始输入 user_input = handler_input.request_envelope.request.input_transcript # 获取会话属性 session_attr = handler_input.attributes_manager.session_attributes # 将用户输入保存到会话属性中 session_attr["last_fallback_input"] = user_input # 给用户的回复示例 speech_text = "抱歉,我没听清你说的内容,你可以再试一次吗?" return ( handler_input.response_builder .speak(speech_text) .ask(speech_text) .response )将Handler添加到Skill Builder
在Skill初始化代码中,把FallbackIntentHandler注册到Skill Builder:from ask_sdk_core.skill_builder import SkillBuilder sb = SkillBuilder() sb.add_request_handler(FallbackIntentHandler()) # 其他Handler(如LaunchRequestHandler等)需在此注册 lambda_handler = sb.lambda_handler()
读取保存的会话属性
后续在其他Intent的处理方法中,可通过以下方式读取保存的用户响应:
session_attr = handler_input.attributes_manager.session_attributes last_fallback = session_attr.get("last_fallback_input", "")
内容的提问来源于stack exchange,提问作者shubham salokhe
相关产品推荐
相关产品推荐

