使用 Senparc 响应客户端的语音消息

使用 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 方法

GetReponseswitch 语句中添加 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,部分格式可能不支持直接播放,建议在开发时确认语音格式兼容性。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注