Twilio对接的Dialogflow WhatsApp机器人如何实现语音转文本交互
WhatsApp语音消息接入Dialogflow全流程实现方案
第一步:拉取Twilio存储的WhatsApp语音媒体
- 从Twilio入站POST请求的参数中直接提取两个核心字段:
MediaUrl0:语音媒体的专属访问地址MediaContentType0:当前媒体的真实MIME类型,你提供的日志中该值为audio/ogg,可以直接通过这个映射出对应文件扩展名,完全解决URI无后缀的问题,不需要从URI路径推断格式
- 请求
MediaUrl0接口时,必须使用你的Twilio Account SID和Auth Token做HTTP Basic认证,匿名请求会被Twilio拦截返回401错误 - 拉取到的音频二进制流可直接存放在后端服务器内存或临时对象存储中,无需长期持久化,流程结束后即可清理
- 注意排查你日志中出现的502/11200错误:该报错是Twilio回调你的后端接口时,后端服务无法正常响应导致的,需先保证入站消息接收服务的可用性,避免流程在第一节点中断
第二步:语音转文本(STT)服务对接
WhatsApp发送的语音为Opus编码的OGG容器格式,目前主流STT服务均原生支持该格式,无需额外转码即可直接上传转录,常用可选实现:
对接Google Cloud Speech-to-Text
- 将拉取到的OGG音频二进制流直接传入Speech-to-Text API,指定音频编码参数为
OGG_OPUS,按照Twilio WhatsApp语音的默认8000Hz采样率配置请求参数,即可直接得到转录后的纯文本 - 拿到转录文本后,直接传入Dialogflow的意图识别检测接口,使用用户的WhatsApp号码(日志中的
WaId字段)作为会话ID,即可保证同一用户的对话上下文连续
对接AWS Transcribe
- 先将拉取到的OGG音频临时上传到S3存储桶,生成临时访问URI
- 调用Transcribe异步转录接口,指定媒体格式为
ogg/opus,等待转录任务完成后拉取结果文本 - 将得到的文本传入Dialogflow接口完成意图识别
第三步:响应闭环
拿到Dialogflow返回的回复内容后,直接调用Twilio的消息发送接口,将内容回复给入站请求中From字段对应的用户WhatsApp号码,即可完成整个语音交互流程。
常见踩坑提示
- 不要依赖URI后缀判断音频格式,优先使用入站参数中的
MediaContentType0值配置STT的格式参数,避免格式不匹配导致转录失败 - 临时存放的音频文件需设置自动清理规则,避免占用过多服务器或存储资源
- 不要在请求MediaUrl0时遗漏认证头,否则无法正常获取媒体文件
内容的提问来源于stack exchange,提问作者EBrigham
相关产品推荐
相关产品推荐

