使用 Senparc 响应客户端的语音消息
功能说明
与处理图片消息类似,Senparc 为语音消息也封装了对应的请求和响应类型。要处理用户发送的语音消息,只需重写 OnVoiceRequest 方法,并在 GetReponse 中补充 RequestMsgType.Voice 分支逻辑。
重写 OnVoiceRequest 方法
在自定义 MessageHandler 类中,重写 OnVoiceRequest 以处理语音请求:
/// <summary>
/// 处理语音请求
/// </summary>
public override IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage)
{
IResponseMessageBase responseMessage = null;
if (requestMessage != null)
{
responseMessage = GetReponse(requestMessage);
}
return responseMessage;
}Code language: PHP (php)
修改 GetReponse 方法
在 GetReponse 的 switch 语句中添加 RequestMsgType.Voice 分支,创建 ResponseMessageVoice 响应消息,并将用户语音的 MediaId 直接返回:
case RequestMsgType.Voice:
{
Writelog("进入回复语音消息");
var requestMessageVoice = requestMessage as RequestMessageVoice;
//响应语音消息给微信客户端
var responseMessage = CreateResponseMessage<ResponseMessageVoice>();
Voice voice = new Voice();
voice.MediaId = requestMessageVoice.MediaId;
responseMessage.Voice = voice;
return responseMessage;
}Code language: JavaScript (javascript)
关键点说明
RequestMessageVoice包含用户发送语音的相关属性,如MediaId(语音素材 ID)、Format(语音格式,如 amr)等。ResponseMessageVoice用于回复语音消息,需设置Voice.MediaId属性。- 与图片消息一样,直接使用用户发来的
MediaId可以将语音原样返回,无需重新上传。 - 临时语音素材的
MediaId同样有效期为 3 天,过期后无法使用。 - 若需回复自定义语音,需提前通过素材接口上传语音文件,获取
MediaId后再赋值。
注意:微信语音默认格式为 amr,部分格式可能不支持直接播放,建议在开发时确认语音格式兼容性。

Previous: 使用 Senparc 直接回复图片消息给客户端
Next: 使用 Senparc 处理链接消息