1. 为什么外部群机器人最缺的就是消息分类
接手过企业微信外部群机器人开发的兄弟,应该都有过这种体验:机器人拉进群,webhook 回调一开,好家伙,群里所有消息全都涌过来了。你以为接下来要做的是“收到消息→转发到业务系统”这么简单,真跑起来才发现,群里除了业务消息,还有一堆“哈哈哈哈哈”、“收到”、“明天几点”、“在吗”,甚至还有外卖红包、拼多多砍一刀、广告链接。
企业微信的外部群和内部群最大的区别就在这:内部群基本是熟人协作,大家说话自带上下文,消息本身相对规范;外部群里面有客户、有供应商、有合作伙伴,还经常混着各种来路不明的人。消息形态从“规范的结构化业务数据”一下子退化成了“菜市场聊天”,如果机器人不加区分地把所有东西都当成业务消息推送,那后台不到半天就会被噪音淹没,真正重要的内容反而沉底了。
所以这套实战的核心,不是“怎么接入企业微信机器人”,而是“怎么让机器人听懂什么该管、什么不该管”。标题里提到的业务消息、普通聊天、无效内容,就是需要收敛的三个分类目标:
- 业务消息:包含订单号、客户ID、异常告警、审批流转、付款凭证等结构化或半结构化信息,需要进入业务系统处理。
- 普通聊天:同事或者客户之间的日常沟通,有信息价值但对自动化处理没有意义,记录留存即可。
- 无效内容:广告、表情包、红包、二维码、无意义复读、系统通知提示等,应当直接丢弃,不落库、不推送、不触发任何动作。
我做过好几个类似的项目,踩过的坑包括但不限于:把群里的“收到”当成客户确认导致订单状态被误改;把图片验证码当成附件上传到业务系统;因为没做消息去重,同一事件被推送三遍,客户打电话来问是不是系统崩了。说实话,这些问题的根源都不在机器人本身,而在分类策略设计得不够细。
这篇文章我会完整走一遍从需求拆解、分类模型设计、消息格式识别、到中间件落地的实操路径,并且把每个环节“为什么这么做”讲清楚。适合正在接企业微信机器人、或者准备做群消息自动化处理的朋友参考,也欢迎已经踩过坑的兄弟来交流。
2. 消息分类的整体设计思路:先分层,再过滤,最后才谈推送
2.1 为什么不能用“关键词匹配一把梭”
很多第一次做外部群机器人的朋友,上来就写一堆if (msg.includes("订单"))的判定逻辑。这种方案在小规模测试群里跑着没问题,到真实场景里几乎必翻车。原因很简单:外部群的语言环境太野了。
同样是“订单”两个字,可能是客户在问“订单什么时候发货”,也可能是销售在群里说“订单别发错仓了”,还可能是机器人自己推送的“新订单待确认”。你根本没法用一两个关键词区分“描述订单的消息”和“需要系统处理的订单数据”。再加上群里经常出现错别字、拼音缩写、语音转文字的错误结果,关键词匹配的准确率很快就跌到没法看的程度。
所以我的建议是:不要一上来就做内容识别,先做分层。企业微信机器人的消息回调里自带很多元信息,比如消息类型、发送人、发送时间、群ID、消息ID,这些字段本身就是非常有价值的分类信号,而且完全不需要解析内容就能拿到。
分层设计通常分三层:
- 通道感知层:判断消息是从哪个群来的、谁发的、什么类型。这一步先把无效通道和有效通道分开。
- 内容识别层:对文本和结构化消息做解析,提取关键词、正则匹配、实体识别。这一步解决“这条消息在说什么”。
- 语义决策层:结合业务规则和历史上下文,决定这条消息要不要进业务系统、要不要推送给指定人。这一步解决“这条消息值不值得管”。
三层各司其职,每一层做错都不影响其他层的逻辑,排查起来也清晰。
2.2 落地时优先用“白名单通道 + 规则引擎”而非纯AI分类
有人可能会问:现在大模型这么成熟,为什么不用 AI 做语义分类?我的答案是:可以用,但别让 AI 做第一道闸。
原因有三个。第一,外部群消息量大,AI 接口调用有成本也有延迟,不可能每一条消息都走大模型;第二,AI 分类的结果是不确定的,业务消息漏判(把订单当成聊天)比误判(把聊天当订单)的代价往往更高,不确定性的东西放在主链路上风险太大;第三,企业微信群里的业务消息往往有明显的结构特征,比如订单号格式、@机器人、特定前缀,这些用规则匹配既便宜又精准,根本不需要大材小用。
我常用的架构是:先用规则引擎建立高置信度的分类通道,把一定比例的消息直接判定掉;剩下的模糊地带才交给 AI 或者人工兜底。这样既保证核心业务消息的确定性,又能覆盖长尾的语义场景。
具体到消息分类结果,我会给每条消息打一个category字段,取值就是前面说的三类:business、chat、invalid。后续所有下游逻辑,包括推送、存储、告警、统计,都只看这个字段,不再重复解析原始消息内容。这样做有个好处:分类逻辑可以单独迭代,改分类规则不用动推送逻辑,推送逻辑调整也不会误伤分类结果。
3. 核心细节解析:企业微信消息类型与业务字段提取
3.1 消息类型是第一个天然分类器
企业微信的机器人回调里面,MsgType字段是最老实的分类依据。常见类型包括:
| MsgType | 对应场景 | 默认分类建议 |
|---|---|---|
| text | 普通文本消息 | 进入内容识别层 |
| image | 图片 | chat 或 invalid |
| voice | 语音 | chat(除非有转写) |
| video | 视频 | invalid |
| file | 文件 | business 或 chat |
| location | 位置 | business 或 invalid |
| link | 链接卡片 | invalid 或 business |
| event | 事件通知 | 单独处理 |
这里面有几个媒体类型要特别说明。
image本身不代表“聊天”或“业务”,比如客户发一张付款截图,这就是业务消息;发一张午饭照片,这就是聊天。所以 image 不能一刀切,我的做法是:如果图片下面紧跟的文本消息里包含“付款”“凭证”“截图”之类的关键词,或者图片是在机器人发出“请上传付款截图”之后的5分钟内收到的,就把它临时标记为 business。这个“时间窗口 + 上下文关联”的技巧,比单纯识别图片类型要靠谱得多。
file同理,文件后缀是个好线索。PDF、Excel、压缩包一般是业务单据;表情包、动图基本可以直接丢。我把这一步叫作“二级分类器”,上一级看MsgType,这一级看FileName后缀。
3.2 文本消息里到底该提取什么
文本消息是所有类型里信息密度最高的,也是最难处理的。我的处理流程固定为四步:
- 去重和清洗:先把消息首尾空格、不可见字符、@机器人的部分去掉;连续重复的标点和字母(比如“!!!!”、“okkkkk”)给收敛掉。
- 正则提取:根据业务预定义好的规则,匹配订单号、手机号、金额、日期、城市、自定义编号等实体。
- 关键词标注:对清洗后的文本做关键词表扫描,给消息打上方向性的标签,比如“催单”、“付款”、“退换货”、“开票”、“投诉”。
- 意图匹配:把上一步的标签和消息里的实体组合起来,形成一条“可执行指令摘要”。
举例说明。客户端在群里发:[订单号]SO20240816001 我们已经付款了 麻烦尽快发货。经过清洗和正则提取后,会被解析成:
- 订单号:
SO20240816001 - 动作:付款确认
- 附加诉求:催发货
- 消息分类:business
而如果发的是明天有空吗,正则提取不到任何业务实体,关键词表也命中不了,分类结果自然就是chat。
这里我踩过一个很典型的坑:正则写得太宽,把订单号里的数字段误当手机号提取了。后来我在正则库里加了一条规则——手机号必须匹配完整的11位数字,且以1[3-9]开头,如果一段数字同时命中订单号和手机号两种模式,优先采用订单号模式,因为订单号出现在业务上下文里的概率更高。
3.3 事件通知与 @机器人 消息要单拎出来
企业微信外部群机器人除了消息,还会收到一大堆事件:成员入群、成员退群、群名变更、群公告修改。这些事件不是“聊天”,也不是“业务消息”,但它们传递的信息很有价值。比如关键客户退群,通常意味着合作出问题了;群名改成“XX项目暂停”,可能直接关联到业务变体。
我的处理原则是:事件类消息不进入常规分类流,单独走一条轻量逻辑。group_member_add、group_member_remove、group_name_change这类事件,直接转换成结构化日志存储,并且在关键事件发生时(比如供应商负责人退群),推送给业务管理员。
还有一个特别值得注意的字段:消息回调里的机器人标识。外部群有时候会同时存在多个机器人,你方机器人和对方机器人都在群里。如果你把所有机器人发的消息都当成业务消息处理,极容易造成两个机器人互相触发、循环刷屏。所以回调消息里凡是发送人类型为机器人、或者消息本身带msgtype = markdown且发送人不是真实客户的,都应当默认跳过或不参与业务判定。这一条建议直接写进你的消息入口过滤规则里,别等出了问题再补。
4. 实操过程:一个可以直接落地的分类中间件
4.1 中间件不复杂,但必须单独部署
我不建议在企业微信机器人回调的“入口函数”里面直接完成分类和推送逻辑。原因非常现实:回调接口的响应时间要求很严格,你在入口函数里跑模型、查数据库、调第三方接口,很容易超时,导致企业微信重试推送,然后你的入口被重复消息冲垮。
更稳的做法是单独部署一个“消息分类中间件”,它只干三件事:
- 接收企业微信回调,校验签名,立即返回
success给企业微信。 - 把原始消息丢进队列,异步完成分类和存储。
- 根据分类结果,决定是否推送、往哪里推送。
这样即使分类逻辑出 bug,也不会影响企业微信的回调链路,修好之后还能从队列里补处理。
这里补充一个签名校验的细节。企业微信回调消息带的Timestamp、Nonce、MsgSign这几个参数,一定要校验通过以后再处理消息体。MsgSign的计算方式,是把Token、Timestamp、Nonce、加密后的消息体字符串按字典序拼接后做 SHA-1 哈希,然后和企业微信传过来的签名比对。有人为了省事跳过了这一步,结果是任何人都能往你的回调地址伪造消息,机器人能被玩坏。
4.2 入口代码:校验、入库、异步分类
下面给一段精简的入口代码,用的 Node.js,逻辑很清楚,换成 Python 也不难。
// 回调入口:先验签,再确认,再投递队列 const crypto = require('crypto'); const queue = require('./queue'); const TOKEN = 'your_callback_token'; function verifySignature(timestamp, nonce, encrypt, msgSign) { const str = [TOKEN, timestamp, nonce, encrypt].sort().join(''); const hash = crypto.createHash('sha1').update(str).digest('hex'); return hash === msgSign; } exports.handleWecomCallback = async (req, res) => { const { timestamp, nonce, msg_sign: msgSign } = req.query; const encryptMsg = req.body.encrypt; if (!verifySignature(timestamp, nonce, encryptMsg, msgSign)) { return res.status(403).send('sign check failed'); } // 立即确认,避免企业微信重试 res.send('success'); // 落原始消息日志,确保追溯能力 const raw = decryptMessage(encryptMsg); // 企业微信消息体需 AES 解密 await queue.publish('wecom_original_messages', { roomId: extractRoomId(raw), senderId: extractSenderId(raw), msgType: extractMsgType(raw), content: extractContent(raw), msgTime: new Date(), }); // 异步做分类和推送,不在回调链路里执行 queue.subscribe('wecom_original_messages', classifyAndHandle); };这段代码里有两个关键点:
res.send('success')必须放在解密和队列投递的前面,越快越好。企业微信只要收到这个确认,就不会触发重试机制。- 原始消息落库一步不能省。后面的分类规则可能随时调整,没有原始数据做回放,你根本没法验证新规则的效果。
需要特别提醒的是企业微信的消息体密文不是 Base64 就完事,是 AES-256-CBC 加密,encrypt字段里包含了 IV 和密文。很多人第一次对接,在这里浪费了半天。官方的加解密库里有现成的decrypt函数,直接用就行,别自己硬撸加密算法。
4.3 分类主流程:一张表看清三层判定逻辑
进入异步分类流程之后,核心逻辑就是按优先级逐层判定。我习惯把分类规则做成配置表,不要硬编码在代码里。原因很现实:业务规则一定会在某个深夜被一个客户场景推翻,如果规则是写在代码里的,你还要拉分支、上测试、发版,一个简单规则改动跟一次大版本发布一样重;做成配置表,改完了热加载就行。
优先级从高到低大致是这样:
| 优先级 | 判定条件 | 分类结果 | 说明 |
|---|---|---|---|
| P0 | 消息类型为 event 或 link | invalid | 不进入业务处理 |
| P1 | 发送人类型为机器人 | invalid | 避免机器人互相触发 |
| P2 | 文本命中了高置信度业务正则(订单号、金额等) | business | 业务主链路 |
| P3 | 文本匹配关键词表里的业务动作(付款、退款、投诉等) | business | 业务辅助判定 |
| P4 | 文本长度小于阈值(比如少于两个汉字)或全是标点表情 | invalid | 低信息量消息 |
| P5 | 以上都不是 | chat | 普通聊天,落库不推送 |
这里的 P2 和 P3 不是互斥的,命中 P2 直接归为 business,不用再看 P3;没命中 P2 才继续走 P3。P4 这个“低信息量”判定,很多人会忽略,但它非常管用,外部群里最多的就是这种消息。
配置表样例(JSON 格式):
{ "rules": [ { "id": "order_no", "priority": 2, "pattern": "SO\\\\d{14}", "category": "business", "action": "push_to_order_system" }, { "id": "payment_kw", "priority": 3, "keywords": ["付款", "已付", "转账", "打款"], "category": "business", "action": "push_to_finance_log" }, { "id": "meaningless", "priority": 4, "minLength": 2, "category": "invalid" } ] }这种配置驱动的方式,等你跑上一两个月,会发现最大的收益不是免发版,而是你敢于调规则。敢调规则,分类准确率才能不断往上涨。
4.4 高置信度优先还是低误判优先?我的选择是后者
设计分类规则的时候,有一个绕不开的权衡:把业务消息漏掉(漏判)的代价大,还是把普通聊天误当业务消息(误判)的代价大?
我的结论是:外部群场景里,误判的代价远大于漏判。
原因很容易理解。漏判一条业务消息,最坏的结果是业务人员没收到提醒,但他自己翻群记录也可能发现;误判一条聊天消息,系统可能给客户发错确认、改错订单、扣错款项,这个后果是无法靠“下次改规则”补救的,已经对客情造成了实打实的伤害。
所以我在配置规则的时候,永远会留一条“兜底通道”:凡是无法高置信度判定为 business 的消息,一律归为 chat,而不是“猜一个”。系统里允许有“分类不准”的消息,但不允许有“分类很自信但是错了”的消息。这一点写在你的分类引擎设计文档里,团队其他人也都得遵守。
4.5 业务消息的去重:消息ID和时间窗双保险
外部群机器人最容易被忽略的坑,就是消息重复触发。
来源主要有三个:
- 企业微信为了保证消息不丢,回调出现超时或网络异常时会重试推送;
- 如果同一条消息你既订阅了“群消息”又订阅了“机器人消息”,可能在入口收到两份;
- 群里有多个机器人,你的机器人收到消息后转发到业务系统,业务系统处理失败后又触发重推,形成循环。
解决方式不复杂,但必须有。我在中间件里加了两层去重:
- 基于消息 ID 的精确去重:每条回调消息都带一个唯一的
MsgId,处理之前先查 Redis,如果存在就直接丢弃。 - 基于内容 + 时间窗的模糊去重:同一发送人、同一群、同一文本内容,在 60 秒内重复出现超过 N 次,判定为重复或刷屏,不再重复推送。
模糊去重尤其重要,因为有些客户会在群里连发三四遍“发货没有”,你如果每一条都生成一个工单,客服电话会被打爆。我的处理方式是把 60 秒内的相同诉求合并成一条消息,在推送标题上标注“同一诉求重复3次”,让业务人员一眼就知道客户急了。
5. 常见问题与排查技巧实录
5.1 问题一:消息乱序,订单状态被旧消息覆盖
有段时间我们收到反馈,订单的状态总是不稳定,明明客户已经确认收货了,系统又把它改回“待收货”。排查之后发现,根因在企业微信回调的消息并不是严格按时间顺序到达的。
原因是网络延迟。同一秒内客户可能在群里先说了“已收货”,然后又说“等下我再看下”,结果后一条消息先到达服务器,前一条后到达。系统按“最后到达的消息为准”去更新状态,就把状态改回去了。
解决方案是在中间件里加一个“消息时间戳 + 业务实体状态”的对比逻辑。更具体地说,所有进入 business 分类的消息,在落库前必须先检查这条消息携带的事件时间是否早于该订单当前状态的最新更新时间。如果是旧消息,直接放进“晚到消息表”记录,不再执行更新操作。别小看这个细节,外部群业务消息乱序导致的故障,是我见过最多的一类“玄学问题”。
5.2 问题二:关键词误判导致的误操作
我们曾经被一个真实场景坑过。客户在群里说“这个单不要了,取消”,机器人识别到“取消”关键词,直接调用了业务系统的“取消订单”接口。但客户的真实意图是“这次先不下单了,下次再说”,根本不是取消已生成的订单。
从那以后,我在关键词规则里加了几条保命约束:
- 关键动作必须有实体对象支撑:比如“取消”必须同时解析到订单号或商品编号,否则只记录不执行。
- 否定词检测:如果文本里同时存在“别取消”“不要取消”“暂不取消”,不得触发取消动作。这个逻辑看起来简单,但很多人真的忘了做。
- 人工确认兜底:凡是涉及资金、订单变更、删除等高风险动作,分类结果只作为“候选”,推送通知给业务人员,让业务人员一键确认,而不是系统直接执行。
说白了,机器人负责把“疑似业务消息”挑出来并推给合适的人,这就已经创造了很大的价值。至于让机器人全自动执行闭环,除非你的业务规则极其标准,否则我是不推荐直接上马的。
5.3 问题三:markdown 消息把内部格式泄露给了客户
企业微信机器人可以选择用 markdown 格式推送消息,格式确实好看,标题加粗、字段对齐很清晰。但这里有一个安全细节:markdown 消息内容里的@、#、**加粗**、<font>这类语法,在客户端的展示效果会直接渲染出来。如果你把内部系统的字段名(比如order_no、user_id、sys_status)直接拼进 markdown 模板,客户看到的就是一串又像代码又不是代码的东西,非常不专业。
我的经验是:对外推送内容一定是重新组织的语言,不能直接把内部 JSON 字段拼进去展示。分类引擎和推送模板要分离,分类引擎负责判定“这是业务消息”,推送模板负责把业务消息“翻译”成客户能读懂的句子。另外,markdown 消息里的链接跳转要特别小心,外链域名一定要走公司备案的短链服务,不要直接拼第三方地址。这也是合规上的基本要求。
5.4 问题四:关于频率限制和“多开会封号”的澄清
排查过不少问题之后,很多朋友会问到频率限制,甚至有人把问题总结成“企业微信多开会封号吗”“企业微信防封”这种说法。这里我单独说下自己的理解:官方机器人接口本身有频控限制,合理使用是没问题的;频繁触发频控的主要原因是循环调用或者规则bug,而不是机器人本身“被盯上了”。
需要提醒的是,有些人为了绕频控会去用非官方的桌面端协议或者多开工具,这类行为风险极高。且不谈合规性,单从稳定性看,非官方方案随时可能因为客户端升级而失效,出了问题你连技术支持都找不到。我的原则很简单:一切能用官方接口解决的,绝不上第三方协议;频控上不去,先优化自己的推送频率,而不是换通道。
实操层面,可以给中间件加一个简单的“令牌桶”限流器,控制每秒最多推送的消息条数。企业微信对机器人发消息的频控并不是一个固定值,但保持每秒不超过 5 条、单条消息体不超过 2048 字节,通常是比较稳的。过大的消息体拆分发送,反而更容易触发限制。这条经验在压力测试阶段就验证过,保守一点没坏处。
5.5 问题五:Linux 环境部署的坑
开发环境是 Windows,测试环境用的 Ubuntu,很多朋友会在 Linux 部署环节卡住。这里分享三个经常被问到的点:
- 企业微信官方提供的加解密库在 Linux 下如果遇到
crypto相关的乱码,大概率是系统缺少libssl-dev,装上就好。 - 如果消息里的中文在落库后变成乱码,先检查 MySQL 或 Redis 连接串是否加了
charset=utf8mb4。我在生产环境就因为这个字段漏加,排查了整整一天。 - 外部群机器人部署在 Linux 服务器上,日志轮转一定要配好。群消息量大之后,日志文件能在一天内涨几个 GB,不轮转就直接把磁盘写满。我用的是按天 + 按大小双维度轮转,超过 500MB 就自动拆分,保留最近 7 天。
5.6 常见问题速查表
| 现象 | 可能原因 | 排查顺序 |
|---|---|---|
| 回调收到但业务系统没动静 | 分类规则未命中、队列消费失败 | 1. 查原始消息库;2. 查分类结果;3. 查推送日志 |
| 消息重复推送 | 回调重试、订阅重复、缺少去重 | 1. 查 Redis 去重键;2. 查回调确认是否及时;3. 查订阅配置 |
| 订单状态被改错 | 消息乱序、旧消息晚到 | 1. 比对消息时间和业务更新时间;2. 查晚到消息表 |
| 中文乱码 | 字符集配置错误 | 1. 查数据库连接串;2. 查日志编码 |
| 推送触发频控 | 推送频率过高、循环触发 | 1. 查推送间隔;2. 查是否有机器人互触 |
6. 消息分发与推送模板的最后一公里
分类做完只是第一步,真正让业务跑起来的是“分完了怎么用”。我见过很多团队把精力全花在分类准确率上,结果推送环节做得很粗暴,直接导致分类的价值被浪费。
6.1 不同分类对应不同的分发通道
business 消息要推给具体责任人,chat 消息可以归档不打扰人,invalid 消息只在统计报表里体现。这里的分发通道不仅仅是企业微信内部,更多时候是跟外部系统的衔接。
我这里用的是一个简单但很可靠的分发模式:
- business 消息进消息队列,由业务系统消费。持久化到独立的业务消息表,带
processed标记。 - 推送动作采用“失败重试 + 死信”机制,重试超过 3 次进入人工处理队列。
- chat 消息只做摘要存储,不推送,但支持按群成员、按时间检索。
- invalid 消息统计数量,用于发现群内的广告和噪音比例。
6.2 推送模板的字段设计
给业务人员推送的模板,至少要包含:业务类型、关键实体(订单号/客户号)、消息原文摘要、时间、来源群、发送人。并且标题要直接告诉业务人员“该做什么”,而不是让他们自己去猜。
举例:
【付款确认提醒】 客户:上海XX贸易有限公司 订单:SO20240816001 金额:¥12,600.00 说明:客户已在群内确认付款,请核实到账后安排发货。 原始消息:我们已经付款了 麻烦尽快发货 来源群:XX项目外部协作群 发送人:客户方-王经理 时间:2024-08-16 14:32:05这种模板看上去没什么技术含量,但它的价值在于:业务人员看到第一句就知道要干什么,不用点开系统、不用翻上下文。机器人分类的准确率再高,如果推送呈现得让业务人员看不懂,一样会被无视。
6.3 分级告警与静默时段
还有一个优化点是分级告警。不是所有 business 消息都要立刻打扰人。我的分类引擎在输出类别之外,还会附带一个urgency字段,分为低、中、高三级:
- 高:付款、退款、投诉、订单取消,立即推送并循环提醒。
- 中:催单、发货咨询、合同签署,工作时间推送。
- 低:一般性业务讨论、资料补充,汇总为每日简报。
静默时段(比如晚上 10 点到第二天早上 8 点),除了高优级消息,其他一律进入“待推送”提醒,等到第二天早上一次性推送给当班同事。这个设计看似简单,实际上帮团队避免了很多深夜被打扰的抱怨。
7. 最后的实操心得
文章写到这里,该讲的流程和避坑点都讲得差不多了,最后分享一点个人体会。
我做外部群机器人有一年多了,最大的感受是:这个项目表面上是技术活,实际上是对“沟通边界”的梳理。消息分类分类的从来不只是消息文本,而是组织内部对“哪些信息值得处理”的共识。订单号、金额这种硬规则好定,但像“客户抱怨物流慢”这种软弱业务信号,如果不提前定义好要不要管、怎么管,机器人永远只能做到“字面理解”,做不到“理解意图”。
另外一点经验:分类规则不是一次设计完就不动的,它是跟着业务跑的。每过一到两周,我都会把近期的消息日志翻出来回放一遍,看看有没有漏判、有没有误判,根据结果微调规则表。这个“复盘—调规则—再验证”的循环,比任何一次大版本的架构设计都重要。分类准确率就是这么一点一滴磨出来的,没有捷径。
如果你也准备做类似的项目,我的建议是先把原始消息存下来,哪怕分类逻辑还没搭好,先把消息的积累做起来。有了真实数据,后续做规则也好、做模型也好,都有底。别急着让机器人“全自动”,先让它“会看、会记、会分”,再逐步放开自动化权限。稳扎稳打,比什么都重要。