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

部署在AWS的Websocket API调用现有路由无返回结果问题咨询

问题排查与解决方案

1. 核心问题原因

你当前使用的Lambda返回格式是HTTP API Lambda代理集成的标准返回格式,该格式不适用于Websocket API的消息回传逻辑:
Websocket API的业务路由默认不会把Lambda的返回值自动转发给客户端,只有错误场景下API Gateway的内置错误响应会直接返回,这就是你调用未配置的test路由能收到报错、调用配置好的sendMessage路由无返回的原因。

2. 正确实现方案

要实现路由调用后返回自定义消息给客户端,有两种可行配置方式,根据你的集成类型选择:

方案1:使用Lambda非代理集成

如果你当前用的是非代理集成,只需要在对应路由的集成响应配置中新增映射模板:

  • 选择响应状态码为200
  • 新增application/json类型的模板,模板内容设置为$input.path('$.body')即可把Lambda返回的body内容直接转发给客户端。
方案2:使用Lambda代理集成(更常用)

如果是代理集成模式,需要你在Lambda代码中主动调用API Gateway的PostToConnection接口推送消息,示例代码如下:

import json
import boto3
import os

# 初始化apigatewaymanagementapi客户端,替换为你的API对应的参数
apigw_management = boto3.client(
    'apigatewaymanagementapi',
    endpoint_url=f"https://{os.environ['API_ID']}.execute-api.{os.environ['REGION']}.amazonaws.com/{os.environ['STAGE']}"
)

def lambda_handler(event, context):
    print(event)
    connection_id = event['requestContext']['connectionId']
    # 自定义要返回的消息,可替换为数据库查询结果
    response_msg = json.dumps({
        "status": "success",
        "data": event
    })
    # 主动推送消息给客户端
    apigw_management.post_to_connection(
        ConnectionId=connection_id,
        Data=response_msg
    )
    return {
        "statusCode": 200
    }

额外配置注意事项:

  • 需要给Lambda执行角色添加execute-api:ManageConnections权限,允许调用PostToConnection接口
  • 配置环境变量API_ID、REGION、STAGE为你自己的Websocket API对应参数

3. $connect、$disconnect路由特殊说明

  • $connect路由可以用上述相同的逻辑推送连接成功通知给客户端
  • $disconnect触发时客户端连接已经进入断开流程,此时调用PostToConnection大概率会失败,不建议在该路由中尝试推送消息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:15:04