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

Amazon Lex V1结合Lambda返回Composite多消息异常排查

Amazon Lex V1 结合Lambda返回多消息异常排查与修复

问题根因

当前代码无法实现双消息展示,核心有两个错误:

  • 结构版本混用:你写的contentType: "Composite"、content内嵌套messages数组的格式是Amazon Lex V2的响应规范,Lex V1不识别该结构,会直接丢弃非法字段,无法按预期渲染多消息。
  • 回调参数错误:Node.js环境下Lex对接Lambda的回调遵循标准格式,callback第一个参数为错误对象,第二个参数才是成功返回的响应体,你直接将响应对象作为第一个参数传入,会被Lex判定为Lambda执行错误,拿不到有效返回内容。

正确实现方案

Lex V1原生单条message字段仅支持单文本输出,要实现两条连续文本展示,可根据你的客户端类型选以下两种方案:

方案1:自定义客户端场景(推荐,灵活度最高)

使用CustomPayload类型传递多消息结构,客户端拿到返回后自行解析渲染,代码如下:

const multiMessageContent = {
  messages: [
    { type: "PlainText", value: "welcome" },
    { type: "PlainText", value: "To GAC" }
  ]
};

const response = {
  dialogAction: {
    type: "Close",
    fulfillmentState: "Fulfilled",
    message: {
      contentType: "CustomPayload",
      content: JSON.stringify(multiMessageContent)
    }
  }
};
// 注意:无错误时第一个参数必须传null
callback(null, response);

客户端侧逻辑:识别到返回contentType为CustomPayload时,解析content字段的JSON结构,遍历messages数组依次渲染文本即可,和预期展示效果完全一致。

方案2:使用Lex原生通用响应卡片(适配官方SDK/托管客户端)

如果使用Lex官方提供的Web UI、移动端SDK等托管客户端,不需要自定义解析逻辑,可通过主消息+响应卡片的结构实现双文本展示,代码如下:

const response = {
  dialogAction: {
    type: "Close",
    fulfillmentState: "Fulfilled",
    // 第一条消息
    message: {
      contentType: "PlainText",
      content: "welcome"
    },
    // 第二条消息通过响应卡片传递
    responseCard: {
      version: "1",
      contentType: "application/vnd.amazonaws.card.generic",
      genericAttachments: [
        {
          subTitle: "To GAC"
        }
      ]
    }
  }
};
callback(null, response);

官方Lex客户端会自动将主消息、卡片副标题按上下顺序渲染为纯文本,不需要额外开发解析逻辑。

验证注意事项

  • 部署Lambda代码后,需要在Lex控制台对应Intent的Fulfillment配置页,重新保存Lambda关联配置,确保新版本代码生效。
  • 测试时优先使用Lex控制台的测试窗口,确认返回结构符合预期后再对接客户端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:18:30