企业微信渠道(WeCom)规划:配置模型、目标管理与发送流程

2026年1月26日
2 分钟阅读
作者:ixNieStudio

企业微信渠道(WeCom)规划:配置模型、目标管理与发送流程

我把企业微信渠道当作“新架构的第一块试金石”。

原因很现实:它和公众号同属 Token 管理型渠道,但用户体系、消息类型、鉴权字段都不一样。

  • 微信公众号:appId/appSecret + OpenID
  • 企业微信:corpId/corpSecret/agentId + userId/departmentId

如果新架构能把这些差异隔离住,那以后接钉钉/飞书/自定义 webhook 才会轻松。

目标:先做“可用的 MVP”,再补齐复杂能力

这份规划明确走 MVP:

  • 先支持 文本消息text
  • 再支持 文本卡片textcard
  • 目标管理先走“简化版”:
    • 直接在 App 里配置 userIds / departmentIds
    • 不做企业微信通讯录同步

配置模型:Channel 放凭证,App 放目标

Channel 配置(企业微信)

企业微信渠道配置需要三项:

  • corpId
  • corpSecret
  • agentId
flowchart LR CH["Channel
enterprise-wechat"] --> CFG[config] CFG --> A[corpId] CFG --> B[corpSecret] CFG --> C[agentId]

App 配置(企业微信简化版)

App 配置偏“业务面”,主要是:

  • pushMode: unicast / broadcast
  • messageType: text / textcard
  • targetUsers?: string[]
  • targetDepartments?: string[]

这里的一个设计取舍:

  • 我不强求 pushMode 和 target 的组合完全互斥
  • 而是允许“混用”,最终在发送时组合成 touser/toparty

这样 UX 会更接近“你填了什么,我就按你填的发”。

发送流程:复用 TokenSendTemplate,只替换三处差异

企业微信属于 Token 管理型,所以它应该严格走同一个模板流程:

  1. 参数校验
  2. 获取 token
  3. 构建消息
  4. 发送
  5. 解析返回

它的“渠道差异”只应该体现在:

  • token endpoint
  • send endpoint + payload
  • 错误码映射
sequenceDiagram autonumber participant C as Caller participant S as /send/appKey participant P as push.service participant EW as enterprise-wechat.service participant QY as WeCom API C->>S: GET/POST /send/appKey S->>P: push(appKey, message) P->>EW: getAccessToken(corpId, corpSecret) EW->>QY: GET /cgi-bin/gettoken QY-->>EW: {access_token, expires_in} P->>EW: sendMessage(agentId, touser/toparty, text/textcard) EW->>QY: POST /cgi-bin/message/send QY-->>EW: {errcode, errmsg, msgid, invaliduser, invalidparty} EW-->>P: SendResult P-->>S: PushResult

API:只需要两类对接点

  • 获取 token
    • https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={CORPID}&corpsecret={CORPSECRET}
  • 发送消息
    • https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={ACCESS_TOKEN}

(MVP 阶段不做通讯录拉取、部门成员枚举等能力。)

失败语义:把“部分失败”当成一等公民

企业微信的一个坑是:即使 errcode=0,也可能存在:

  • invaliduser
  • invalidparty

这类结果如果不向上透传,就会出现一种很难排障的状态:

系统显示“成功”,但某些人永远收不到。

所以我计划在 PushResult 里显式保留 per-target 结果,至少能:

  • 在消息历史里看到哪些 userId/deptId 失败
  • 给管理员一个明确的“是配置错还是平台拒绝”

渠道验证:保存配置前做一次“最小验证”

企业微信渠道配置保存时,应当至少验证:

  • corpId/corpSecret 是否能换到 token
  • agentId 是否是数字(或可被安全转换)

这可以挡住 80% 的“保存成功但永远发不出去”。

启发:企业微信的“目标模型”比公众号更像真实业务

公众号推送的目标往往就是 OpenID 列表(单一维度)。

企业微信的目标是:

  • 人(userId)
  • 组织(departmentId)

这迫使我在系统里更认真地区分:

  • “渠道能力”(token + API)
  • “应用目标”(谁该收到)

也正好检验了桥接设计到底有没有起效。