企业微信外部群消息推送实战指南

核心逻辑:外部群消息推送的两种方式

  1. Webhook 机器人方式(最简单):

    • 场景:手动在群里添加机器人,获取 Webhook 地址。

    • 限制:需要群主开启机器人权限,且外部群可能不支持直接添加(需开启"外部群插件")。

  2. 应用 API 方式(最专业):

    • 场景 :通过自建应用,利用 chat_id 主动推送。

    • 限制 :需要先通过接口获取 chat_id,且该应用必须在客户联系的业务范围内。


代码实现示例

以下均以 应用 API 方式 (/cgi-bin/appchat/send) 为例:

1. Python 实现 (使用 requests)

Python 代码最为简洁,适合做脚本或快速验证。

python 复制代码
import requests
import json

def send_to_external_group(token, chat_id, text):
    url = f"https://qyapi.weixin.qq.com/cgi-bin/appchat/send?access_token={token}"
    data = {
        "chatid": chat_id,
        "msgtype": "text",
        "text": { "content": text },
        "safe": 0
    }
    res = requests.post(url, data=json.dumps(data))
    return res.json()

2. Go 实现 (使用标准库)

Go 适合追求性能的中间件推送服务。

java 复制代码
func SendGroupMsg(token string, chatId string, content string) {
    url := "https://qyapi.weixin.qq.com/cgi-bin/appchat/send?access_token=" + token
    body := map[string]interface{}{
        "chatid":  chatId,
        "msgtype": "text",
        "text":    map[string]string{"content": content},
    }
    jsonBody, _ := json.Marshal(body)
    http.Post(url, "application/json", bytes.NewBuffer(jsonBody))
}

3. Java 实现 (使用 RestTemplate)

Java 方案通常集成在 Spring Boot 项目中。

java 复制代码
public void sendMsg(String token, String chatId, String text) {
    String url = "https://qyapi.weixin.qq.com/cgi-bin/appchat/send?access_token=" + token;
    Map<String, Object> params = new HashMap<>();
    params.put("chatid", chatId);
    params.put("msgtype", "text");
    params.put("text", Collections.singletonMap("content", text));
    
    restTemplate.postForEntity(url, params, String.class);
}

⚠️ 开发者必看的三个"坑"

  • 获取 ChatID 的前置条件:

    你不能通过群名发消息。必须先调用 externalcontact/groupchat/list 获取群列表,再通过 get 接口获取具体的 chat_id。

  • 应用可见性:

    发送消息的应用,必须在企业微信后台配置的"可调用接口的应用"列表中,且群主必须在应用的可见范围内。

  • 发送频率:

    外部群对自动化消息有严格限制。如果短时间内发送频率过高,会导致接口返回 81013 错误或直接封禁应用发送功能。

QiWe开放平台提供了后台直登功能,登录成功后获取相关参数,快速Apifox在线测试,所有登录功能都是基于QiWe平台API自定义开发。

相关推荐
你不是我我2 小时前
【Java 开发日记】HTTP3 性能更好,为什么内网微服务依然多用 HTTP2?HTTP2 内网优势是什么?
java·开发语言·微服务
雪碧聊技术2 小时前
大模型爆火!Java后端如何抓住Agent全栈开发的风口
java·大模型·agent·全栈开发
逻辑驱动的ken3 小时前
Java高频面试场景题25
java·开发语言·深度学习·面试·职场和发展
AI人工智能+电脑小能手4 小时前
【大白话说Java面试题】【Java基础篇】第32题:Java的异常处理机制是什么
java·开发语言·后端·面试
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ6 小时前
通过java后端代码来实现给word内容补充格式文本内容控件,以及 设置控件的标记和标题
java·c#·word
無限進步D6 小时前
Java 面向对象高级 接口
java·开发语言
逸Y 仙X7 小时前
文章二十七:ElasticSearch ES查询模板(Search Template)高效复用实战
java·大数据·数据库·elasticsearch·搜索引擎·全文检索
二哈赛车手7 小时前
新人笔记---Spring AI的Advisor以及其底层机制讲解(涉及源码),包含一些遇见的Spring AI的Advisor缺陷问题的解决方案
java·人工智能·spring boot·笔记·spring
AC赳赳老秦7 小时前
接口测试自动化:用 OpenClaw 对接 Postman,实现批量回归测试、测试报告自动生成与推送
java·人工智能·python·算法·elasticsearch·deepseek·openclaw