Dialogflow对接Facebook Messenger实现TTS语音回复的方案咨询
解决方案
Facebook Messenger平台可用规避方案
Facebook Messenger的fulfillment payload确实不支持直接传入SSML,你可以通过「实时TTS转码+公网可访问音频路由」的路径实现需求,操作步骤如下:
- 在你现有的Node.js Webhook服务中接入支持SSML解析的TTS能力,可根据需求选择本地开源工具或者云服务商的TTS接口
- 当你的自定义决策规则判定需要返回语音回复时,先将待回复的文本/SSML传入TTS接口,生成Messenger支持的音频格式(推荐mp3/ogg,码率控制在128kbps以内兼容性更好)
- 如果你自有服务本身具备公网访问能力,可以直接给生成的音频分配临时可访问路由,格式示例:
/temp-audio/{唯一音频ID},用户请求该路由时直接返回音频流即可,无需额外存储;如果没有公网服务,也可以将音频上传到公网可访问的对象存储中,生成临时访问URL - 将生成的音频URL填入你现有使用的Facebook payload对应字段即可,示例结构如下:
{ "payload": { "facebook": { "attachment": { "payload": { "url": "你的临时音频公网地址" }, "type": "audio" } } }, "platform": "FACEBOOK" }
- 当决策规则判定返回文本回复时,直接返回普通文本payload即可,两种逻辑在Webhook层做分支判断就行,不需要调整Dialogflow的意图配置。
其他兼容Dialogflow的平台实现路径
如果不局限于Facebook Messenger,有更简化的实现方案:
- 对接Google Assistant:作为谷歌生态产品,和Dialogflow原生打通,fulfillment payload直接支持SSML格式,你只需传入符合规范的SSML内容,平台会自动完成TTS转语音播报,不需要自行处理转码和音频存储
- 对接Telegram、WhatsApp Business等平台:这类平台的Dialogflow集成要么原生支持文本自动转语音发送,要么payload支持直接传入SSML,开发成本远低于适配Facebook Messenger。
内容的提问来源于stack exchange,提问作者Johnny Am
相关产品推荐
相关产品推荐

