IM Webhook Bridge 使用文档(当前系统版)
多租户 IM 消息桥接系统 — 配置与操作指南。本页与 v2.1.x 实现对齐:RBAC v2、通知中心、运营策略与队列、在线客服(WebSocket + /agent/ 工作台)、租户侧 AI 与知识库、管理端「系统排障助手」(与客服 AI 隔离)、会话质检与 KPI 报表、企微语音 ASR 等。环境变量 AI_ENABLED=false 时仍会执行 initAI(app) 注册 AI 管理路由;该变量在 app.js 中目前仅区分启动日志文案,未在 ai-intercept 等路径做统一短路——实际是否自动回复以 ai_switches 及租户配置为准。反向代理后建议配合 TRUST_PROXY=1。顶部导航中 Agent Beta 对应超级管理员「AI 中心」早期测试入口;客服工作台 打开 /agent/。
1. 系统概述
IM Webhook Bridge 是一个多租户的 IM 消息桥接系统,支持企业微信和飞书两大平台。系统提供以下核心能力:
- H5 操作面板: 在企业 IM 内嵌的 H5 页面中展示自定义菜单(按钮/表单),用户操作后自动向指定 Webhook URL 发送请求
- 消息推送 API: 外部系统(如影刀 RPA)通过 HTTP API 向 IM 用户推送消息
- 消息回调转发: 接收 IM 平台的消息事件并转发到指定 Webhook
- Web / APP 在线客服: WebSocket 实时会话、可选租户用户登录、AI 自动回复与转人工、客服工作台
/agent/ - 管理端「系统排障助手」: 面向内部运维/管理员的独立 AI 对话(与租户客服 AI 数据与代码路径隔离),结合本地知识索引、代码片段命中与高分历史样本,输出可执行排障建议;支持导出报告与准确率反馈自学习
- 运营与可观测: 运营策略、通知中心(邮件/短信队列)、KPI 看板、会话质检(规则 + LLM、报表与低分告警)等
系统支持两种应用模式:
- 自建应用模式: 客户在自己的企微/飞书后台创建应用,提供 CorpID、AgentId、Secret 等凭证
- 代开发/ISV 模式: 服务商创建应用模板,客户通过扫码授权即可使用,无需客户自行创建应用
2. 部署与启动
环境要求
- Node.js >= 14
- 公网可访问的域名和 HTTPS 证书(IM 平台回调需要 HTTPS)
安装与启动
cd im-bridge
npm install
node server.js
服务默认监听 3001 端口。建议使用 Nginx 反向代理配置 HTTPS。
持久化配置目录(避免升级覆盖)
租户、套件、管理员密码等主配置由 lib/config-store.js 读写;企微/飞书 suite_ticket 由 lib/suite-store.js 持久化。当前默认路径为应用目录的上一级下的独立目录(与代码分离,同步代码时不会覆盖):
- Linux 生产常见路径:
/app/im-bridge-data/config.json、/app/im-bridge-data/.suite-tickets.json - 本地开发(与仓库并列):
…/im-bridge-data/config.json等 - 可通过环境变量
IM_BRIDGE_DATA_DIR指定绝对路径,覆盖默认目录 - 若新目录尚无文件,启动时会自动从旧路径(应用根目录下的
config.json/.suite-tickets.json)复制一份,便于迁移 - 保存配置前会在数据目录下
config-backups/保留最近若干份快照,便于回滚
推荐使用项目内 scripts/safe-deploy.sh 做发布:默认先备份上述关键文件,再用 rsync 同步代码并排除 node_modules、data/ 等,降低误覆盖风险。
Nginx 配置示例
参考项目中的 aiops-nginx.conf 文件进行配置,确保:
- 启用 HTTPS(443 端口)
- 反向代理到
localhost:3001 - WebSocket 支持(如需要)
健康探针(负载均衡 / 容器编排 / 监控)
GET /health/live:仅表示 Node 进程已启动并响应 HTTP,不访问 MongoDB;适合作为负载均衡器或 K8slivenessProbe。GET /health/ready:对 MongoDB 执行ping;若配置了REDIS_URL则再对 RedisPING。任一依赖不可用时返回 HTTP 503,JSON 形如{"ok":false,"reason":"..."};适合readinessProbe与发布编排。
管理后台顶栏「存活」「就绪」打开的是 /admin/health-live.html、/admin/health-ready.html(页内 fetch 调用 JSON 接口),避免在浏览器地址栏直接打开 /health/ready 时因 HTTP 503 被浏览器当成「整页错误」而看不到 JSON 中的 reason。自动化探活仍请直接请求 GET /health/live、GET /health/ready。所有 HTTP 响应(含错误)会带上 X-Request-Id;客户端也可传入合法的 X-Request-Id 或 X-Trace-Id(字母数字与 ._@-,最长 128 字符)以贯通日志与审计。
运维相关环境变量(可选)
JSON_BODY_LIMIT:express.json/urlencoded的 body 上限,默认2mb;大文件上传走multipart路由,不受此项限制。BUSINESS_EVENTS_TTL_DAYS:若设置正整数,为 MongoDB 集合business_events启用按创建时间的 TTL(天);未设置则长期保留。STRUCTURED_ACCESS_LOG=1:访问日志改为单行 JSON,并包含requestId字段。REDIS_URL:若设置,GET /health/ready会在 MongoDB ping 通过后对 Redis 执行PING;失败则整体验证返回 503。METRICS_ENABLED=1:开启GET /metrics(Prometheus 文本格式:uptime、Node 堆/外部内存、HTTP 响应计数按方法与2xx/4xx/5xx;/health/*与/metrics本身不计入,便于对接 Prometheus + Grafana)。TRUST_PROXY=1:部署在 Nginx/负载均衡后时建议开启,以便限流、日志使用X-Forwarded-For中的客户端 IP(与 Expresstrust proxy一致)。RATE_LIMIT_ENABLED=0:关闭公网接口限流(仅建议本地调试)。默认开启;管理端/客服台登录已有独立防刷逻辑。- 限流阈值(每分钟,可按需调大):
RATE_LIMIT_PUSH_PER_IP_SLUG_PER_MIN(默认 120,推送 API)、RATE_LIMIT_CHANNEL_MESSAGE_PER_IP_SLUG_PER_MIN(默认 60,Web 渠道 REST 发消息)、RATE_LIMIT_TENANT_LOGIN_PER_USER_PER_MIN(默认 5,租户用户登录,按 IP+slug+用户名)、RATE_LIMIT_TENANT_PASSWORD_PER_IP_PER_MIN(默认 30,改密)、RATE_LIMIT_OPS_CALLBACK_PER_IP_PER_MIN(默认 120,/api/ops/callback)。超限返回 HTTP 429 与Retry-After。未对企微/飞书/api/callback、/api/suite限流,避免误伤平台回调。 - 语音转文字(企微 AMR):运行时读取
TENCENT_SECRET_ID、TENCENT_SECRET_KEY,可选TENCENT_ASR_REGION(默认ap-shanghai),见lib/tencent-asr.js。仓库根目录.env.example目前以阿里云语音/OSS 示例为主,部署时请按实际选用的 ASR/OSS 提供方与代码路径核对,勿仅凭示例文件名假设已全部覆盖。 - 调度循环间隔(单位毫秒,代码侧最小 1000):
OPS_LOOP_INTERVAL_MS(默认 5000,运营引擎)、KPI_ALERT_LOOP_INTERVAL_MS(默认 60000)、KPI_DAILY_LOOP_INTERVAL_MS(默认 300000)、NOTIFICATION_LOOP_INTERVAL_MS(默认 5000,通知中心 worker)、KB_URL_REFRESH_LOOP_INTERVAL_MS(默认 60000,知识库 URL 刷新)、QC_LOOP_INTERVAL_MS(默认 60000,质检循环)。定义见server.js。
3. 首次登录与密码设置
- 浏览器访问
https://你的域名/admin/ - 首次打开时显示 "首次使用,请设置管理密码" 提示
- 输入管理密码(不少于4位字符),点击 "设置密码并登录"
- 密码使用 bcrypt 加密存储,后续登录需输入相同密码
注意: 密码设置后无法通过界面修改。如需重置,需手动编辑持久化目录中的config.json(默认im-bridge-data/config.json),删除其中的adminPassword字段。
4. 自建应用模式配置
适用场景:客户在自己的企微/飞书后台已有应用,或只需为单个企业配置。
步骤 1: 创建租户
- 登录管理后台,点击左侧侧边栏的 "+" 按钮
- 填写以下信息:
- 租户名称: 客户公司名或项目名
- URL标识 (slug): 可留空自动生成随机标识,也可手动填写(仅限小写字母/数字/连字符)
- 确认"启用"开关打开,点击 "保存"
步骤 2: 添加渠道并配置凭证
- 进入租户详情 → 渠道管理 Tab → 点击 "+ 添加渠道"
- 选择渠道类型(企业微信/飞书),应用模式选 "自建应用"
- 填写平台凭证:
- 企业微信: 企业ID (CorpID)、应用AgentId、应用Secret
- 飞书: App ID、App Secret
- 点击 "保存凭证"
步骤 2: 配置企微后台(企业微信自建应用)
- 登录企微管理后台 > 应用管理 > 找到对应应用
- 在"网页授权及JS-SDK"中设置可信域名为你的系统域名
- 在"企业可信IP"中添加你服务器的公网 IP
- 在应用主页设置 H5 页面地址(可选,后续在页面管理中获取具体链接)
5. 代开发/ISV 模式配置
适用场景:作为服务商,一个应用模板供多个客户企业授权使用。
前置条件
- 已在企业微信服务商后台注册为服务商
- 已创建代开发应用模板(模板ID以
dk开头)并上线发布 - 或已创建第三方应用(套件ID以
ww开头)
步骤 1: 配置全局服务商凭证
重要: 此步骤必须在创建 ISV 租户之前完成!
- 登录管理后台,点击左侧侧边栏的 齿轮图标 (全局配置)
- 在"企业微信 服务商配置"卡片中填写:
- Suite ID: 代开发模板ID(dk开头)或第三方应用套件ID(ww开头)
- Suite Secret: 应用的 Secret(注意:不是 ProviderSecret)
- Suite Token: 自定义字符串,后续需填入服务商后台
- Suite EncodingAESKey: 43位字符,自定义或随机生成
- 服务商 CorpID (代开发必填): 服务商企业的 CorpID
- ProviderSecret (代开发必填): 在服务商后台 > 服务商信息中获取
- 点击 "保存全局配置"
步骤 2: 在服务商后台配置回调 URL
重要: 必须先完成步骤 1 保存配置后,再执行此步骤!
- 登录企业微信服务商后台
- 进入 应用管理 > 找到代开发应用模板
- 在 "数据回调URL" 处填入:
https://你的域名/api/suite/wechat/callback - 填入与步骤 1 相同的 Token 和 EncodingAESKey
- 点击"保存"进行验证
步骤 3: 等待 suite_ticket 推送
- 回调 URL 验证通过后,企微服务器会每 10 分钟 推送一次
suite_ticket - 在全局配置页面中观察状态徽章
- 状态变为绿色 "Ticket 已就绪" 后,即可进行后续操作
注意: 首次配置可能需要等待最多 10 分钟。suite_ticket 已做磁盘持久化,服务重启后会自动恢复。
步骤 4: 创建 ISV 租户
- 点击左侧 "+" 按钮创建新租户
- 进入租户详情 → 渠道管理 Tab → 添加企微渠道
- 应用模式选择 "代开发/ISV"(凭证由授权回调自动填入)
6. 客户授权流程
前置条件: 已完成第 5 节的步骤 1-4,且 Ticket 状态为"已就绪"
步骤 1: 生成授权链接
- 在管理后台中选中 ISV 租户
- 进入 渠道管理 Tab,找到企微渠道卡片(需已选择 ISV 模式)
- 点击渠道卡片中的 "生成授权链接" 按钮
- 点击 "复制" 按钮复制链接
步骤 2: 客户扫码授权
- 将授权链接发送给客户的企业微信管理员
- 客户管理员在 企业微信 中打开此链接(或电脑端扫码)
- 客户确认授权信息后,点击 "同意授权"
- 授权完成后系统自动:接收回调 > 交换永久授权码 > 填充凭证 > 状态变为"已授权"
步骤 3: 验证授权结果
- 刷新管理后台页面
- 查看租户详情:ISV 授权状态显示 "已授权",凭证已自动填充
- 如果授权状态未更新,检查服务器日志中
[suite-callback]相关错误
7. 页面与菜单管理
创建 H5 页面
- 选中目标租户,切换到 "页面管理" 标签页
- 点击 "+ 新建页面"
- 填写页面名称、URL标识 (slug)、图标、是否启用
- 保存后,页面卡片上会显示 H5 链接:
https://域名/t/{租户slug}/h5/{页面slug} - 将此链接配置到企微应用的"工作台主页"或"自定义菜单"中
创建菜单
- 展开目标页面卡片,点击 "+ 新建菜单"
- 填写菜单信息:
- 菜单名称: H5 页面中显示的按钮名称
- 类型: 直接触发(点击即执行)/ 表单提交(需填写表单)
- Webhook URL: 用户操作后系统 POST 请求的目标地址
- 表单字段 (表单模式): text/textarea/number/date/select/checkbox
- 固定参数: JSON 格式,每次请求自动附带
- 自定义请求头: JSON 格式,附加到 HTTP 头
8. 推送消息 API
用于让外部系统(如影刀 RPA)向 IM 用户推送消息。
步骤 1: 生成 API Key
- 选中租户 → 渠道管理 Tab
- 找到目标 IM 渠道卡片(企微/飞书)
- 在卡片底部的 "推送消息 API" 区域,点击 "生成 API Key"
注意: 推送 API Key 是渠道级别的,每个 IM 渠道独立管理自己的 Key。Web/APP 渠道不支持推送 API。
步骤 2: 调用推送 API
完整 API (推荐):
curl -X POST 'https://域名/api/push/{slug}/message' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_API_KEY' \
-d '{
"toUser": "用户ID",
"msgType": "text",
"content": {"text": "你好,这是一条推送消息"}
}'
简易 Webhook (适合不支持自定义 Header 的场景):
curl -X POST 'https://域名/api/push/{slug}/webhook?key=YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"content": "消息内容"}'
简易 Webhook 默认发送给 @all(全员)
消息类型
| msgType | content 字段 | 说明 |
|---|---|---|
text | {"text": "消息内容"} | 纯文本消息 |
markdown | {"markdown": "**粗体**内容"} | Markdown 消息 |
textcard | {"title":"标题","description":"描述","url":"链接","btntxt":"按钮"} | 卡片消息 |
toUser 格式: 单个用户 "userId123",多个用户 ["userId1","userId2"],全员 "@all"
9. 接收消息回调
用于接收企微/飞书中用户发送的消息,并转发到你的服务。回调配置位于 IM 渠道卡片内。
自建应用模式
- 选中租户 → 渠道管理 Tab → 找到目标 IM 渠道卡片(企微/飞书)
- 在卡片底部的 "接收消息回调配置" 区域:
- 复制 回调 URL:
https://域名/api/callback/{slug} - 设置 Token 和 EncodingAESKey(需与企微/飞书后台一致)
- 设置 消息转发 Webhook URL(可选,用于将消息转发到你的服务)
- 复制 回调 URL:
- 点击 "保存回调配置"
- 然后到企微管理后台 > 应用 > "接收消息服务器配置" 中填入相同的 URL、Token 和 AESKey 并验证
重要: 必须先在 IM Bridge 中保存配置,再到企微后台验证。回调配置是渠道级别的,每个 IM 渠道独立管理。
ISV/代开发模式
ISV/代开发模式下,消息通过套件回调接收(suite-callback.js),无需在渠道卡片中配置回调地址。渠道卡片中会显示提示信息:"ISV/代开发模式下,消息通过套件回调接收,无需配置此处的回调地址"。
10. Webhook 请求格式
用户在 H5 页面触发菜单操作时,系统向 Webhook URL 发送 POST 请求:
{
"source": "im-bridge",
"tenant": { "id": "租户ID", "name": "租户名称", "slug": "slug", "platform": "wechat" },
"page": { "id": "页面ID", "name": "页面名称", "slug": "页面slug" },
"user": { "userId": "企微用户ID", "name": "用户姓名", "department": "部门" },
"menu": { "id": "菜单ID", "name": "菜单名称", "type": "direct/form" },
"data": { "固定参数key": "value", "表单字段key": "用户填写的值" },
"timestamp": "2024-01-01T00:00:00.000Z"
}
data 字段包含菜单固定参数和用户表单数据的合并结果。
11. 常见问题排查
- 确认回调 URL 配置正确且可被公网访问(HTTPS)
- 确认 Token 和 EncodingAESKey 两端一致
- 首次配置后需等待最多 10 分钟
- 查看服务器日志中是否有
[suite-callback]相关信息 - 确认 Suite ID 和 Suite Secret 填写正确
- 确认全局配置中 Suite ID、Suite Secret 已正确填写
- 代开发模式(dk开头)需额外填写 服务商 CorpID 和 ProviderSecret
- 确认 Ticket 状态为"已就绪"(首次需等待约10分钟)
- 代开发应用模板需要已上线发布
- 检查服务器日志中
[suite-callback] create_auth相关信息 - 确认回调 URL 可被企微服务器正常访问
- 可使用
POST /api/admin/suite/exchange-auth/:tenantId接口手动交换授权码 - 确认租户创建时选择了正确的平台和 ISV 模式
- 代开发模式下系统使用
gettoken接口获取 access_token(corpid + permanentCode) - 确认应用模板已上线发布,且客户已完成授权
- 确认应用在服务商后台已配置相应的 API 权限
- 如果是新授权的企业,可能需要等待几分钟权限同步
- 确认目标 userId 是企业通讯录中的真实用户ID
- 可先尝试发送给
@all验证消息通道是否正常 - H5 Webhook 回调中的
user.userId字段即为可用的用户 ID - 注意 userId 区分大小写
- 确认应用的"网页授权及JS-SDK"中已添加系统域名为可信域名
- 确认 H5 页面链接格式正确:
https://域名/t/{slug}/h5/{pageSlug} - 自建应用模式检查 CorpID、AgentId、Secret 是否正确
- ISV 模式检查授权状态是否为"已授权"
- 检查应用是否在企微管理后台中处于启用状态
- 确认
X-API-Key头或?key=参数值正确 - 确认租户已启用且 API Key 未被撤销
- 检查请求 Body 格式是否正确(需要
Content-Type: application/json) - 如使用简易 Webhook,API Key 通过 URL 参数
?key=xxx传递
- 确认先在 IM Bridge 中保存了回调配置,再到企微后台验证
- 确认 Token 和 EncodingAESKey 两端完全一致(注意前后空格)
- 确认回调 URL 格式正确:
https://域名/api/callback/{slug} - 确认服务器 HTTPS 证书有效且可被外网访问
- 自建应用模式:检查 CorpID 和 Secret 是否匹配,Secret 是否为对应应用的 Secret
- ISV 模式:检查永久授权码是否有效,可能需要客户重新授权
- 确认企业可信 IP 中包含了服务器的公网 IP
- 注意不同应用的 Secret 不能混用
- 代开发应用模板需要先在服务商后台提交审核并上线发布
- 确认模板的开发配置已完成(包括回调URL、权限等)
- 新模板发布后可能需要几分钟生效
- 服务对象不同:排障助手给内部同事用(查租户、渠道、权限、看板);在线客服 AI 给终端用户用。
- 数据隔离:排障历史与评分在
ops_assistant_*集合;客服会话在ai_conversations等,二者不混用。 - 纯寒暄(如「你好啊」)只会短回复,不会出现准确率评分卡片;真实排障问题会有结构化建议、导出与打分。
- 入口:管理后台顶部排障助手;与客服工作台(
/agent/)、Agent Beta(AI 中心)不是同一功能。
12. 系统排障助手(内部 AI · 机制)
系统排障助手是面向内部人员(管理员、运营、客服主管等)的独立 AI 能力:帮助快速理解「配置、租户、渠道、工作台、权限」等问题,并给出可在管理后台内操作的排查步骤。它与租户侧在线客服 AI(拦截用户消息、知识库 RAG、会话)在代码路径、Mongo 集合、检索索引与反馈数据上完全隔离,避免与终端用户对话数据混用。
12.1 从哪里进入、和哪些功能并列
- 管理后台顶部右侧链接「排障助手」:打开排障对话与数据分析区;也可通过地址
/admin/?tab=troubleshoot直达。 - 与「客服工作台」(
/agent/新标签页)不同:后者是接待终端用户的坐席界面;排障助手仅服务内部排障与协作。 - 与「Agent Beta」不同:后者(超级管理员)进入的是AI 中心(系统级 LLM/人设等配置与测试),不是客服工作台。
- 客服台侧若集成排障入口,调用的是同一套
/api/agent/...排障 API,数据仍写入排障专用集合,不会写入租户ai_conversations客服会话。
12.2 与「在线客服 AI」对照
| 维度 | 在线客服 AI | 系统排障助手 |
|---|---|---|
| 服务对象 | 终端用户(访客/租户用户) | 内部运维、管理员、客服主管等 |
| 典型问题 | 订单、活动、产品咨询、投诉、转人工 | 租户选错、渠道未回、登录与权限、看板与队列、配置路径 |
| 知识来源 | 租户知识库 embedding、运营策略等 | 本地系统知识索引、实时代码片段命中、高分历史问答样本 |
| 持久化 | ai_conversations 等客服域集合 | ops_assistant_messages、ops_assistant_feedback |
| 大模型调用 | AI 核心链路 | 仅经 lib/ops-assistant/llm.js → 与主系统共用 OpenAI 兼容网关(如 DashScope) |
12.3 交互分类:寒暄 vs 排障咨询
服务端在调用大模型前会做轻量规则分类(无额外 LLM):
- 寒暄 / 闲聊(smalltalk):如「你好」「谢谢」「在吗」及带语气词的变体(「你好啊」等)。返回一句固定风格的友好短回复,不走结构化排障 JSON,不展示「反馈准确率」评分卡片,也不做无意义的代码库全文检索。
- 排障咨询(troubleshooting):包含异常、配置、现象描述或帮助类关键词,或附带截图等附件时,按排障处理:拉取上下文与检索结果,生成结构化 JSON(根因、步骤、风险等),前端压缩为一段可读说明,并展示导出本次报告与准确率反馈(0/50/75/100)。
- 排障路径下,即使用户表述与索引措辞不完全一致,也会尽量允许反馈打分,便于持续收集真实使用体验(具体策略以当前
lib/ops-assistant/service.js为准)。
12.4 请求处理流程(从提问到回复)
管理后台 / 客服台排障入口"] --> API["HTTP /api/.../ops-assistant/ask"] API --> KIND{"寒暄 or 排障?"} KIND -->|smalltalk| ST["固定友好回复
无评分卡片"] KIND -->|troubleshooting| CTX["注入上下文
角色/租户/页面/时间窗"] CTX --> HIS["最近多轮历史
ops_assistant_messages"] CTX --> KB["system-kb
系统知识索引 + 实时代码命中"] CTX --> LR["高分样本检索
feedback + messages"] LR --> VW["版本窗口
当前版 + 上一版"] VW --> TIER["100 优先于 75"] KB --> PROMPT["合成用户提示词
证据优先"] HIS --> PROMPT TIER --> PROMPT CTX --> PROMPT PROMPT --> LLM["大模型网关"] LLM --> NORM["JSON 解析与兜底"] NORM --> SAVE["写入 ops_assistant_messages"] SAVE --> UI["短文 + 导出报告 + 评分卡片"]
12.5 检索与证据(回答依据)
- 系统知识库(
system-kb.js):从当前部署仓库构建的索引,匹配运维文档、说明类内容。 - 实时代码命中:在本地代码树中做片段级检索,用于对齐真实实现(如路由、配置项名称),减少「臆测不存在的配置项」。
- 高分历史样本:仅使用历史反馈为 75% / 100% 的问答对作为参考;低分记录不参与检索强化。
- 发布版本窗口:样本附带发布版本号;学习检索时只采纳当前发布版本与上一版本内的样本,避免过期实现误导新版本。
12.6 结构化输出、导出与反馈
- 排障回复在模型侧约定为固定字段的 JSON(如根因列表、步骤、风险、置信度等),经校验后与规则兜底合并,再映射为前端「一段话 + 导出」。
- 导出本次报告:可生成 Markdown 报告,便于粘贴到工单或内部群。
- 反馈准确率:
0/50/75/100四档单选,每条消息仅可提交一次;用于后续自学习与质量分析。
12.7 评分与自学习规则
- 仅 75 / 100 分纳入「可学习」样本池,参与后续相似问题检索。
- 100 分样本在检索排序上优先于 75 分。
- 0 / 50 分保留审计与学习分析价值,但不作为正向范例注入提示词。
12.8 版本窗口(示意图)
版本号来自管理端前端配置的 APP_VERSION(与排障助手展示版本一致)。
当前版本 or 上一版本"} C -- 否 --> EX["不参与检索"] C -- 是 --> Q{"评分等级"} Q -- "100" --> P1["高优先级候选"] Q -- "75" --> P2["次优先级候选"] Q -- "0/50" --> DROP["仅存档"]
12.9 数据集合与代码路径
| 类型 | 集合 / 位置 | 说明 |
|---|---|---|
| 排障消息 | ops_assistant_messages | 多轮上下文、导出内容来源 |
| 排障反馈 | ops_assistant_feedback | 评分与自学习筛选 |
| 编排与分类 | lib/ops-assistant/service.js | 寒暄/排障分流、检索编排、showFeedback 等 |
| LLM 唯一入口 | lib/ops-assistant/llm.js | 转发 ai/lib/llm-client |
| 系统知识 + 代码命中 | lib/ops-assistant/system-kb.js | 非租户 RAG,排障专用 |
| 持久化 / 学习 | lib/ops-assistant/store.js、learning.js、release-version.js 等 | 消息存储、样本检索、版本窗口 |
| HTTP | routes/admin-ops-assistant.js、routes/agent-api.js | 管理端与客服台排障 API |
13. 配置项索引(通用说明 & 影响面)
本节按真实配置来源归纳高信号项,便于审计与排障。未列出的字段不代表不存在(可能为低频或仅内部使用);若需全量字段语义,以代码读取路径为准。涉及历史数据形状变更时,须按仓库数据兼容规则走迁移脚本、双读等流程,本文不给出破坏性操作指引。
13.1 config.json(lib/config-store.js)
默认位于数据目录(见上文「持久化配置目录」),可通过 IM_BRIDGE_DATA_DIR 重定向。HTTP API 前缀以 app.js 挂载为准:管理端 /api/admin/*。
| 名称(键 / 界面) | 通用说明 | 影响面 | 相关文件 / 接口(节选) |
|---|---|---|---|
adminPassword / 首次设置管理密码 | bcrypt 哈希;删除该字段可触发重新设置流程 | 全站管理后台登录 | lib/config-store.js、routes/admin-auth.js |
suiteConfig.wechat[] / 全局套件(齿轮) | 企微代开发/服务商套件 SuiteId、Secret、Token、AESKey、Provider 等 | ISV 授权、/api/suite 回调验签 | routes/admin-suite.js、routes/suite-callback.js |
suiteConfig.feishu[] | 飞书多套件配置骨架(与企微并列) | 飞书渠道与回调 | platforms/feishu.js、回调路由 |
tenants[] / 租户与渠道卡片 | 租户元数据、各渠道凭证(自建/ISV)、推送 Key、Webhook、页面树等 | 推送 API、IM 回调转发、H5、多渠道路由 | routes/admin-tenant.js、routes/callback.js、routes/push-api.js |
operationsConfig / 运营策略(管理端「运营」类配置) | 派发、队列、SLA、质检阈值、外部系统等嵌套对象;可与 Mongo 合并 | 运营引擎、客服队列、质检与集成 | lib/operations-config-store.js、routes/admin-operations.js、lib/ops-engine.js |
13.2 环境变量
下列变量由 app.js、server.js 或业务库直接读取。.env.example 仅覆盖部分场景(如阿里云语音),运行实例请以实际 .env 与代码为准。
| 名称 | 通用说明(默认值) | 影响面 | 相关文件(节选) |
|---|---|---|---|
MONGODB_URI | Mongo 连接串(默认 mongodb://localhost:27017/im-bridge) | 全站持久化;就绪探针 | lib/db.js、GET /health/ready |
PORT | HTTP 端口(默认 3001) | 监听与部署健康检查 | server.js |
IM_BRIDGE_DATA_DIR | 外置数据根目录 | config.json、套件票证等路径解析 | lib/config-store.js、lib/suite-store.js |
CONFIG_SOURCE_MODE | hybrid(默认)/ mongo / file | operations_config 与 config.json 中运营配置的合并策略 | lib/runtime-config-gateway.js、lib/operations-config-store.js |
AI_ENABLED | 为 false 时仍注册 AI 路由;当前仅影响 app.js 启动日志,不单独关闭拦截器 | 排障时可作「期望关停」的线索,实际以开关集合为准 | app.js;对比 ai/lib/switch-manager.js |
TRUST_PROXY | 1 时启用 Express trust proxy | 限流 IP、访问日志中的客户端地址 | app.js |
JSON_BODY_LIMIT | JSON/urlencoded 上限(默认 2mb) | 大 JSON 请求体 | app.js |
REDIS_URL | 可选;设置后纳入就绪检查 | GET /health/ready、分布式锁等(若使用) | app.js 健康路由 |
METRICS_ENABLED=1 | 开启 Prometheus 指标 | GET /metrics | app.js |
STRUCTURED_ACCESS_LOG=1 | 结构化访问日志 | 日志与排障 | app.js |
RATE_LIMIT_ENABLED、各类 RATE_LIMIT_* | 公网接口限流开关与阈值 | 推送、Web 渠道、租户登录等(平台回调不限流) | lib/rate-limit.js、app.js |
OPS_LOOP_INTERVAL_MS 等循环变量 | 见 §2「调度循环间隔」 | 运营/KPI/通知/KB/QC 后台任务 | server.js |
TENCENT_SECRET_ID / TENCENT_SECRET_KEY | 腾讯云 ASR | 企微语音转写后进入 AI/人工链路 | lib/tencent-asr.js |
13.3 MongoDB 文档型配置(代码显式读取的集合)
以下为当前代码路径中直接 getCollection(...) 读取、且承担配置/开关职责的集合(不含纯业务流水表全枚举)。
| 集合 | 通用说明 | 影响面 | 相关文件(节选) |
|---|---|---|---|
ai_tenant_config | 每租户一条:人设、规则、RAG、转人工、意图、情感、置信度、LLM 路由、营业时间、语音存储等 | AI 拦截、LLM、知识库上下文、工单式语音列表 | ai/routes/ai-admin.js、ai/middleware/ai-intercept.js、lib/voice-storage.js |
ai_system_config | 全局单例类文档:系统级 LLM/Embedding 密钥与模型参数 | 全租户默认模型、Embedding、部分质检/反馈 | ai/lib/llm-client.js、ai/lib/embedding-client.js |
ai_switches | 租户/渠道维度 AI 开关缓存 | 是否走 AI、按渠道灰度 | ai/lib/switch-manager.js、ai/index.js(索引) |
ai_conversations | AI 会话状态与轮次(索引由 AI 模块创建) | 多轮对话、AI 侧会话列表 | ai/lib/conversation-manager.js、ai/index.js |
operations_config | 文档 _id: 'global',字段 config 与文件内 operationsConfig 归并 | 运营策略、队列 SLA、外部系统钩子 | lib/operations-config-store.js |
agent_config | 客服侧坐席、技能组、邀评等配置 | 工作台 /api/agent、部分运营调度 | routes/agent-api.js、ai/routes/ai-cs-admin.js、lib/ops-engine.js |
会话集合并存说明:统一客服会话存储等路径还使用集合conversations(见lib/conversation-store.js),与ai_conversations职责不同;若排障时发现「列表/队列 ID 对不上」,需分别核对两条链路的读写集合,任何合并或迁移须在专项迁移与双读方案下进行。
13.4 管理后台界面与落库/接口(简述)
| 界面区域 | 主要落库 / 配置 | 典型 API 前缀 |
|---|---|---|
| 主控制台(租户、渠道、页面) | config.json 内 tenants、套件 | /api/admin/tenants、/api/admin/suite |
| 运营 / 通知 / KPI | operations_config + Mongo 业务集合 | /api/admin/operations、/api/admin/notifications |
超级管理员「AI 中心」(/admin/ai/) | ai_tenant_config、ai_system_config、ai_switches、KB chunk 集合等 | /api/admin/ai、/api/admin/ai/kb、/api/admin/ai/cs |
客服工作台静态页 /agent/ | 会话与坐席 API 依赖 agent_config、业务会话集合 | /api/agent(经 routes/agent-auth.js) |
Web 聊天 /chat/ | WebSocket /ws/chat + /api/channel、租户认证 | routes/web-channel.js、routes/tenant-auth.js |
| 对外 OpenAPI(若启用) | 租户密钥与配额读 ai_tenant_config 等 | /api/ai(ai/routes/ai-external.js) |
13.5 界面存在但 API 未实现或未消费 runtime 的配置(核实截至当前仓库)
下列项在 AI 中心前端 public/admin/ai/ai-admin.js 中有请求,但 ai/routes/ai-admin.js 未注册对应路由,面板会收到 404 或非预期响应,属「界面预留 / 待接通」:
- 租户统计看板:
GET /api/admin/ai/tenant/:tenantId/stats/overview、.../stats/trend、.../stats/hot-questions - 模型用量与预算:
/api/admin/ai/model-usage/*(含call-sites、tenant/.../model-usage/stats、budget、daily、test-connection等) - 评价统计:
GET /api/admin/ai/tenant/:tenantId/feedback/stats
已落库但拦截链未使用:ai_tenant_config.businessHours 由 PUT /api/admin/ai/tenant/:tenantId/config 写入并在 GET 中返回,但 ai/middleware/ai-intercept.js 未引用该字段——非工作时间话术不会在当前 AI 拦截路径自动生效,除非后续版本在拦截器中接入。
13.6 延伸阅读(仓库内)
架构细化、数据流与探活约定见本页下文「系统架构」各节及 docs/ARCHITECTURE.md(若部署包含该文件)。
附录: 代开发 ISV 配置完整流程
按照以下顺序操作(顺序很重要):
阶段一: 服务商准备(一次性)
- 服务商后台 创建代开发应用模板(
dk开头)或第三方应用(ww开头)→ 开发配置 → 提交上线 - IM Bridge 点击左侧 齿轮图标 进入全局配置 → 填写 Suite ID / Secret / Token / AESKey → 代开发另填 ProviderCorpId / ProviderSecret → 保存
- 服务商后台 应用管理 → 数据回调 URL → 填入
https://域名/api/suite/wechat/callback及相同的 Token / AESKey → 保存验证 - 等待 约 10 分钟,IM Bridge 全局配置页面状态变为 "Ticket 已就绪"
阶段二: 为客户创建租户和渠道
- IM Bridge 点击 "+" 创建新租户(填写名称,slug 可留空自动生成随机标识)
- IM Bridge 进入租户详情 → 渠道管理 Tab → "+ 添加渠道" → 选择企业微信 → 应用模式选 "代开发/ISV"(凭证区域留空,授权后自动填入)
阶段三: 客户授权
- IM Bridge 渠道管理 → 企微渠道卡片 → 点击 "生成授权链接" → 复制链接
- 客户操作 企业微信管理员在企微中打开授权链接 → 确认信息 → 同意授权
- 自动完成 系统接收回调 → 交换永久授权码 → 凭证自动填入渠道卡片 → 状态变为"已授权"
阶段四: 业务配置
- IM Bridge 渠道管理 → 企微渠道卡片 → 按需配置 推送消息 API(生成 API Key)
- IM Bridge 页面管理 Tab → 新建 H5 页面和菜单 → 复制 H5 链接
- 客户企微 将 H5 链接配置到应用主页或自定义菜单
注意: ISV 模式下消息通过套件回调(suite-callback.js)自动接收,渠道卡片中无需配置接收消息回调。推送 API Key 在渠道卡片内独立管理。
系统架构
可视化系统架构图 — 由 Mermaid 实时渲染
A1. 系统总览
展示从客户端(企微/飞书/Web/APP)经接入层、AI处理层、回复路由层到人工客服系统和管理后台的完整数据流,包含租户用户认证体系:
A2. 多渠道消息流转时序
展示一条用户消息从发送到 AI 回复(或转人工)的完整处理链路:
A3. 目录结构与模块职责
各目录和模块的分层关系:
A4. 数据架构 (ER图)
核心数据实体及其关系(含租户用户体系和渠道级配置):
A5. 客服在线检测与心跳机制
客服在线状态的完整生命周期,包括心跳超时自动离线(1分钟):
A6. 平台适配器模式
所有平台实现统一的 sendMessage() 接口,新增平台只需注册新适配器:
A7. 部署架构
生产环境的物理部署拓扑:
A8. 前端页面结构
| 页面 | 路径 | 用途 | 访问角色 |
|---|---|---|---|
| 管理后台 | /admin/ | 租户管理、AI配置、知识库、客服配置、渠道管理、交互日志 | superadmin / admin |
| 客服工作台 | /agent/ | 实时会话接待、快捷回复、客户信息、团队管理(主管) | helpdesk_agent / supervisor |
| Web聊天页 | /chat/?slug=xxx | 面向终端用户的 Web 在线客服入口 | 公开访问 |
| 使用文档 | /admin/docs.html | 操作指南与架构文档(原版) | 管理员 |
| 使用文档(当前版) | /admin/docsv1.html | 与当前系统一致的修订版说明与对标分析 | 管理员 |
| KPI 看板 | /admin/kpi.html | 客服绩效数据统计 | 管理员 / 主管 |
A9. 多渠道配置说明
每个租户支持同时接入多个通讯渠道。IM 渠道(企微/飞书)独立管理凭证、回调配置和推送 API Key;Web/APP 渠道管理聊天页面配置。
渠道类型与功能矩阵
| 功能 | 企微 (wechat) | 飞书 (feishu) | Web | APP |
|---|---|---|---|---|
| 应用模式 | 自建/ISV | 自建/ISV | - | - |
| 凭证管理 | CorpId/Secret/AgentId 或 AuthCorpId/PermanentCode | AppId/AppSecret | - | - |
| 接收消息回调 | 自建模式需配置 Token/AESKey | 自建模式需配置 | - | - |
| ISV 回调提示 | ISV 走套件回调,无需配置 | 同左 | - | - |
| 推送 API Key | 渠道级生成 | 渠道级生成 | - | - |
| 聊天页面配置 | - | - | 标题/欢迎语/占位符 | 同 Web |
| 租户用户登录 | - | - | 支持(可选) | 支持(可选) |
链接防枚举 (随机 Slug)
新建租户时,若不手动指定 slug,系统自动生成 8 位随机 hex(如 a3f7b1e2),使每个租户的聊天链接无法被推测。已有租户的自定义 slug 保持不变。
租户用户认证体系
每个租户可配置独立的用户账户体系(tenant-user-model.js),用于 Web/APP 渠道的登录认证:
- 用户账户存储在 MongoDB,密码使用 bcrypt(10) 加密
- 支持单个创建、批量生成(前缀+数量)、CSV 导入
- 可选首次登录强制修改密码
- 当租户有用户账户时,Web 聊天页自动切换为登录模式;无用户时保持匿名模式
- 登录后通过 session token 进行 WebSocket 认证
主渠道与向后兼容
标记为"主渠道"的 IM 渠道,其 credentials、mode、callbackToken、apiKey 会自动同步到租户顶层字段。这保证了 callback.js、push-api.js、suite-callback.js 等仍通过 tenant.credentials 读取凭证的代码能正常工作。
配置持久化路径
多租户主配置默认写入 外置数据目录下的 config.json(见上文「持久化配置目录」),不再依赖应用根目录内的同名文件,以便升级同步代码时不被覆盖。
自动迁移机制
系统启动时 config-store.js 的 backfillDefaults() 自动执行:
- 旧格式租户补齐
channels[]数组 - 租户顶层
callbackToken/callbackAESKey/apiKey迁移到主 IM 渠道 - 主渠道数据反向同步到租户顶层(向后兼容)
渠道管理操作
在管理后台 → 租户详情 → 渠道管理 Tab 中可进行:
- 添加新渠道(企微/飞书/Web/APP)
- IM 渠道:切换应用模式(自建/ISV)、配置凭证、回调、推送 API Key
- Web/APP 渠道:配置聊天标题、欢迎消息、获取聊天页链接
- 设置主渠道、启用/停用、删除渠道
- ISV 模式下直接生成授权链接(无需回到基本信息页)
A10. 租户用户认证体系
Web/APP 渠道支持可选的租户用户认证,认证流程如下:
管理端操作
在管理后台 → 租户详情 → 用户管理 Tab 中:
- 单个创建用户(用户名/密码/显示名/启用/强制改密)
- 批量生成用户(前缀 + 起始编号 + 数量,系统生成随机密码)
- CSV 导入用户
- 重置密码、启用/停用、删除用户
A11. 健康探针、请求 ID 与业务事件
与「可观测性、排障、发布」相关的 HTTP 行为与数据落库;与业务功能章节正交。
探针与关联头
| 路径 | 用途 | 依赖 |
|---|---|---|
/health/live | 进程存活 | 无 |
/health/ready | 依赖就绪 | MongoDB;可选 Redis(REDIS_URL) |
/metrics | Prometheus 文本指标 | 需 METRICS_ENABLED=1 |
请求级 X-Request-Id / X-Trace-Id 与 AI、回调、推送等路径对齐。
业务事件查询
GET /api/admin/business-events(参数 tenantId、type、traceId、source、startDate、endDate、page、limit)或页面 /admin/business-events.html。
- 超级管理员:
tenantId可选;省略则查全部租户。 - 普通管理员:必须传
tenantId,且仅能查询自己有权限的租户;否则返回 400 / 403。
典型 type:push_message_sent、ai_message_received、ai_reply_sent、ai_transfer_human、ai_llm_failed、callback_channel_inbound、callback_channel_reject、callback_webhook_forward_failed、suite_wechat_inbound、suite_wechat_post_error、suite_feishu_callback_error 等(以代码为准)。
进程信号
SIGTERM / SIGINT:停止通知 Worker → 关闭 WebSocket → 关闭 HTTP → 关闭 Mongo 连接。
本地自检:node scripts/verify-ops-health.js;发布树检查:node scripts/verify-release-tree.js。
版本更新日志
按时间倒序记录系统重大功能迭代
- HTTP:
GET /health/live、GET /health/ready;全局X-Request-Id/ 可选入站X-Trace-Id;JSON_BODY_LIMIT限制 JSON 体大小 - MongoDB:
business_events集合与索引;AI / 推送 / IM 回调关键路径异步打点;可选BUSINESS_EVENTS_TTL_DAYS - 运行时:
SIGTERM/SIGINT优雅关闭(通知 Worker、WebSocket、HTTP、数据库);ai_logs支持traceId字段 - 管理端:顶栏「存活」「就绪」「业务事件」;业务事件页/API 支持普通管理员按授权租户查询(须选租户)、超级管理员可查全库
- 可选:
REDIS_URL纳入 ready;METRICS_ENABLED=1暴露 Prometheus 风格/metrics(uptime、内存、HTTP 计数);scripts/verify-release-tree.js与 GitHub Actions CI
- 排障助手:寒暄与排障分流(含语气词变体)、排障场景下准确率反馈卡片与导出报告;与客服 AI 数据面隔离策略文档化
- 管理后台导航:保留单一「排障助手」入口(顶部右侧);Agent Beta 指向 AI 中心测试;客服工作台 指向
/agent/;账号区视觉分隔 - 客服台:登录页品牌 Logo 与文档入口一致性
- 质量保障:Playwright E2E(Web 渠道多用户并发 + AI 回复、可选 globalSetup 临时坐席)纳入
npm run test:ui:e2e - docs.html:本章更新排障助手专节、版本日志与竞品对标表
- docsv1.html: 与当前实现对齐的使用说明与「功能对标分析」修订版
- 配置外置: 默认
im-bridge-data/存放config.json与.suite-tickets.json,支持IM_BRIDGE_DATA_DIR - 安全部署: 新增
scripts/safe-deploy.sh(备份关键文件 + rsync 排除项 + 健康检查)
- 回调配置迁移至渠道级: 接收消息回调的 Token/AESKey/WebhookUrl 从租户级移入 IM 渠道卡片内管理,自建模式显示配置表单,ISV 模式提示无需配置
- 推送 API Key 迁移至渠道级: 每个 IM 渠道独立生成和管理 API Key
- 聊天链接防枚举: 新建租户自动生成 8 位随机 hex slug(如
a3f7b1e2),防止链接被猜测遍历 - 系统使用文档: 新增
/admin/docs.html页面,包含操作指南、Mermaid 架构图、FAQ 搜索 - 自动数据迁移: 启动时自动将旧租户级回调/Key 配置迁移到主 IM 渠道,并保持向后兼容同步
- Web/APP 聊天渠道: 新增 WebSocket 实时聊天通道(
/ws/chat),支持匿名和登录两种模式 - 多渠道架构: 租户支持
channels[]数组,可同时接入企微、飞书、Web、APP 四种渠道类型 - 租户用户认证体系: 新增
tenant-user-model.js,支持为每个租户配置独立用户账户(bcrypt 加密),单个创建/批量生成/CSV 导入 - 租户用户登录: Web/APP 渠道检测到租户有用户时自动切换为登录模式,支持首次登录强制改密
- KPI 看板: 新增
/admin/kpi.html客服绩效数据统计页面
- 客服工作台: 新增
/agent/独立客服接待界面,支持实时会话、快捷回复、客户信息查看 - AI 转人工: AI 对话中检测到转人工意图时,自动检查在线客服并分配会话
- 心跳在线检测: 客服每次 API 请求触发心跳,超过 1 分钟无心跳自动标记离线
- 会话管理: Session Store 支持 4 小时 TTL 自动过期清理
- RBAC 权限体系: 用户角色分为 superadmin / admin / helpdesk_agent / helpdesk_supervisor
- AI 消息拦截:
ai-intercept.js统一拦截所有渠道消息,支持开关控制、业务时间、阻止词过滤 - 知识库系统: 支持多格式文档上传(PDF/Word/HTML),embedding 向量化存储,语义检索 top-3 匹配
- LLM 大模型集成: 对接阿里云 DashScope(qwen-plus),system prompt + 知识库上下文 + 多轮对话
- 意图分类: 自动识别用户意图(闲聊/咨询/投诉/转人工等),按意图路由处理
- 情感分析 & 反馈: 检测用户情绪,收集满意度评分,用于服务质量改进
- AI 管理界面: 独立 AI 配置页面,管理 prompt、知识库、路由规则
- 语音转文字: 集成腾讯云 ASR,自动将企微语音消息(AMR 格式)转为文字后交 AI 处理
- 语音文件下载: 从 IM 平台下载语音文件并临时存储,支持自动过期清理
- PM2 进程管理: 新增
ecosystem.config.js,支持 PM2 守护进程部署 - 部署脚本优化:
deploy.sh支持.deployignore排除敏感文件
- MongoDB 集成: 引入 MongoDB 替代纯文件存储,
db.js统一管理数据库连接 - 交互日志: 所有 H5 用户操作(菜单点击、表单提交)持久化记录到 MongoDB
- 日志查询: 管理后台支持按租户、时间范围、操作类型查询和统计交互日志
- ISV 授权流程: 完整实现企微代开发/第三方应用授权链路(suite_ticket → 授权链接 → 永久授权码)
- 全局服务商配置: Suite ID / Secret / Token / AESKey / ProviderCorpId / ProviderSecret 统一管理
- suite_ticket 持久化: ticket 存储到磁盘文件,服务重启自动恢复
- 管理员密码认证: 首次访问设置 bcrypt 加密管理密码,后续登录验证
- 飞书加密模块: 新增
feishu-crypto.js,支持飞书消息验签和解密
- 多租户架构: 基于外置
config.json(默认im-bridge-data/config.json)的多租户配置管理,每个租户独立 slug 标识 - 企业微信支持: 自建应用模式消息收发,OAuth 网页授权,JS-SDK 鉴权
- 飞书支持: 飞书平台适配器,消息发送和事件回调
- H5 操作面板: 可配置菜单(直接触发/表单提交),用户操作后 POST 到指定 Webhook
- 消息推送 API:
/api/push/:slug/message支持 text/markdown/textcard 消息类型 - 消息回调转发:
/api/callback/:slug接收平台事件并转发到 Webhook URL - 管理后台: 租户管理、页面管理、菜单管理界面
- 客服与权限体系: Agent Beta 工作台 + RBAC v2(统一账号、角色与成员、数据范围、技能组)
- 运营与通知: 运营策略中心 + 通知中心(邮件/短信队列、重试、日志)
- 会话与语音: 会话统一到 V2
conversations,支持企微语音 ASR 转文字后交 AI 处理
功能对标分析
IM Bridge 与主流商业客服系统(网易七鱼、沃丰 UDESK)的能力对比 — 本表已按当前系统实现修订(2026-03-28)
一、核心功能对比
| 功能模块 | 七鱼 / UDESK | IM Bridge | 差距 | 难度 | AI 编程可行性 |
|---|---|---|---|---|---|
| 渠道接入 | |||||
| 企业微信 | 支持 | 支持(自建 + ISV) | 持平 | - | - |
| 企微服务商多套件 | 多应用模板常见 | 支持多套(如 Suit A / B,独立回调与 ticket) | 优势 | - | - |
| 飞书 | 支持 | 支持 | 持平 | - | - |
| 微信公众号 / 小程序 | 支持 | 不支持 | 缺失 | M | 高 — 已有 wechat adapter 模板,公众号 API 结构类似 |
| 网页 / APP 内嵌 | 支持(SDK) | 支持(WebSocket) | 持平 | - | - |
| 电话语音(呼叫中心) | 完整 IVR + 云呼叫 | 不支持 | 缺失 | - | 话务相关,不做考虑 |
| 邮件通知 | 支持 | 支持(通知中心 SMTP + 队列 + 重试 + 日志) | 持平 | - | - |
| 短信通知 | 支持 | 支持(通知中心云短信 + 队列 + 重试 + 日志) | 持平 | - | - |
| 抖音 / 小红书 / 微博 | 支持 | 不支持 | 缺失 | H | 中 — 每个平台 API 不同,需逐个对接调试 |
| 在线客服 | |||||
| 多坐席在线接待 | 支持 | 支持(基础) | 有差距 | - | - |
| 智能路由 / 排队分配 | 按技能组 / 负载 / VIP 优先级 | 运营配置 + 调度引擎(可配置策略,持续演进中) | 有差距 | M | 高 — 在现有 ops/dispatch 上继续细化规则与 UI |
| 排队等候(队列管理) | 完整队列 + 等待提示 | 运营侧队列配置与超时动作(与商业产品完整排队 UX 仍有差距) | 有差距 | M | 高 — WebSocket 等待位提示与前端体验需补强 |
| 会话转接 / 协助 | 转接 + 三方会话 + 内部协助 | 支持会话转接与分配;三方协助能力部分支持 | 有差距 | M | 中 — 继续补强协助态与可视化操作即可 |
| 快捷回复 / 话术库 | 分组管理 + 搜索 | 支持(MongoDB quick_replies,客服 API 拉取) | 有差距 | S | 中 — 管理端分组/搜索体验可继续对齐七鱼 |
| 富媒体消息 | 图文 / 卡片 / 商品 / 订单 | text / markdown / textcard + 推送侧扩展与幂等 | 有差距 | M | 中 — 复杂卡片与订单类消息需按平台继续扩展 |
| 客户信息面板(CRM) | 完整客户画像 + 历史轨迹 | 客户标签 + 画像字段(customer_tags / customer_profiles) | 有差距 | H | 中 — 全链路画像与轨迹聚合仍需产品化 |
| 满意度评价 | 自动邀评 + 多维度 | 支持提交与存储(satisfaction_ratings),可配 Webhook 外发 | 有差距 | S | 中 — 邀评时机与多维度模板可对齐商业产品 |
| 工单系统 | |||||
| 工单创建 / 流转 | 完整工单引擎 | 无独立工单产品;支持外部系统回调与运营编排衔接 | 有差距 | H | 中高 — 标准工单模块仍可分阶段建设 |
| SLA 时效管理 | 支持 | 运营配置中含 SLA 策略与超时动作(与专用工单 SLA 仍有差距) | 有差距 | M | 高 — 与工单闭环打通后价值更高 |
| 跨部门协作 | 支持 | 依赖外部 ITSM/编排;系统内跨部门工单协作弱 | 有差距 | M | 中 — 需工单或外部系统深度集成 |
| AI 智能客服 | |||||
| AI 机器人自动回复 | 支持 | 支持 | 持平 | - | - |
| 知识库管理 | 结构化 + 非结构化 + 网页抓取 | 文档上传/批量导入 + 内容去重(hash)+ URL 抓取入库 + 定时刷新 + 检索命中解释 | 基本持平 | - | - |
| LLM 大模型集成 | 自研 / 接入多家大模型 | 支持 OpenAI 兼容网关(当前常用 DashScope) | 有差距 | S | 高 — 增加模型/路由配置可继续扩展 |
| 意图识别 | 98%+ 准确率 | 基础分类 | 有差距 | M | 中 — 用 LLM few-shot 替代规则可显著提升 |
| 多轮对话 | 任务型 + 闲聊 | 上下文对话 | 有差距 | M | 高 — 在 conversation-manager 上增加槽位追踪 |
| 人机协同(AI 辅助坐席) | AI 建议回复 + 实时推荐 | 不支持 | 缺失 | H | 中 — 异步调 LLM 生成建议推送到工作台 |
| AI 转人工 | 支持 | 支持 | 持平 | - | - |
| 情感分析 | 支持 | 支持(基础) | 有差距 | - | - |
| 语音转文字 | 支持 | 支持(腾讯 ASR) | 持平 | - | - |
| 数据与质检 | |||||
| 实时监控大屏 | 完整 | 不支持专用大屏 | 缺失 | H | 中 — 后端简单,前端大屏布局工作量大 |
| 会话质检(自动) | AI 全量质检 | 运营侧质检:规则命中 + LLM 评分合并、报表(分布/风险 Top/趋势)、低分/高风险告警(通知中心);与头部「全量无差别质检 + 成熟报表矩阵」仍有差距 | 有差距 | M | 持续迭代报表维度与抽检策略 |
| 数据报表(多维) | 几十种报表模板 | KPI / 运营统计 + AI 侧部分报表 | 有差距 | H | 中 — 模板化报表矩阵仍需建设 |
| 客户满意度统计 | 完整 CSAT / NPS | 有评价数据与接口基础,管理侧统计可继续增强 | 有差距 | S | 高 — 聚合与可视化对齐 CSAT/NPS 模型 |
| 管理功能 | |||||
| 坐席管理 / 权限 | 完善 | RBAC v2(统一账号、自定义角色、Membership、self/team/tenant 三级范围、技能组与渠道隔离) | 有差距 | - | - |
| 多租户 / 多品牌 | 支持 | 支持 | 持平 | - | - |
| ISV / 代开发 | 部分支持 | 完整支持 | 优势 | - | - |
| 开放 API / Webhook | 完善 | 支持(推送 / 回调 / 运营回调);部分接口支持幂等与审计 | 有差距 | - | - |
| 审计与合规 | 完善 | 管理操作审计日志(含归档查询) | 有差距 | - | - |
| 内部运维与交付(非终端客服) | |||||
| 内部排障 / 交付助手 | 多数商业 SaaS 不提供或仅文档 | 系统排障助手:独立模块 lib/ops-assistant/,系统知识 + 代码命中 + 高分样本自学习,管理端与客服主管侧可用 | 差异化能力 | - | 持续扩充 system-kb 与发布版本治理即可 |
难度评级: S 简单(1-2 文件) M 中等(3-5 文件) H 较难(多模块联动) X 极难(大量 UI 工程)。已持平项和话务相关项不标注。
二、AI 个性化控制能力对比
| AI 维度 | 七鱼 / UDESK | IM Bridge | 差距 | 难度 | AI 编程可行性 |
|---|---|---|---|---|---|
| Prompt 自定义 | 可视化编排 + 模板 | 支持(代码级配置) | 功能持平,易用性有差距 | - | - |
| 知识库 RAG | 结构化 QA + 文档 + 网页抓取,自动知识挖掘 | 文档/URL 入库 + embedding 检索(TopK)+ 命中解释(chunk/score/source) | 有差距 | S | 高 — 主要差距在自动知识挖掘、命中治理与灰度/A-B |
| 多机器人 / 多场景 | 不同业务线配不同机器人和话术 | 按租户/运营策略维度配置(含路由与策略),非完整多机器人产品形态 | 有差距 | M | 高 — 多机器人编排和版本治理仍需产品化 |
| 意图流程编排 | 可视化流程画布,按意图分支处理 | 代码级意图分类 + 路由 | 差距大 | X | 低 — 拖拽式画布需专业前端框架,AI 编程效率低 |
| 个性化回复风格 | 可调语气 / 角色 / 人设 | system prompt 控制 | 基本持平 | - | - |
| 业务系统对接(AI Agent) | AI Agent 调用外部 API / 查订单 / 查库存 | 不支持(仅知识库) | 差距大 | H | 中高 — LLM function calling + 工具定义,核心可行 |
| 对话变量 / 槽位填充 | 表单收集 + 变量传递 | 不支持 | 缺失 | M | 高 — 对话上下文维护 slots 对象,LLM 提取实体 |
| A/B 测试 | 支持多策略对比 | 不支持 | 缺失 | M | 中 — 按比例分流 + 对比指标,后端不难 |
| AI 自学习 | 未解决问题自动入库,持续优化 | 客服侧:反馈与运营处理;排障助手侧:75/100 样本自动进入检索池(版本窗口内) | 有差距 | M | 客服侧可继续做「未命中入待审核」闭环 |
| 大模型选择 | 多模型切换(通义 / 文心 / GPT) | 支持 OpenAI 兼容接口切换(默认 DashScope) | 有差距 | S | 高 — 增加模型池和路由策略可对齐商业产品 |
难度评级: S 简单 M 中等 H 较难 X 极难。已持平项不标注。
三、总结
IM Bridge 的核心优势
- 私有部署、完全可控 — 无坐席费用,数据不出企业
- 企微 ISV/代开发流程完整 — 从授权到消息收发一站打通;支持多套服务商套件并行(独立回调与 ticket)
- 轻量灵活 — 单 Node 进程 + MongoDB,适合快速定制和二次开发
- 配置外置与可回滚 — 主配置与 suite_ticket 与代码目录分离,配合备份脚本降低升级覆盖风险
- 内部排障助手 — 面向实施与运维的 AI + 本地证据链,降低「查文档、猜配置」成本,与租户客服数据隔离
与主流产品的主要差距(按优先级,已结合当前实现)
- P0-1. 智能路由 / 排队体验 — 已具备技能组、队列与运营策略,但等待态体验(排队提示/催单/预估等待)与高级策略(VIP/优先级/负载)仍弱于头部产品
- P0-2. 会话质检 & 模板化多维报表 — KPI/告警已上线,但自动质检(抽检/全量评分/违规识别)与报表矩阵(模板、对比、钻取)仍需补齐
- P0-3. AI Agent 工具调用闭环 — 当前以知识库 + 转人工为主;“查订单/查物流/改地址/建工单”等可执行动作与权限/审计仍需建设
- P1. 标准工单产品 — 仍无开箱即用工单引擎;当前以 Webhook 外挂系统为主
- P2. 可视化流程编排 — 主要依赖配置与代码,暂未建设完整流程画布
- P2. 渠道覆盖 — 缺少电话、公众号、社交媒体等增量渠道
AI 个性化方面
- 核心的 Prompt 控制、知识库 RAG、情感分析、转人工等基础能力已具备
- 主要差距在 AI Agent(工具调用 / 业务系统对接) 和 可视化编排,这是当前主流产品的核心差异化方向
四、推荐实施路径
按「投入产出比」排序,优先做 AI 编程能高效完成且业务价值大的功能。约 60-70% 的差距功能可通过 AI 编程达到接近主流产品的水平,主要瓶颈在复杂前端交互(可视化编排、监控大屏、CRM 面板)。
第一梯队: 简单高回报(部分已落地,可继续打磨)
- 快捷回复 / 话术库 S — 已有后端与客服拉取;可加强管理端分组/搜索/导入导出
- 满意度评价 + 统计 S — 已有提交与存储;可加强邀评策略与管理报表
- 多模型切换 S — llm-client 加配置项(仍值得做)
- 通知中心体验打磨 S — 邮件/短信已上线,可继续优化模板与策略联动
第二梯队: 中等难度,AI 拆步骤可完成
- 智能路由 / 排队分配 M — 在现有运营调度上扩展规则、监控与坐席侧体验
- 会话转接 M — WebSocket 会话路由修改
- 会话质检 (LLM 自动评分) M — 异步调 LLM 对会话评分
- AI Agent 工具调用 H — function calling + 业务工具定义
- 意图识别提升 M — LLM few-shot 替代规则
- 知识库治理(未命中回收 / 去重 / 命中解释 / 刷新策略) M — 基础入库已具备,继续补齐治理闭环与可观测性
- SLA 时效管理 M — 与工单或会话闭环深度绑定 + 告警产品化
第三梯队: 较大工程量,需分阶段推进
- 工单系统 H — 状态机 + 分配规则 + UI,可拆 3-4 步
- 客户信息面板 H — 在标签/画像基础上做全链路轨迹与 UI 深化
- 数据报表 H — MongoDB aggregation + 前端图表
- 微信公众号适配 M — 新增 platform adapter
暂不建议
- 可视化流程编排 X — 拖拽式画布需专业前端框架,投入产出不合理
- 实时监控大屏 H — 锦上添花,非核心刚需
- 抖音/小红书/微博 H — 平台 API 调试周期长,按业务需求决定
- 电话语音 - — 话务相关,不做考虑
在线客服 KPI 对标(七鱼 / UDESK)
面向当前系统(RBAC v2、队列与运营策略、通知中心、会话质检与 KPI 看板、管理端 AI 中心「Agent Beta」入口、/agent/ 客服工作台)给出的 KPI 产品能力清单与实施优先级。
一、P0(必须上线)
| KPI 分类 | 七鱼 / UDESK 常见能力 | IM Bridge 目标形态 | 指标示例 |
|---|---|---|---|
| 会话规模 | 实时会话看板 + 趋势 | 多租户/渠道/技能组实时聚合 | 总会话数、接入数、排队数、转人工数 |
| 响应时效 | FRT/AHT/SLA 全链路 | 会话事件化打点 + 超时告警 | 首次响应时长、平均响应时长、平均处理时长、超时率 |
| 服务质量 | 解决率 + 放弃率 + 升级率 | 队列与转接事件统一统计 | 一次解决率(FCR)、排队放弃率、升级率 |
| 满意度 | CSAT 评价与追踪 | 评价采集 + 趋势与分组分析 | 满意率、差评率、评价覆盖率 |
| 坐席效率 | 人效与在线状态分析 | Agent 状态 + 接待行为统计 | 人均接待量、并发会话、在线时长、忙闲占比 |
| 队列健康 | 等待体验与积压预警 | 排队时长分布 + 阈值通知 | 平均等待时长、最长等待时长、积压会话数 |
二、P1(对齐商业产品体验)
- 多维钻取:按租户/渠道/技能组/坐席/时段筛选,支持环比同比。
- 班次与峰谷:小时热力图、班次负载分析、峰值预警。
- 转接与主管介入:转接成功率、主管强插率、介入后解决率。
- AI 协同 KPI:AI 命中率、AI 转人工原因 TopN、建议回复采纳率。
- 通知闭环:SLA/差评/积压阈值告警(邮件/短信/站内)与处理追踪。
三、P2(高阶运营能力)
- 目标管理:KPI 目标值、达成率、红黄绿灯、部门排行。
- 预测能力:会话量预测、排班建议、资源利用率优化。
- 质检联动:自动质检分与人工质检结果联合分析。
- 经营视角:服务成本、人效、渠道 ROI、客户生命周期服务表现。
四、指标口径(建议统一)
| 指标 | 推荐口径 | 统计粒度 |
|---|---|---|
| 首次响应时长(FRT) | 会话创建到坐席首条回复的时间 | 会话 / 坐席 / 技能组 / 租户 |
| 平均处理时长(AHT) | 会话关闭时间 - 会话创建时间(可剔除排队段) | 日 / 周 / 月 |
| 一次解决率(FCR) | 24h/72h 内未再次开启同类问题会话的占比 | 租户 / 业务线 |
| 排队放弃率 | 进入队列后未接入坐席即离开的会话占比 | 技能组 / 时段 |
| 满意率(CSAT) | 满意评价数 / 总评价数 | 坐席 / 团队 / 渠道 |
| SLA 达成率 | 在设定响应或处理时限内完成的会话占比 | 策略 / 技能组 / 租户 |
五、当前系统实施建议(可直接排期)
- 先做 P0 仪表盘:优先上线 FRT/AHT/CSAT/排队/SLA 5 组核心指标。
- 打通告警链路:与通知中心联动,支持超阈值自动告警。
- 增加多维筛选:优先支持“租户 + 渠道 + 技能组 + 坐席 + 时间”。
- 补齐 AI 协同指标:新增 AI 命中/转人工/建议采纳率统计。