Skip to content

微信公众号

公众号管理是一个一级菜单目录,将微信公众平台的开发者能力(账号、粉丝、消息、菜单、素材、群发、模板消息、网页授权、客服、数据等)整合进后台,支持多公众号统一管理。所有路由挂载在 /api/mp 前缀下,业务表集中在 packages/server/src/db/schema/mp.tsmp_* 系列表,前端页面集中在「公众号管理」目录(packages/web/src/pages/mp/)。

与微信的所有交互统一通过 packages/server/src/lib/wechat/ 封装,外呼走 http-clientaccess_token / jsapi_ticket 经 Redis 缓存。示例种子账号未配置真实 AppSecret,调用真实接口时会返回 40013 invalid appid,并被统一映射为 400 业务错误(便于在未接入真实公众号时演示页面)。


能力地图

分组能力文档
账号多公众号账号、凭证与加密模式、回调配置、连接测试、内容安全开关、关注自动建会员账号管理
粉丝粉丝同步、标签管理、黑名单、会员体系打通(绑定 / 扫码送积分 / VIP 优先接入)粉丝、标签与会员
消息消息记录、客服消息(富媒体)、自动回复(关注 / 关键词 / 默认,富媒体 + 正则 + 转人工 + 未命中热词)消息与自动回复
客服多客服账号、实时会话状态机(接入 / 转接 / 超时自动路由 / 会话分配)、满意度、会话报表多客服会话治理
菜单自定义菜单(按钮类型扩展)、个性化菜单(按规则下发 + 匹配测试)菜单管理
素材永久素材(图片 / 语音 / 视频 / 缩略图,真实二进制上传)、图文草稿素材与图文草稿
运营群发(预览 / 定时 / 发送结果)、模板消息(行业 / 同步 / 批量 / 回执)、带参二维码(扫码送积分)群发、模板消息与二维码
网页网页授权 OAuth2(含公开回调)、JS-SDK wx.config 签名网页授权与 JS-SDK
数据基础统计、数据立方(用户 / 消息 / 图文 / 分享 / 接口分析)、内容安全校验数据统计与内容安全

架构约定

  • 微信能力封装packages/server/src/lib/wechat/ 按能力拆分(access-tokenapimenumaterialdrafttemplatebroadcastqrcodereplyoauthdatacubekfsecurityjssdkuserstagsmessagescryptoxmlsignature 等),统一通过 index.ts 桶导出。
  • 错误映射:微信业务错误(errcode 非 0)抛 WechatApiError,由 lib/wechat-error.tsmapWechatError 统一映射——WechatApiError → 400、其余 → 502
  • 租户隔离:所有 mp_* 表带 tenant_id,鉴权路由统一用 tenantScope() 过滤;公开回调无登录上下文,按 accountId 直接查询并携带账号 tenantId 落库。
  • 统一响应{ code: 0, message, data };DTO 集中在 lib/dtos/mp.ts,路由用 defineOpenAPIRoute + 显式 middleware: [authMiddleware, guard(...)]
  • 凭证缓存access_token(key mp:access_token:{id})与 jsapi_ticket(key mp:jsapi_ticket:{id})缓存于 Redis,留 300s 安全余量。

数据表总览

说明
mp_accounts公众号账号(AppID / AppSecret / Token / EncodingAESKey / 加密模式 / 类型 / 内容安全开关 / 关注建会员开关 / 默认标记)
mp_tags用户标签(本地标签 ↔ 微信 tagid 映射)
mp_fans粉丝(openid / 资料 / 标签 / unionid / member_id / blacklisted
mp_messages消息收发记录(in / out,含去重 msg_id
mp_auto_replies自动回复(关注 / 关键词 / 默认;富媒体 + match_type exact/contain/regex + transfer_to_kf
mp_unmatched_keywords自动回复未命中热词(按 account + keyword 累计)
mp_menus默认自定义菜单(草稿 / 已发布)
mp_conditional_menus个性化菜单(按 match_rule 下发,含微信 menuid
mp_materials永久素材
mp_drafts图文草稿
mp_message_templates / mp_template_send_logs模板消息库 / 发送日志(含送达回执状态)
mp_broadcasts群发任务(含 scheduled_at 定时)
mp_qrcodes带参二维码(含 reward_points 扫码奖励)
mp_kf_accounts多客服账号
mp_kf_sessions / mp_kf_session_events / mp_kf_routing_configs多客服会话状态机 / 事件流水 / 路由治理配置

回调接入

公众号消息回调为公开端点(无需登录,由微信服务器调用),实现于 routes/mp/mp-callback.ts

方法路由说明
GET/api/public/mp/callback/{accountId}服务器配置校验(校验 signature 通过后原样返回 echostr
POST/api/public/mp/callback/{accountId}接收消息 / 事件(明文或安全模式 AES 解密)并落库

回调按顺序处理:入站落库去重 → 带参二维码扫码计数 + 扫码送积分 → 关注自动建会员 → 多客服会话接入 → 模板消息送达回执 → 自动回复。落库失败返回非 200 触发微信重试;解析失败 / 重复消息返回 200 不重试。

详见各能力页与 WebSocket 事件清单mp-kf:session-* 实时事件)。


菜单与权限

公众号管理菜单位于种子数据 seed-data.ts1000 段(目录 公众号管理name: MpCenter),权限码统一以 mp: 开头,超级管理员默认绑定全部。各页面与权限码对应关系见对应能力页的「菜单与权限」小节。


相关文档

Built with VitePress for local documentation preview.