使用 Senparc 群发文本消息

使用 Senparc 群发文本消息

功能说明

Senparc 为微信公众平台的群发消息功能封装了 GroupMessageApi,可以方便地实现按分组群发文本、图文、图片、语音、视频等类型的内容。本节以群发文本消息为例进行说明。

实现代码

/// <summary>
/// 群发消息
/// </summary>
/// <param name="type">
/// 群发类型:Text = 0, News = 1, Music = 2, Image = 3, Voice = 4, Video = 5
/// </param>
/// <param name="groupId">要发送的用户分组ID,发给所有用户时可不输入</param>
/// <returns>返回消息ID</returns>
public string SendGroupMessage(int type, int groupId = -1)
{
    var accessToken = AccessTokenContainer.TryGetAccessToken(appId, appSecret);
    SendResult result = null;
    bool isToAll = (groupId == -1);
    string imgFilePath = Server.MapPath("~/logo.png");

    switch ((ResponseMsgType)type)
    {
        case ResponseMsgType.Text:
            result = GroupMessageApi.SendGroupMessageByGroupId(
                accessToken,
                groupId.ToString(),
                "测试的群发文本内容---来自北盟网校",
                GroupMessageType.text,
                isToAll
            );
            break;
    }

    return result.errcode + "-" + result.errmsg;
}Code language: PHP (php)

关键点说明

  • GroupMessageApi.SendGroupMessageByGroupId():按用户分组群发消息的核心方法。
    • accessToken:接口调用凭证
    • groupId:分组 ID,字符串类型;当 isToAll = true 时此参数可为空
    • 第三个参数:消息内容(文本类型时直接传字符串)
    • GroupMessageType.text:指定群发类型为文本
    • isToAll:是否向全部用户发送(true 时忽略 groupId
  • SendResult:返回结果对象,包含以下属性:
    • errcode:错误码,0 表示成功
    • errmsg:错误信息,"ok" 表示成功
    • msg_id:消息 ID,可用于后续查询群发状态
    • msg_data_id:消息数据 ID(图文消息特有)
  • isToAll 设为 true 时,消息将发送给所有关注者;设为 false 时仅发送给指定分组。

权限与限制

账号类型群发权限
认证服务号支持按分组群发、按标签群发、全部发送
未认证订阅号仅支持每天 1 次群发,且只能发送给全部用户
测试账号通常无群发权限,调用会报 45028

注意:未认证订阅号调用 SendGroupMessageByGroupId 指定分组时可能失败,需使用全部发送接口。测试账号基本无法群发,仅可用于接口调试。

常见错误码

错误码说明
45028没有群发配额(测试号/未认证号常见)
45029群发速度过快,请稍后再试
45030消息内容过长
45031同一用户 24 小时内只能接收 1 条群发消息

扩展思路

  • 可结合前面获取用户分组(第 14 节)的功能,实现按分组精准推送
  • 群发前可先调用 Preview 接口向指定 openid 发送预览,确认内容无误
  • 群发后可通过 GetGroupMessageResult 查询发送状态

发表回复

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