在企业微信的生态开发中,“外部群”(包含微信用户的群聊)的消息交互一直是个重点。很多开发者在初次接触时,容易混淆“内部群”和“外部群”的接口权限。
本文将重点解析如何通过二次开发,实现企业微信后台主动向外部群发送消息的技术流程。
1. 核心逻辑梳理
要向外部群发送消息,并不是简单地调用一个 SendMsg 接口。由于隐私保护机制,企业微信对外部群的主动触达有严格限制。
目前主流的两种合法合规实现路径:
- 应用消息推送(上下游/互联企业):适用于特定组织架构。
- 群机器人(Webhook):最常用、最灵活的手段。
- 客户群群发接口(入群后的消息下发):由成员确认后发出。
2. 基于 Webhook 的主动调用方案
对于大多数场景(如:监控告警、数据日报推送到外部客户群),群机器人是最便捷的二次开发选择。
第一步:获取 Webhook 地址
在外部群的设置界面,点击“群机器人” -> “添加机器人”,获取唯一的 webhook_url。
第二步:构造请求体
企业微信支持文本、Markdown、图片、图文等多种格式。
第三步:后端代码实现(以 Python 为例)
import requests
import json
def send_external_group_msg(webhook_url, content):
headers = {"Content-Type": "application/json"}
payload = {
"msgtype": "markdown",
"markdown": {
"content": f"## 业务提醒 \n > 内容:<font color=\"info\">{content}</font>"
}
}
try:
response = requests.post(webhook_url, data=json.dumps(payload), headers=headers)
if response.status_code == 200:
print("消息发送成功")
else:
print(f"发送失败,错误码:{response.text}")
except Exception as e:
print(f"网络异常: {e}")
# 调用示例
WEBHOOK = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY"
send_external_group_msg(WEBHOOK, "今日外部群活跃数据已生成,请查收。")
3. 技术难点与注意事项
- 频率限制:每个机器人每分钟最多发送 20 条消息。如果需要高频推送,建议建立机器人池或加入消息队列(MQ)进行削峰填谷。
-
白名单配置:如果你的服务器部署在内网,需确保服务器能访问
qyapi.weixin.qq.com的 443 端口。 -
安全性:
webhook_url泄露会导致群聊被垃圾信息轰炸,建议在后端逻辑中对 URL 进行加密存储,不要在前端代码中暴露。
4. 进阶:如何获取外部群的 chat_id?
如果你需要通过企业级 API(而非 Webhook)进行更深度管理,你需要先通过“客户群列表接口”获取 chat_id:
- 调用
get_user_all_customer_stats获取成员负责的群聊。 - 通过
externalcontact/groupchat/list接口拉取群列表。 - 利用
chat_id调用特定的群管理接口。
结语
企业微信 API 的二次开发难点不在于代码本身,而在于对权限边界的理解。对于外部群,主动调用的核心思路应优先考虑“轻量化的 Webhook”;若涉及大规模营销动作,则必须遵循官方的“群发助手”逻辑,由员工进行二次确认。
QiWe开放平台提供了后台直登功能,登录成功后获取相关参数,快速Apifox在线测试,所有登录功能都是基于QiWe平台API自定义开发。