当前位置: 首页 > news >正文

企微API集成指南——从回调到主动发送,全流程代码解析

企业微信提供了丰富的API,用于接收用户添加事件、发送消息、管理标签等。今天从实战角度,给出API集成的最佳实践,附带伪代码。

一、核心API清单

API

用途

频率限制

获取access_token

调用其他API的前提

2000次/分钟

添加外部联系人

通过好友

每个号300人/天

发送文本消息

发欢迎语

每个号600条/分钟

添加标签

打标签

每个号100次/分钟

获取客户详情

查询用户信息

每个号60次/分钟

二、回调配置:接收用户添加事件

企微支持配置回调URL,当用户添加企微时,企微会POST消息到你的服务器。

回调处理逻辑:

python

# Flask示例 @app.route('/wecom/callback', methods=['POST']) def handle_add_contact(): data = request.json if data['Event'] == 'add_external_contact': user_id = data['ExternalUserID'] wecom_id = data['ToUserName'] # 哪个企微号收到添加 # 异步处理,避免超时 thread = Thread(target=async_process, args=(user_id, wecom_id)) thread.start() return "success"

异步处理函数:

python

def async_process(user_id, wecom_id): # 1. 打标签(根据来源渠道,来源信息从活码系统获取) source = get_source_by_user(user_id) # 从Redis查 add_label(user_id, source) # 2. 发送欢迎语 welcome_msg = get_welcome_template(source) send_message(user_id, welcome_msg) # 3. 记录统计 incr_stats(source, 'add')

三、主动发送消息

python

def send_message(user_id, content): token = get_access_token(wecom_id) url = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/send?access_token={token}" payload = { "touser": user_id, "msgtype": "text", "text": {"content": content} } response = requests.post(url, json=payload) # 处理限频:如果返回45009,等待1秒后重试 if response.json()['errcode'] == 45009: time.sleep(1) return send_message(user_id, content) return response.json()

四、access_token管理

access_token有效期2小时,需缓存并定时刷新。

python

class TokenManager: def __init__(self, corp_id, secret): self.corp_id = corp_id self.secret = secret self.token = None self.expire_at = 0 def get_token(self): if time.time() > self.expire_at: self.refresh() return self.token def refresh(self): url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={self.corp_id}&corpsecret={self.secret}" resp = requests.get(url).json() self.token = resp['access_token'] self.expire_at = time.time() + 7000 # 提前200秒刷新

五、错误处理与重试机制

企微API会返回各种错误码,需要分类处理:

错误码

含义

处理策略

40014

token无效

强制刷新token后重试

45009

调用频率超限

等待1秒后重试,最多3次

45035

用户不是外部联系人

忽略

48002

API权限不足

检查应用权限配置

重试装饰器示例:

python

def retry_on_limit(max_retries=3): def decorator(func): def wrapper(*args, **kwargs): for i in range(max_retries): result = func(*args, **kwargs) if result.get('errcode') == 45009: time.sleep(1 * (i+1)) continue return result return None return wrapper return decorator

六、企销宝的API封装

企销宝将这些API封装成统一的RESTful接口,开发者无需处理token、限频、重试等细节。调用示例:

text

POST https://api.qixiaobao.com/v1/send { "user_id": "xxx", "content": "欢迎语", "channel": "douyin" }

返回结果包含成功/失败状态,以及耗时统计。

总结3个要点:

  • 核心API:添加事件回调、发送消息、打标签。

  • 技术要点:token缓存、异步处理、重试机制、错误分类。

  • 第三方封装可大幅降低开发成本。
    行动建议: 先用企微官方文档跑通回调流程,再逐步接入自动化逻辑。
    觉得代码干货?收藏+转发给你的后端开发。

http://www.jsqmd.com/news/568765/

相关文章:

  • 告别设计困境:Mi-Create让智能表盘创作零门槛且自由扩展
  • 新手福音,用快马AI生成2048论坛登录页,轻松理解Web开发基础
  • GLM-4v-9b图文对话:支持截图+文字混合输入的协同推理
  • XCOM 2模组管理终极解决方案:告别混乱,释放游戏潜能
  • 【数据结构】树的定义、核心术语与关键性质全解析
  • 【ubuntu26.04】:ubuntu——中文输入法的安装
  • 为什么draw.io桌面版成为离线绘图的首选方案
  • MongoDB:如何构建“数据回收站“,防止人为误删数据(延迟节点)
  • Stable Yogi Leather-Dress-Collection惊艳效果:复杂背景中皮衣主体高保真分离
  • 从居里兄弟到5G手机:聊聊压电材料如何决定你手机信号的强弱
  • 将敏感信息直接存储在 Cookie 中有什么风险?应该怎么做?
  • 老旧Mac重生计划:用OpenCore Legacy Patcher解锁 macOS 新体验
  • ZGC停顿时间为何突然飙升?3个被90%团队忽略的配置雷区曝光
  • 比迪丽LoRA GPU算力成本分析:按小时计费云GPU vs 本地A10服务器ROI对比
  • 从纯跟踪到iLQR:自动驾驶轨迹跟踪算法实战对比与选型指南
  • 知乎上线求职工具,助力毕业生破困局
  • Bowler RPC:面向Arduino嵌入式设备的轻量级实时RPC协议
  • FireRedASR Pro与STM32嵌入式开发结合:离线语音控制终端
  • 跨域请求时,如何让浏览器自动携带 Cookie?需要满足哪些条件?
  • 【架构演进】高并发实验室环境下的数据吞吐优化:LabsCare 异步非阻塞 I/O 与分布式存储选型
  • Ray Optics:面向未来的光学仿真平台——从零开始的光学建模实践
  • 4G物联网设备内网穿透方案实战
  • 无需本地安装,用快马平台5分钟搭建git操作可视化原型
  • 我用一个 UITableView,干掉了 80% 复杂页面
  • Teleinfo缓冲区无感解析:嵌入式低内存高效通信方案
  • Axelspace 太空公司牵头联合体入选日本太空战略基金项目 “提升下一代地球观测卫星能力技术”
  • Super IO:提升Blender批量处理效率的自动化流程解决方案
  • STM32位带操作原理与高效应用
  • MongoDB:如何通过 priorities 影响主节点选举结果(投票权重调整)
  • 如何使用Dramatron实现AI辅助剧本创作:从构思到完稿的全流程指南