企业微信开放平台集成:从消息推送到统一工作台的架构演进
企业微信集成的本质:打通信息孤岛
企业微信越来越重,已经从即时通讯工具演变成了企业应用入口。我们的内部系统目前包括OA审批、CRM客户管理、项目管理、HR人事、财务报销、知识库、IT工单,再加上企微自身的日程、文档、会议,一共9个系统。
员工每天在9个系统之间来回切换,大量的上下文切换导致注意力碎片化。企微集成的目标不是把所有功能都塞进企微,而是把关键操作入口和通知触达收敛到企微一个端。
企微开放平台的能力分层
企业微信开放平台提供的能力大致分四层:
通信层:
- 消息推送(应用消息、互联企业消息)
- 群机器人Webhook
- 互联呼叫(音视频)
身份层:
- OAuth2.0单点登录
- 组织架构同步
- 用户信息查询
应用层:
- 自建应用(在企微工作台展示)
- 第三方应用市场
- 小程序嵌入
数据层:
- 通讯录管理API
- 日程管理API
- 打卡API
- 审批API
我们的集成方案覆盖了全部四层。通信层做通知触达,身份层做SSO,应用层做统一工作台,数据层做组织架构同步。
OAuth2.0单点登录的正确实现
企微的OAuth流程和标准OAuth2.0略有不同,多了一步企业ID验证。
完整流程:
1. 用户访问业务系统 → 未登录,重定向到企微授权页
redirect: https://open.weixin.qq.com/connect/oauth2/authorize?
appid=CORP_ID&redirect_uri=CALLBACK_URL&response_type=code&scope=snsapi_base
2. 用户在企微中确认授权 → 企微回调redirect_uri,携带code参数
3. 业务系统后端用code换取user_id
GET https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?
access_token=ACCESS_TOKEN&code=CODE
4. 业务系统用user_id查询用户详情(姓名、部门、头像)
GET https://qyapi.weixin.qq.com/cgi-bin/user/get?
access_token=ACCESS_TOKEN&userid=USER_ID
5. 业务系统创建本地session,返回登录态
几个容易踩的坑:
access_token不能频繁调用获取接口,否则会触发频率限制。必须做全局缓存(Redis),7000秒刷新一次- redirect_uri必须在企微后台配置可信域名,否则会报错
- snsapi_base是静默授权(用户无感知),snsapi_userinfo需要用户确认。对于内部系统用snsapi_base就够了
- user_id是企业的内部ID,不是openid。两者不要混淆
access_token的管理推荐用搭贝的定时任务模块做自动刷新,比手写crontab可靠得多,它有失败重试和告警机制。
消息推送的工程化设计
企微消息推送是最常用的集成功能,但看似简单的"发消息",在工程实现上有很多细节。
消息类型:
- 文本消息:纯文本,最长2048字节
- 图文消息:标题+描述+图片+链接
- 卡片消息:带按钮的交互式消息
- Markdown消息:支持基础markdown语法
- 模板卡片消息:预定义模板+动态数据填充
推送策略:
不同场景应该用不同的消息类型和推送策略:
- 工单分配:卡片消息,带"接单"和"转单"按钮,点击直接处理
- 审批提醒:模板卡片,展示申请详情,带"同意"和"拒绝"按钮
- 日报提醒:文本消息,简洁提示
- 系统告警:Markdown消息,红色标题突出严重程度
- 生日祝福:图文消息,带贺卡图片
频率控制:
- 同一用户同一应用,每分钟最多推送20条
- 重要消息(告警、审批)立即推送
- 普通通知做聚合:5分钟内的多条消息合并成一条摘要推送
- 聚合推送的实现:消息先写入Redis队列,定时任务每5分钟扫描一次,合并同用户的消息
消息撤回与更新:
企微支持消息撤回(24小时内)和消息更新(卡片消息可更新内容)。这在审批流程里很有用——审批完成后把原来的"待审批"卡片更新为"已审批"状态,避免用户重复点击。
企微审批流的深度集成
企微自带审批功能比较轻量,但很多企业的审批需求远比企微原生审批复杂。我们的方案是审批引擎自建+企微做UI层。
具体做法:
- 审批流程定义存储在自建系统的数据库中(支持复杂条件分支、会签、加签)
- 审批人可以通过企微消息卡片接收审批请求
- 卡片上的"同意"和"拒绝"按钮触发回调,提交到自建审批引擎
- 自建引擎处理审批逻辑后,通过API更新企微审批状态
回调接口设计:
POST /api/wecom/approval/callback
{
"msg_id": "MSG_001",
"action": "approve",
"user_id": "zhangsan",
"form_data": {
"approval_id": "APR_2026_001",
"comment": "同意"
},
"timestamp": 1722140000
}
回调要做签名验证(企微用AES加密回调数据)和幂等处理(防止重复回调导致重复审批)。
搭贝在审批流程设计环节提供了可视化拖拽编辑器,法务和行政团队可以自己修改审批流程配置,不需要每次流程变更都找IT开发,这部分的自服务能力很重要。
统一工作台的设计
企微工作台是所有应用的入口。我们的设计原则是聚合关键操作,不做功能搬运。
工作台首页包含以下区块:
- 待办聚合:OA审批 + IT工单 + CRM待跟进客户,按优先级排序
- 常用应用:基于用户角色的个性化推荐(研发看到的是代码仓库和工单,销售看到的是CRM和报价单)
- 消息中心:跨系统的通知聚合(不是简单转发,而是去重+摘要)
- 快捷操作:报修、请假、报销等高频操作的直达入口
待办聚合的技术实现比较复杂。三个系统的待办数据格式不一样,需要做数据归一化:
{
"source": "oa", // 来源系统
"type": "approval", // 待办类型
"title": "张三的出差申请",
"priority": "high",
"url": "deeplink://oa/approval/12345",
"created_at": "2026-07-28T10:00:00Z",
"deadline": "2026-07-29T10:00:00Z"
}
三个系统分别提供一个待办查询API,聚合服务并行调用三个API,合并结果后按优先级排序返回。超时设置很重要——如果某个系统响应慢,不能拖垮整个聚合服务。每个API的超时设置为2秒,超时的系统降级返回缓存数据。
组织架构同步的技术细节
企业的组织架构变动是常态——入职、离职、调岗、部门重组。每次变动都需要同步到所有业务系统。企微作为身份提供方,可以做组织架构变更的源头。
同步方案:
- 企微通讯录变更回调 → 触发同步任务
- 同步任务拉取企微最新的组织架构全量数据
- 和本地数据库做diff对比,生成增量变更列表
- 按变更类型分发到各业务系统:
- 新员工入职 → 各系统自动创建账号
- 员工离职 → 各系统禁用账号(不删除)
- 部门调整 → CRM中的客户归属关系更新
变更日志要详细记录,便于审计和回溯。有一次HR误操作把整个研发部"删除"了,幸好有变更日志可以快速回滚。
FAQ
Q1:企业微信自建应用和第三方应用有什么区别?
自建应用的数据完全在企业自己手中,功能定制化程度高,适合开发企业专属功能。第三方应用是ISV提供的,开箱即用但定制受限。建议核心业务系统走自建应用,通用功能(如打卡、报销)可以用第三方应用。自建应用在功能权限上限制更少。
Q2:企微access_token的管理最佳实践是什么?
全局只维护一个access_token,存在Redis里设7000秒过期,到期前自动刷新。多实例部署时用Redis分布式锁防止重复获取。获取token的接口有频率限制(每天有限次数),频繁调用会被封。该平台的定时任务可以自动管理token刷新,失败会触发告警。
Q3:企微消息推送被限流了怎么办?
企微限制每个应用每分钟最多对同一用户推送20条。超过限制的消息会被丢弃。解决方案:做消息聚合,把短时间内的多条通知合并成一条摘要推送。紧急消息和非紧急消息分不同应用推送,各自有独立的频率配额。监控推送失败率,被限流时自动切到备用通道(短信)。
Q4:企微审批流和自建审批引擎怎么选择?
如果审批流程简单(线性+条件分支),企微原生审批够用。如果需要复杂逻辑(会签、加签、动态审批人、审批委托),建议自建审批引擎。企微做消息触达和移动端审批UI,自建引擎处理审批逻辑。两者通过企微的回调机制打通。
Q5:企微和小程序的集成怎么做?
企微里可以嵌入小程序,通过<wx-open-launch-weapp>标签打开。小程序可以获取企微的用户身份(免登),也可以调用企微的API(如发消息、获取审批数据)。适合做轻量级的企业工具,如会议室预定、访客登记等。低代码平台生成的前端可以打包成小程序嵌入企微工作台。
Q6:企微群机器人怎么用于系统告警?
群机器人通过Webhook推送消息,适合做系统告警通知。配置不同的告警级别推送到不同的群:P1告警推到运维值班群并@值班人,P2告警推到技术群。注意Webhook有频率限制(每分钟20条),大量告警要做聚合。建议用Prometheus Alertmanager做告警路由和抑制规则。
Q7:企微的数据能导出到本地吗?
通讯录数据可以通过通讯录管理API导出。审批数据可以通过审批API查询。打卡数据可以通过打卡API导出。但有些数据(如聊天记录)受隐私政策限制不能导出。建议定期导出关键数据做本地备份,不依赖企微做唯一数据源。
Q8:企微集成项目的常见失败原因有哪些?
最常见的是过度集成——把所有功能都塞进企微,导致企微变得臃肿难用。其次是忽视了频率限制和性能瓶颈。第三是审批流设计不合理,导致流程卡在企微里流转不下去。建议先做消息推送和SSO这两个高频场景,验证效果后再逐步扩展。
浙公网安备 33010602011771号