跳到主要内容

回调消息分发

概述

当企业对接腾讯电子签时,平台仅支持配置 一个回调地址。但在实际业务中,多个系统(CRM、ERP、OA、审计等)往往都需要接收回调消息。

回调分发服务(TSign Callback Dispatcher)解决了这个问题——它作为统一的回调接收入口,将腾讯电子签的回调消息按规则分发到多个下游业务系统。

                              ┌─→ CRM 系统(仅合同状态变更)

腾讯电子签 ──回调──→ 分发服务 ──┼─→ OA 系统(仅印章审批事件)

└─→ 审计系统(全量回调 + 加密传输)

适用场景

  • 多个业务系统需要接收同一个腾讯电子签应用的回调消息
  • 不同系统只关心特定类型的回调事件,需要按类型过滤
  • 需要根据合同中的自定义数据(如 UserDataFlowType)将回调路由到不同系统
  • 下游系统要求加密传输,需要对回调消息进行二次加密转发

核心功能

一对多分发

将腾讯电子签的一个回调地址拆分为多个下游目标,每个目标独立配置、独立启停。

事件类型过滤

支持按消息类型精确过滤,可按需选择合同、印章、模板、企业员工等类别:

分类事件示例
合同合同状态变更、合同费用、合同转发、合同审批等
印章印章操作、员工印章授权、用印记录
模板模板新增、更新、删除、生效
企业员工员工认证、角色变更、入职离职

不选择任何事件类型时,默认接收全部类型的回调消息。

标签匹配

标签系统允许根据回调消息体中的字段值进行更细粒度的过滤。

内置标签:

标签消息字段用途
UserDataMsgData.UserData按合同的自定义数据分发(常用于携带业务单号)。注意: 电子签平台要求 UserData 为 Base64 编码格式,匹配时比对的是 Base64 编码后的字符串
FlowTypeMsgData.FlowType按合同类型分发

自定义标签: 支持创建自定义标签并配置匹配规则,可基于消息中的任意字段路径进行匹配。匹配方式支持精确匹配、包含、正则表达式、枚举和字段存在性判断。

示例: 在 CRM 系统的回调配置中设置标签 UserData = Y3JtX29yZGVy(即 crm_order 的 Base64 编码),则只有发起合同时传入 UserDataY3JtX29yZGVy 的回调才会分发到 CRM 系统。

二次加密转发

系统解密腾讯电子签的回调消息后,可为每个下游目标独立配置加密密钥,使用 AES-256-CBC 重新加密后转发。下游系统使用各自的密钥解密即可,实现端到端的安全传输。

自动重试

转发失败时自动重试(可配置次数和超时时间),提高投递可靠性。

配置版本管理

所有配置变更自动保存版本历史,支持一键回滚到任意历史版本。


快速开始

前置条件

步骤一:部署服务

Docker Compose 方式(推荐):

# 克隆项目并进入目录
git clone https://github.com/tencentess/tsign-callback-dispatcher.git && cd tsign-callback-dispatcher

# 配置安全凭据
cat > docker/.env << 'EOF'
JWT_SECRET=your-strong-random-jwt-secret-at-least-32-chars
ADMIN_DEFAULT_PASSWORD=your-strong-admin-password
EOF

# 启动服务
cd docker && docker compose up -d --build

也支持 Kubernetes 部署,详见项目 k8s/ 目录的部署清单。

步骤二:配置腾讯电子签

登录 腾讯电子签开放平台,在应用的回调配置中:

  1. 回调地址 设为:https://your-domain/api/callback
  2. 记录应用的 消息加密密钥(encryptKey)和 签名验证令牌(token)

步骤三:登录管理面板

访问 https://your-domain,使用部署时设置的管理员账号密码登录。

登录页面

步骤四:配置电子签密钥

进入 系统设置 页面,填入腾讯电子签应用的消息加密密钥和签名验证令牌,点击保存。

⚠️ 密钥必须与腾讯电子签开放平台的配置一致,否则回调消息将解密失败。

步骤五:添加下游回调配置

进入 回调配置管理 页面,点击「新建回调」,填写下游系统信息:

回调配置管理

配置项说明:

配置项必填说明
配置名称便于识别的名称,如"CRM 系统-合同回调"
目标 URL下游系统的回调接收地址
应用类型自建应用 / 第三方应用(决定可选的事件类型)
事件类型勾选需要接收的事件类型,不选则接收全部
标签筛选按消息字段值过滤,如 UserData = crm_order
重试次数转发失败时的重试次数,默认 3 次
超时时间等待下游响应的超时时间,默认 10 秒
二次加密开启后可自动生成或手动填入加密密钥
自定义请求头为下游请求添加额外 HTTP Header

回调配置表单

配置保存后 立即生效,下一条回调消息即按新规则分发。

步骤六:验证

在腾讯电子签后台触发一次测试回调,或等待真实业务产生回调,然后在 分发记录 页面查看分发结果。

分发记录


功能说明

回调配置管理

管理所有下游分发目标。每个配置可独立设置事件类型过滤、标签筛选、重试策略和加密方式,支持随时启用/禁用。

标签管理

管理标签定义和匹配规则。系统内置 UserDataFlowType 两个常用标签,也支持创建自定义标签,指定任意消息字段路径和匹配方式。

标签管理

匹配方式:

方式说明示例
精确匹配字段值完全等于指定值MsgType = FlowStatusChange
包含字段值包含指定子串MsgData.FlowName 包含 采购
正则表达式字段值匹配正则模式MsgData.UserData 匹配 ^order_\d+$
枚举字段值在指定列表中MsgType[FlowStatusChange, FlowCost]
存在判断字段存在且非空MsgData.FlowGroupMessage 存在

分发记录

实时查看每条回调消息的分发结果,包括:

  • 概览统计 — 总分发次数、成功数、失败数、成功率
  • 详细记录 — 每条消息分发到各下游目标的状态、HTTP 响应码、耗时、重试次数
  • 失败汇总 — 近期失败记录集中展示,便于快速排查
  • 未分发详情 — 当消息未匹配到任何下游目标时,展示未分发的原因和消息详情,便于排查配置问题

未分发详情

系统设置

  • 电子签密钥配置 — 配置和更新腾讯电子签的加密密钥与签名令牌
  • 操作日志 — 所有配置变更的审计记录
  • 版本管理 — 配置历史版本查看和一键回滚

工作流程

┌──────────────┐   加密回调     ┌─────────────────────────────┐
│ 腾讯电子签 │ ────────────→ │ 分发服务 │
└──────────────┘ │ │
│ 1. 验证签名(如已配置) │
│ 2. 解密消息 │
│ 3. 立即返回成功响应 │
│ 4. 异步匹配规则并分发 │
└──────────┬──────────────────┘

┌───────────────┼───────────────┐
↓ ↓ ↓
┌─────────┐ ┌─────────┐ ┌─────────┐
│ 目标 A │ │ 目标 B │ │ 目标 C │
│ 明文转发 │ │ 标签过滤 │ │ 加密转发 │
└─────────┘ └─────────┘ └─────────┘

匹配逻辑: 对于每个已启用的下游目标,系统依次检查——

  1. 事件类型 — 消息的 MsgType 是否在目标配置的事件列表中
  2. 内置标签 — 消息对应字段的值是否与配置的标签值匹配
  3. 自定义标签 — 通过匹配规则动态计算的标签是否满足

全部条件通过后,消息才会被转发到该目标。


部署方式

方式适用场景说明
Docker Compose大多数场景一键部署,开箱即用
Kubernetes生产环境多副本、自动扩缩容、RBAC、TLS
本地开发二次开发前后端分离启动,支持热重载

详细部署步骤请参考项目 README 文档。


常见问题

下游系统没有收到回调?

  1. 确认回调配置处于 启用 状态
  2. 确认 目标 URL 可访问
  3. 检查 事件类型 是否包含目标消息类型
  4. 检查 标签筛选 条件是否过严
  5. 在「分发记录」页面查看具体的失败原因

修改配置后多久生效?

立即生效。 保存配置后,下一条收到的回调消息即按新规则分发。

二次加密如何使用?

  1. 在回调配置中开启「二次加密」
  2. 点击「自动生成密钥」或手动填入密钥
  3. 将密钥安全提供给下游系统用于解密
  4. 转发的消息体将使用 AES-256-CBC 加密,附带签名参数