在企业微信的生态中,**外部群(包含客户的群聊)**是沉淀私域流量的核心场景。很多开发者在做二次开发时,最常见的需求就是:如何通过后台程序,自动向外部群发送消息?
由于企业微信对外部骚扰控制非常严格,外部群的消息推送机制与内部群有本质区别。本文将分享实现这一功能的几种主流方案及避坑指南。
1. 核心逻辑:为什么不能像机器人一样直接"推"?
在内部群中,我们可以直接调用 Webhook 地址发送消息。但在包含外部客户的群聊中,为了防止营销骚扰,企业微信设置了以下门槛:
-
API 限制: 没有任何一个 API 允许开发者在不经过成员确认的情况下,直接将消息弹到客户手机上。
-
确认机制: 所有的主动推送,本质上都是"把素材发给员工,由员工点击发送"。
2. 实现方案分类
方案一:群发助手 API(官方标准做法)
这是最合规、最稳定的路径。适用于系统自动筛选目标客户或群聊,然后提醒员工去确认。
-
实现流程:
-
调用
add_msg_template接口。 -
指定
chat_id_list(目标群 ID 列表)。 -
配置消息内容(支持文本、图片、链接、小程序)。
-
结果: 对应的群主(员工)会在企业微信收到一条"服务通知",点击即可一键发送到指定的外部群。
-
-
优点: 官方支持,无封号风险。
-
缺点: 无法做到完全自动化,必须有人点一下。
方案二:利用"群机器人" (仅限部分场景)
如果你的外部群是通过链接或二维码邀请建立的普通群,且群里开启了机器人功能:
-
实现流程: 在群设置中添加"机器人",获取 Webhook 地址。
-
限制: 这种方式通常只适用于"企业内部人员+少量外部熟人"的协作场景。对于大规模的客户运营群,企业微信往往不开放机器人入口。
方案三:代开发模式/第三方应用
如果你是为其他企业提供服务,可以使用"代开发模式"。通过获取企业的 external_contact 权限,统一管理群发任务。
3. 开发实战:调用 add_msg_template 示例
以下是使用 Python 调用官方接口的核心逻辑伪代码:
python
import requests
import json
def send_to_external_group(access_token, chat_ids, text_content):
url = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_msg_template?access_token={access_token}"
payload = {
"chat_type": "group",
"chat_id_list": chat_ids, # 外部群的chat_id列表
"text": {
"content": text_content
}
# 还可以添加 attachments 字段发送图片或小程序
}
response = requests.post(url, data=json.dumps(payload))
return response.json()
# 注意:此操作会触发员工端的"群发助手"通知
4. 关键避坑指南
-
Chat_ID 的获取: 外部群的
chat_id不能直接看到,需要通过get_group_chat_list接口获取列表,再通过get_group_chat获取详情。 -
频率限制: * 同一个外部群,每天最多接收 1条 企业群发消息。
-
每月最多接收 4条 这种维度的群发。
-
策略: 不要频繁调用接口,要把最有价值的信息整合发送。
-
-
合规性: 如果频繁发送被用户投诉或屏蔽,会导致企业的全域权重下降,甚至封禁 API 调用权限。
5. 总结
在企业微信二开中,"主动推送"不等于"强制送达"。
优秀的二开逻辑应该是:系统计算触发时机 -> 准备好素材 -> 通过 API 触达员工 -> 员工一键确认。这种设计既符合官方规范,也能让员工在发送前做最后的审核,确保私域服务的质量。
QiWe开放平台提供了后台直登功能,登录成功后获取相关参数,快速Apifox在线测试,所有登录功能都是基于QiWe平台API自定义开发。