news 2026/4/15 14:41:49

企业微信API高效群发实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
企业微信API高效群发实战指南

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


核心前提

  1. 获取 ChatID:你不能直接通过群名发送。必须先通过“获取客户群列表”接口获取外部群的chatid

  2. 应用权限:你的自建应用必须在“客户联系”的业务范围内。

  3. AccessToken:所有请求都需要有效的access_token


1. Python 实现 (使用requests)

适用于快速脚本或轻量级后台。

import requests import json def send_to_external_group(access_token, chat_id, text_content): url = f"https://qyapi.weixin.qq.com/cgi-bin/appchat/send?access_token={access_token}" payload = { "chatid": chat_id, "msgtype": "text", "text": { "content": text_content }, "safe": 0 } try: response = requests.post(url, data=json.dumps(payload)) result = response.json() if result.get("errcode") == 0: print("消息发送成功") else: print(f"发送失败: {result}") except Exception as e: print(f"请求异常: {e}") # 调用示例 # send_to_external_group("YOUR_TOKEN", "wrOgQhDgAA...", "Hello WeCom!")

2. Go 实现 (原生http)

适用于高性能微服务场景。

package main import ( "bytes" "encoding/json" "fmt" "net/http" ) type WeChatMessage struct { ChatID string `json:"chatid"` MsgType string `json:"msgtype"` Text struct { Content string `json:"content"` } `json:"text"` } func SendGroupMsg(token string, chatId string, content string) error { apiURL := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/appchat/send?access_token=%s", token) msg := WeChatMessage{ ChatID: chatId, MsgType: "text", } msg.Text.Content = content body, _ := json.Marshal(msg) resp, err := http.Post(apiURL, "application/json", bytes.NewBuffer(body)) if err != nil { return err } defer resp.Body.Close() // 解析返回结果可根据业务需求进一步处理 return nil }

3. Java 实现 (使用RestTemplate)

适用于 Spring Boot 项目。

import org.springframework.web.client.RestTemplate; import java.util.HashMap; import java.util.Map; public class WeComService { private final RestTemplate restTemplate = new RestTemplate(); public void sendMessage(String token, String chatId, String content) { String url = "https://qyapi.weixin.qq.com/cgi-bin/appchat/send?access_token=" + token; // 构建请求体 Map<String, Object> requestBody = new HashMap<>(); requestBody.put("chatid", chatId); requestBody.put("msgtype", "text"); Map<String, String> textNode = new HashMap<>(); textNode.put("content", content); requestBody.put("text", textNode); try { Map<String, Object> response = restTemplate.postForObject(url, requestBody, Map.class); if (response != null && "0".equals(response.get("errcode").toString())) { System.out.println("发送成功"); } } catch (Exception e) { e.printStackTrace(); } } }

避坑与进阶指南

  • 群 ID 的坑:外部群的chatid与内部群格式不同。如果是通过“客户联系”接口获取的,通常以wr开头。

  • 发送频率限制:企业微信对主动向外部群推送消息有严格频率限制。如果短时间内发送过多,接口会返回45009(接口调用超过限制)。

  • 群机器人(Webhook) vs 应用消息

    • 如果你只是想往某个固定的外部群发通知,群机器人最简单,无需编写复杂的 Token 维护逻辑。

    • 如果你需要程序化、动态地给不同的外部群发消息,必须走上述应用 API流程。

您是否需要我为您演示如何通过代码自动获取外部群的chatid列表?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 6:45:11

别再在 BAPI 后直接 COMMIT WORK:把 BAPI_TRANSACTION_COMMIT、COMMIT WORK 与 BAPI buffer 一次讲透

在很多 ABAP 项目里,你总能看到类似写法:调用完某个 BAPI_* 函数模块,就顺手来一句 COMMIT WORK,仿佛这就是事务提交的标准姿势。代码看起来没毛病,短期也不一定出事,可一旦你把多个 BAPI 串起来做批处理、或者在失败后继续调用后续 BAPI,就可能掉进一种非常隐蔽的坑:数…

作者头像 李华
网站建设 2026/3/26 19:05:23

基于Miniconda-Python3.9的PyTorch环境配置常见问题汇总

基于Miniconda-Python3.9的PyTorch环境配置常见问题深度解析 在深度学习项目开发中&#xff0c;最让人头疼的往往不是模型调参或数据清洗&#xff0c;而是——“为什么你的代码在我机器上跑不起来&#xff1f;”这种经典的“环境地狱”问题。明明复现的是顶会论文的开源代码&am…

作者头像 李华
网站建设 2026/4/15 9:01:20

Navicat替代工具:打破枷锁,拥抱2026年的极客新宠

在数据库管理的江湖里&#xff0c;Navicat曾是无可争议的霸主。它的界面华丽、操作顺滑&#xff0c;但随着信创产业的崛起和企业降本增效的呼声日益高涨&#xff0c;其昂贵的商业授权费已然成为了许多开发者和中小企业脖子上的沉重枷锁。 站在2025年的岁尾展望2026年&#xff0…

作者头像 李华
网站建设 2026/4/11 0:45:55

Conda server搭建私有源:Miniconda-Python3.9企业级包管理方案

Conda Server 搭建私有源&#xff1a;Miniconda-Python3.9 企业级包管理实战 在现代 AI 工程与数据科学实践中&#xff0c;一个看似不起眼却频繁引发“生产事故”的问题浮出水面——环境不一致。你是否经历过这样的场景&#xff1a;同事的代码在本地运行完美&#xff0c;但一到…

作者头像 李华
网站建设 2026/4/14 17:11:59

求靠谱性价比高的降AI率工具推荐,经实测,这款谁用谁夸!

写论文的宝子们谁懂啊&#xff01;初稿用AI辅助了下...结果维普AIGC检测率直接飙到97%&#xff0c;查重率也高达35%&#xff0c;导师一眼就看出问题&#xff0c;让我重改就算了&#xff0c;还警告说再这样可能影响答辩。为了降AI率和查重率&#xff0c;我前前后后试了四五款工具…

作者头像 李华