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

Amazon Lex-Lambda函数含HTML标签时无法返回语音输出问题

解决AWS Lex带HTML标签消息无语音输出的问题

这个问题我之前也碰到过,核心原因是AWS Lex对PlainText类型内容的文本显示和语音合成逻辑是分开的:

  • 前端UI(比如Lex Web UI)会自动解析转义后的HTML标签,所以你能看到可点击的链接;
  • 但Lex调用Amazon Polly生成语音时,会把PlainText里的所有内容(包括<a href...>这类转义字符)当成纯文本处理,要么会读出这些奇怪的符号,要么因为格式异常直接无法生成语音,就出现了你说的无语音输出的情况。

正确的解决方案:分开处理文本显示和语音内容

你需要在Lambda的响应中同时提供两种消息:一种用于前端显示(带HTML转义的链接),另一种专门用于语音合成(纯文本或SSML格式)。Lex会根据客户端的能力自动匹配对应的消息。

举个实际的代码例子:

// Lambda返回的完整响应
var response = {
  dialogAction: {
    type: 'Close',
    fulfillmentState: 'Fulfilled',
    messages: [
      // 用于文本显示:带HTML转义的链接
      {
        contentType: 'PlainText',
        content: 'We offer x,y,z. For more information, visit our <a href="www.xyz.com">website</a>'
      },
      // 用于语音合成:纯文本,去掉所有HTML格式
      {
        contentType: 'PlainText',
        content: 'We offer x, y, z. For more information, visit our website at www.xyz.com'
      }
    ]
  }
};

如果想更精细地控制语音(比如停顿、语调),可以改用SSML格式的语音消息:

var response = {
  dialogAction: {
    type: 'Close',
    fulfillmentState: 'Fulfilled',
    messages: [
      {
        contentType: 'PlainText',
        content: 'We offer x,y,z. For more information, visit our <a href="www.xyz.com">website</a>'
      },
      {
        contentType: 'SSML',
        content: '<speak>We offer x, y, z. <break time="500ms"/> For more information, visit our website at www.xyz.com</speak>'
      }
    ]
  }
};

这样处理后,前端能正常显示可点击链接,语音合成也能输出清晰自然的内容,完美解决你的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:44:12