NEW

免费试用已开放

立即开始

自动化 · 回调 · Webhook

企业微信自动回复三种做法对比

更新于 2026-08-168 分钟

讨论企业微信自动回复时,多数团队的第一个问题就问错了:不是「要不要上 AI」,而是「进来的消息里,有多少压根不需要理解语义」。把一周的真实会话捞出来看一遍就知道,问营业时间、问怎么退货、问「有人在吗」的,往往占掉一大半 —— 这些用关键词和场景触发就能兜住,交给大模型只是在为可枚举的问题付推理费。这篇把三档做法的适用边界、真实成本和各自的失效方式摆在一起,再讲清楚一件比选哪一档更重要的事:转人工入口怎么设计。文中的链路示意按 wecomapi 的事件回调与发送接口来写。

三档不是升级路线,是三种输入

关键词规则、场景触发、AI 生成经常被排成一条从低级到高级的升级路线,好像上了 AI 就可以把前两档退役。真跑过一段时间就知道不是这么回事 —— 它们的输入根本不同:关键词看的是消息文本,场景触发看的是会话状态与时间,AI 看的是语义与上下文。三者解决的是三类问题,不存在谁替代谁。

判断一条消息该走哪一档,只需要问一个问题:这个意图能不能被穷举。能穷举、话术固定、答错代价小,走关键词;跟客户说了什么无关、由状态变化触发,走场景;剩下的开放式提问才交给 AI。

  • 关键词规则:输入是文本,命中即定,回什么完全可预测,失效方式是「答非所问」
  • 场景触发:输入是状态与时间(新客加上、超出服务时段、长时间无人应答),失效方式是「该发的没发,或者发重了」
  • AI 生成:输入是语义与历史,回什么事前不可预测,失效方式是「一本正经地编」

线上的正确形态是三档串在同一条链路上按优先级依次裁决,不是选一个上。真正要避免的是两套监听各发各的 —— 关键词服务和 AI 服务分别订阅同一批消息,客户会收到两条回复,这是自动回复最常见的线上事故。

关键词那一档的天花板在哪

企业微信关键词回复是三档里唯一完全可控的一档,代价是维护成本随词表规模非线性上涨。几十条词、彼此不重叠的时候它近乎零成本;到了上百条,问题就从「写词」变成「裁决」—— 一条消息同时命中三条规则时回哪个、谁定优先级、新加的词会不会抢走旧词的流量,这些都没有自动答案。

所以词表要从第一天就带上优先级和命中日志,而不是等它乱了再补。命中日志的价值在于两个信号:哪些规则从来没被命中过(该删),哪些规则命中之后客户紧接着又追问了一句(说明答得不对)。缺了这两个信号,词表只会越加越长,且没人敢删。

  • 默认沉默比默认乱答安全:先定义「什么都不命中就不回」,再往上加规则
  • 同义词、错别字、带标点的变体归一化成单独一层,不要塞进主词表撑大它
  • 每条规则带一个「回完是否仍然转人工」的标记 —— 引导类话术回完就该转

场景触发是最被低估的一档

三档里投入产出比最高的其实是场景触发,因为它不需要理解任何内容。新客加上后的第一条欢迎语、非服务时段的离线告知、客户发完消息超过若干分钟仍无人应答时的补位提示 —— 第一类从 wecomapi 的外部联系人事件里拿到触发点,后两类由服务端时间和会话最后活跃时间算出来,逻辑简单,效果却直接落在客户体感上。先把这一档做扎实,往往比急着上 AI 更划算。

它的坑不在业务逻辑,在时间本身。服务时段要考虑节假日和调休,不能只判断周一到周五;「离线」以坐席在线状态为准还是以时段表为准,两个口径会给出不同结果;最容易出的问题是重复触发 —— 客户在离线时段连发五条消息,收到五条「我们已下班」,比不回还糟糕。

  • 每类场景触发都要有会话级抑制窗口:同一会话在窗口内只发一次
  • 触发判定用服务端时间和明确时区,别依赖事件报文里带的时间
  • 节假日表当配置维护,不要硬编码进代码,否则每年改一次都要发版

AI 那一档的成本不在推理费

上 AI 回复时,被算进预算的通常只有 token 费用,而它往往是这一档里最便宜的部分。真正的成本有三块:知识库的持续维护、一套能判断「这次回答行不行」的评测集,以及为几秒级延迟做的会话体验设计。三块里缺任何一块,AI 回复上线之后都会被运营悄悄关掉。

评测集值得单说。没有它,你换个提示词、换个模型版本、往知识库里加一批文档,全都无法判断是变好还是变坏,只能听客服反馈「最近答得怪怪的」。做法不复杂:从真实会话里抽一两百条问题,人工标好期望答案的要点,每次改动跑一遍。这个投入一天就能做完,省下的是无止境的线上试错。

延迟是另一个被低估的点。关键词回复是毫秒级,AI 回复带上检索和生成常常要几秒。客户在这几秒里看到的是一片空白,很可能已经补发了第二条消息 —— 这时你的系统面对的是两条消息、两次触发、两条回复。要么先回一条极短的确认,要么在生成期间把同一会话的后续消息合并进同一次请求。

一个务实的判断标准:如果你还没有能力在每次改动后跑一遍评测,就先别把 AI 那一档接进线上会话,先用它给人工坐席出答案建议。这个用法出错不会打到客户身上。

转人工入口是三档共用的地基

企微自动回复真正的失败模式不是答错,是答错之后客户找不到人。所以转人工不能只挂在某一档里 —— 三档都得能把会话交出去:关键词规则自带转人工标记,场景触发在长时间无人应答时升级,AI 在低置信时交人。触发源怎么排优先级、置信度该由哪些信号算出来,站内另有一篇专门讲转人工,这里只讲和三档并存直接相关的那一半。

接管之后有一件事必须做对:自动回复要立刻闭嘴。会话上要有一个人工接管标记,整条链路最前面先查这个标记,命中就短路返回。少了这一步,坐席正在和客户沟通,机器人在旁边插播「您可以查看帮助中心」—— 这类事故的投诉杀伤力比答错大得多。这个标记还要带过期时间,否则一个忘了关闭的会话会永久失去自动回复能力。

交接本身也要带上下文:最近几轮对话、命中了哪条规则、AI 给出的答案和置信度,一并推给坐席。让客户把问题重讲一遍,是自动回复留给人工的最大负债。

串成一条有优先级的链路

把上面几段落成代码,形态大致是这样:用 wecomapi 的事件回调拿到消息,交给一条有顺序的裁决链,人工接管标记在最前面,AI 在最后兜底,每一档都能同时决定「回什么」和「要不要顺带转人工」。

示意:三档串成一条有优先级的裁决链javascript
// 示意逻辑,事件结构与字段名以 wecomapi 文档为准
async function onMessage(evt) {
  const sid = sessionIdOf(evt);

  // 0. 人工已接管 —— 整条链路短路,什么都不发
  if (await takeover.active(sid)) return;

  // 1. 场景触发:只看状态与时间,带会话级抑制窗口
  const scene = await sceneRule.match(sid, evt);
  if (scene && (await limiter.allow(sid, scene.key))) {
    return reply(evt, scene.text);
  }

  // 2. 关键词:命中即定,按优先级取第一条
  const hit = keyword.match(evt.text);
  if (hit) {
    await reply(evt, hit.text);
    if (hit.escalate) await takeover.request(sid, "规则要求转人工");
    return;
  }

  // 3. AI 兜底:低置信不发,转人工并带上草稿与上下文
  const { answer, confidence } = await llm.answer(sid, evt.text);
  if (confidence < THRESHOLD) {
    return takeover.request(sid, "低置信", { draft: answer });
  }
  await reply(evt, answer);
}

以上为链路示意。末端的发送动作最终落到发送消息接口(形如 https://manager.wecomapi.com/message/sendText),精确的字段名、事件结构与错误码以线上接口文档为准,不要照抄示意代码上生产。

常见问题

关键词回复和 AI 回复能同时开吗?会不会互相打架?
能同时开,但必须串成一条链路、只保留一个裁决点:关键词先命中先回,AI 只在没有规则命中时兜底。会打架的是另一种做法 —— 关键词服务和 AI 服务各自订阅同一路 wecomapi 事件回调、各发各的,客户收到两条回复。判断标准很简单:一条消息进来,系统里只能有一个地方决定「发不发、发什么」。
人工接手之后,怎么让自动回复停下来?
在会话维度上放一个人工接管标记,链路最前面查它,命中就整条短路,而不是靠各档规则自己判断。标记要带过期时间并支持坐席手动关闭,否则忘了释放的会话会一直收不到自动回复。这一条不做,坐席和机器人抢答只是时间问题。
怎么衡量自动回复到底有没有用?
别看回复覆盖率,那个数字只要多加词表就能刷上去。看两个指标:自助解决率(回复之后客户没有再追问、也没有转人工的会话占比),以及转人工后的重复问答率(坐席接手后客户又把问题重讲一遍的比例)。前者衡量答得对不对,后者衡量交接有没有带上下文。

准备好动手了?

精确字段、鉴权与端点以线上文档为准;可在控制台创建密钥后联调。

相关文章