1. 消息识别
MsgType="voice",代表本次推送是语音消息- 和图片消息结构很像,核心两个XML节点:
MediaId:语音媒体ID,调用微信多媒体下载接口,拉取语音原始文件Format:语音编码格式,常见amr/speex
语音消息XML没有Content文本节点;如果需要语音转文字,公众号接口还提供
Recognition节点(需开通语音识别能力)。
2. C# 代码示例
case "voice":
VoiceHandle(xmldoc);
break;
private void VoiceHandle(XmlDocument xmldoc)
{
// 获取媒体ID
XmlNode MediaId = xmldoc.SelectSingleNode("/xml/MediaId");
// 获取语音格式
XmlNode Format = xmldoc.SelectSingleNode("/xml/Format");
string mediaIdStr = MediaId.InnerText;
string voiceFormat = Format.InnerText;
// 可在这里调用微信接口,下载语音文件
}
Code language: JavaScript (javascript)
3. 三种消息对比汇总
| 消息类型 | MsgType | 核心XML节点 |
|---|---|---|
| 文本消息 | text | Content |
| 图片消息 | image | PicUrl、MediaId |
| 语音消息 | voice | MediaId、Format |
4. 要点
- 语音文件有有效期,必须通过
MediaId下载保存,不能长期依赖临时资源。 - amr/speex格式属于小众音频格式,网页端无法直接播放,一般需要转码成mp3。
Recognition节点:开启语音识别后,微信会自动把语音转成文字放到这个节点,不用自己做ASR。