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
相关产品推荐
相关产品推荐

