Lex向Amazon Connect联络流返回SSML响应失效问题
碰到过类似的坑,咱们一步步排查和解决:
先确认Lex返回的SSML格式是否“纯净”
Amazon Connect对SSML的识别要求很严格,必须是完全包裹在<speak>标签里的纯SSML字符串,不能有多余的文本前缀、后缀,也不能出现标签被转义的情况(比如把<变成<)。你可以在Lex的测试控制台里查看返回的原始响应,确认标签没有被转义,格式和你给出的示例一致。检查Connect联络流的响应处理配置
在Connect的联络流中,调用Lex之后,要确保你选择的是直接播放Lex的响应,而不是手动提取文本播放。另外,还要确认联络流里的语音播放模块是支持SSML模式的——如果不小心选了纯文本模式,Connect会把SSML当成普通文本读,甚至因为解析失败直接断开呼叫。验证SSML的语法是否符合AWS Polly规范
Connect是用Polly来转换SSML语音的,Polly对SSML标签有严格要求。你的示例里<break time="2s"/>和<break time="100ms"/>是合规的,但如果用了Polly不支持的标签(比如自定义扩展标签),就会触发错误。可以把你的SSML直接放到AWS Polly控制台里测试,看看能不能正常生成语音,快速排查语法问题。核对权限配置是否齐全
确保Lex的服务角色允许Connect调用,同时Connect的服务角色拥有访问Lex和Polly的权限——比如lex:PostContent、polly:SynthesizeSpeech这些权限。权限不足会导致响应处理失败,进而触发呼叫断开。查看CloudWatch日志定位具体问题
这是最有效的排查手段!你可以在CloudWatch的/aws/connect/[你的实例名称]日志组里,找到对应呼叫的详细日志,里面会明确记录SSML解析失败的原因——是语法错误、权限问题还是格式不兼容,一目了然。
如果以上步骤都没问题,可以先简化SSML内容(比如只用<speak>Hello World</speak>)测试,确认基础功能正常后,再逐步添加复杂标签排查。
内容的提问来源于stack exchange,提问作者rohithd

