You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求Alexa Skill延迟响应的Python Lambda代码示例

解决Alexa Lambda函数超时的延迟响应实现

针对你的场景,在Alexa Python SDK中实现延迟响应(异步响应),核心是分两步处理:先返回临时响应告知用户正在处理,再通过后台异步任务完成API调用后发送最终结果。以下是具体代码示例和说明:

第一步:返回临时响应并触发异步任务

修改你的CustomIntentHandler,先返回让用户等待的即时响应,同时调用另一个Lambda执行耗时的API请求:

class CustomIntentHandler(AbstractRequestHandler):
    def can_handle(self, handler_input):
        return ask_utils.is_intent_name("CustomIntentHandler")(handler_input)

    def handle(self, handler_input):
        # 读取密钥(建议迁移到Lambda环境变量,更安全高效)
        import json
        with open('secrets.json') as f:
            secrets = json.load(f)
        
        # 触发异步处理Lambda
        import boto3
        lambda_client = boto3.client('lambda')
        # 传递用户会话与设备信息,用于后续发送结果
        user_id = handler_input.request_envelope.context.system.user.user_id
        device_id = handler_input.request_envelope.context.system.device.device_id
        
        lambda_client.invoke(
            FunctionName='你的异步处理Lambda名称',
            InvocationType='Event',  # 异步调用,不等待返回
            Payload=json.dumps({
                "user_id": user_id,
                "device_id": device_id,
                "secrets": secrets
            })
        )

        # 返回临时响应
        speak_output = "我正在查询你需要的信息,请稍等,结果出来后我会马上告诉你。"
        return (
            handler_input.response_builder
                .speak(speak_output)
                .response
        )

第二步:异步处理Lambda实现

创建独立的Lambda函数,负责执行耗时的API调用,完成后通过Alexa主动事件API推送结果:

import json
import boto3

def lambda_handler(event, context):
    # 获取传递的参数
    user_id = event['user_id']
    device_id = event['device_id']
    secrets = event['secrets']
    
    # 执行你的多API调用逻辑(替换为原代码中耗时的部分)
    api_results = []
    # 示例:api_results.append(call_api_1(secrets))
    # api_results.append(call_api_2(secrets))
    
    # 构造最终语音内容
    final_speak_output = f"查询完成啦,结果是:{', '.join(api_results)}"
    
    # 通过Proactive Events API发送主动通知
    proactive_client = boto3.client('alexaforbusiness')
    # 需提前在Alexa开发者控制台配置Proactive Events权限与事件类型
    proactive_client.send_announcement(
        RoomArn=f"arn:aws:alexaforbusiness:us-east-1:你的AWS账号ID:device/{device_id}",
        Content={
            'TextList': [
                {
                    'Locale': 'zh-CN',
                    'Value': final_speak_output
                }
            ]
        },
        TimeToLiveInSeconds=300
    )
    
    return {
        'statusCode': 200,
        'body': json.dumps('处理完成')
    }

关键注意事项

  • 需在Alexa开发者控制台为技能启用Proactive Events权限,并配置对应事件类型
  • 异步Lambda需配置调用Alexa主动事件API的IAM权限
  • 建议将secrets.json中的密钥迁移到Lambda环境变量,避免文件IO开销

内容的提问来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:13:32