为什么我的SSML在Alexa控制台测试正常但实体设备上无法运行?
问题原因
该问题是两个SSML格式相关的问题共同导致的,线上开发者控制台的测试环境容错性更高,会自动修复格式问题,而实体Echo设备的SSML解析校验更严格,因此出现两端表现不一致的情况:
- 缺少必填根标签:Alexa标准SSML要求所有语音内容必须包裹在
<speak>根标签内,线上测试环境会自动补全缺失的根标签,而Echo设备端遇到缺失根标签的内容会直接触发解析错误。 - 特殊字符被转义:你代码中的SSML标签使用了HTML转义字符(
<代替<、"代替"),转义后的内容会被设备端识别为普通文本,无法被解析为SSML标签,导致格式校验失败。
修复方案
将你的LaunchRequest代码修改为如下格式即可:
const LaunchRequestHandler = { canHandle(handlerInput) { return Alexa.getRequestType(handlerInput.requestEnvelope) === 'LaunchRequest'; }, handle(handlerInput) { var speechOutput = '<speak><prosody pitch="low">Hello.</prosody></speak>'; return handlerInput.responseBuilder .speak(speechOutput) .reprompt(speechOutput) .getResponse(); } };
其他可选排查点
如果修改后仍然报错,可以逐一排查以下问题:
- 确认你的Echo设备注册区域与技能部署的区域完全匹配,不同区域的Alexa服务对SSML的解析规则存在微小差异
- 更新Echo设备对应的Alexa App到最新版本,部分旧版本客户端存在SSML解析bug
- 可以先用最简单的
<speak>测试文本</speak>验证基础SSML功能正常,再逐步添加prosody等效果标签
内容的提问来源于stack exchange,提问作者ArcaneLight
相关产品推荐
相关产品推荐

