从企业微信机器人到流程执行,消息即触发
群里发一句话能不能直接触发流程,这篇按落地顺序写一遍。企业微信机器人接入要过哪几步,飞书和钉钉在验签、消息体、回复方式上的差异,消息里的参数怎么拆出来传给流程并做校验回执,结果回推怎么写才不让人懒得看第二次,权限和合规上哪几条线不能踩。也会说清哪几种情况这套东西不值得做。
群里发一句话,流程就跑起来了

早会上有人说了句「把昨天那批数据拉一下」,说完还得有人转身打开电脑,点进某个内部页面,选日期,点查询,等下载,再把结果贴回群里。这套动作要是每天做一遍,最先冒出来的念头通常是能不能让机器人接掉。
办公平台自带机器人的不少。企业微信、飞书、钉钉都能在群里加一个机器人,收到消息之后回调到自己的服务上。第一步的门槛确实不高,配个地址,机器人就能收到你发的话。
但从「消息收到了」到「流程跑完并且结果回到群里」,中间有一堆看着不起眼的活。参数怎么从消息里拆出来,流程怎么被触发,跑完了往哪儿说,说错了怎么办。这些活没做,机器人就只是个会回话的玩具。
这篇按落地的顺序写。企业微信机器人接入怎么走,飞书和钉钉的差异在哪,消息里的参数怎么传给流程,结果回推怎么做,权限和合规上哪些线不能踩。最后也会说清几种情况这套东西不值得上。
消息即触发,到底换回了什么
把这件事的价值说清楚,免得把它想得太玄。
换回的第一样是入口的门槛。调度界面、脚本命令行、任务编号,这些东西对开发同事不算什么,对业务同事是一道墙。消息是所有人都会用的东西,说一句就能发起一件事,流程的发起权就从开发挪到了业务手上。
第二样是时机的自由。定时任务适合每天同一时刻做的事,但现实里大多数活是「想起来才做」。月底财务要跑一次对上个月的数,客户临时要一份明细,这些任务隔多久跑一次没人说得准,硬要写成定时,就得一天跑很多遍,很多遍里绝大多数是空跑。消息触发是来一次做一次。
第三样是留痕。谁在什么时候通过哪条消息发起了哪个流程,消息本身就是凭证,比「张三在群里说了一句」这种口头约定强得多。
这三样凑齐才是消息即触发的价值。少一样,它就只是个入口的替代品。
它也有边界。消息适合当触发器,不适合当数据通道。一份几十兆的表格从群里传过来,出问题的概率比从文件服务器取高得多。真要传文件,走文件接口,消息里只留一个引用。
微信办公自动化被提出来,多数时候是嫌群里消息太多、人肉盯着费劲。但真正让人愿意用的,往往是上面第二样,时机的自由。
微信办公自动化听起来是个大词,落到具体场景里,多半就是上面这几件事的组合。
企业微信机器人接入,怎么走
企微这边有两种东西都叫机器人,能力差很多,别搞混。
一种是群机器人 webhook。在群里添加,拿到的就是一个带 key 的地址,往里 POST 一个 JSON 就能往群里发消息。发是能发,接收要另想办法。而且这个地址本身就是凭证,谁拿到谁就能往群里发消息,所以它不该出现在日志里,也不该贴在文档里。
另一种是自建应用。后台建应用,拿到 AgentId 和 Secret,配一条接收消息的地址。这一种是双向的,能收能发,适合拿来做触发。
接自建应用大致是这几步。
第一步,在企微管理后台建应用,拿到应用的身份信息,同时把接收消息的地址和 Token 填上。
第二步,企微会往这个地址发一次验证请求,带一个签名参数和一个 echostr 字符串过来,你得原样返回。返回的内容不对,这个地址就通不过。这里最容易踩的坑,是直接拿这个地址去跑通用 Web 框架的默认路由,框架自作主张加了些内容,返回的就不是原样了。
第三步,配消息接收地址。企微推过来的消息体默认是 XML,也能改成 JSON。两种都见过,按哪种写取决于你的服务怎么解析,选定就别换来换去。
第四步,拿到消息之后回一条确认。企微对处理时间有要求,超时会重投,重投会重复触发,所以确认这步别省。
第五步,需要主动发消息的时候去换 access_token。这个 token 有有效期,两小时左右,拿到先缓存起来,别每次发消息都换一遍。换的次数有限,换太勤容易被限。
做到这五步,回调这条线就通了。回调收到的是什么消息、要不要真的触发流程,是下一步的事。
飞书和钉钉的差异在哪
三家的东西长得像,细节差得挺远。下面这些是接的时候真会卡住的。
回调的验签方式不一样。企微要按它规定的方式算签名,钉钉的加签是另一种算法,飞书又有自己的一套。三份代码不能互相抄。
消息体的结构不一样。企微的文本消息里内容放在一个字段,飞书是另一种结构,钉钉又有自己的。真要拆参数的时候,这层差异最费时间。
回复的方式也不一样。有的平台在收到消息的回调里直接返回一个响应就行,有的平台要拿回调里给的地址去另外发消息,有的平台只能走主动发送。搞混了的表现是流程跑完了,群里没消息。
权限模型不一样。企微的应用能拿到多大范围的通讯录,飞书和钉钉各有各的应用可见范围。这条差异对企业的影响比技术上的差异大得多,因为可见范围是配出来的,配错了就是信息越界。
群机器人的能力也不对等。有的平台群机器人只能发文字和图片,不能发交互卡片,不能主动私聊,有的能。所以「企业微信机器人接入」这一步攒下来的经验,搬到另一个平台不能照抄,要重新看那个平台给了什么。
选平台时先看一件事,这个群已经在用哪个平台。企微群里的事就别往飞书接,反过来也一样。多一个平台就多一套要维护的东西。
消息和流程之间的参数传递
机器人收到一句话,流程需要的是几个具体的值。订单号、日期、账号、金额。这一段是整条链路上最容易出事的地方。
消息里的内容是人随手打的,格式不统一。同一件事,有人写「订单 20241015 处理一下」,有人写「麻烦看下20241015这个订单」。别指望一条正则能抓住所有情况,固定格式只在模板化场景下成立。
比较稳的做法分三层。
第一层,指令和参数分开。一部分内容是动作,用固定关键词或者下拉菜单来选,剩下的当参数原样传下去。混在一起的时候,识别再准也会有边界情况。
第二层,参数要有校验和回执。流程开始之前,先把解析出来的参数回一句,「要处理 20241015 对吗」。人确认了再往下走。这一步看着多余,但它把「解析错了」从一次错误执行,降级成一次对话纠正。
第三层,关键参数要有兜底。比如日期没解析出来,用默认值,同时在结果里注明用了默认值。这个提示要出现在最后回推的消息里,别藏在日志里。
企微消息自动处理真正难的地方就在这三层。少做一层,问题不会消失,只是换个时间冒出来。
企微消息自动处理走到这一步,机器人才像个能干活的同事,而不只是一个会说收到的东西。
还有一件小事要做,回推消息里的参数回显要跟群里说的一致。有的团队为了好看,参数在流程里转换过格式,回推的时候用转换后的值,人对不上号,第二次就不信这个机器人了。
结果回推怎么做
流程跑完了,结果要回到群里。这个环节看着最简单,实际最容易做得让人不想用第二次。
第一个坑是回得太晚。群里没人等的时候,回一条结果等于噪声。流程跑几分钟的,群里先回一句「已开始」,跑完再回正文。这个「已开始」还有个作用,人看到它知道消息被接住了。
第二个坑是回得太啰嗦。把整个结果表格贴群里没人看。回结论和关键数字,明细给一个能打开的链接或者文件。
第三个坑是失败了说不出为什么。回一句「执行失败」等于没回。失败也得有话,至少说清是哪一步、什么原因、大概要等多久再试。
第四个坑是群里人多的时候一条结果刷屏。这时候把结果发成一条引用原消息的回复,而不是新发一条。群里看着清爽,也更容易对上是哪次触发。
回推的形式有个选择值得考虑。是发一段文字,还是发一张卡片。卡片能放按钮,比如一个「重试」。按钮点了之后又是新一轮的消息触发。这一层做上去,消息触发才真正成了流程的入口,而不只是一个启动器。
权限和合规上的几条线
这一节比技术部分更该先看。
第一条,机器人的可见范围要跟消息里能出现的敏感程度匹配。一个能看见全员群消息的机器人,收到的消息里可能带合同号、客户名、金额。这些内容如果被写进了日志,而日志的访问范围比群还宽,那是把范围放大了。日志要脱敏,能看日志的人要比群成员少。
第二条,发出去的回推要注意密级。群里有多少人,机器人的回复就对多少人可见。流程里拿到的是明细,回推的时候只发结论,这个差别就是密级控制。
第三条,谁发的消息算数。群里的消息没有强身份,@机器人和闲聊长得很像。要触发敏感操作,最好要求特定格式或者走单聊,再加一层身份校验。
第四条,凭证别进聊天记录。webhook 地址、应用的 Secret、接口的 token,这些东西一旦被机器人当成参数回显了一次,就等于发到了群里,而且群里的历史消息随时能被翻出来。写代码的时候要有一道硬过滤,这类参数一律不进消息体,也不进日志。
第五条,留痕和留存期。触发记录、参数、结果、耗时,这些留多久,按公司制度定。聊天记录本身也在系统里存着,两边留存期不一致的时候,更要想清楚哪边是准的。
什么情况下别上
有几类情况,做消息触发这套东西的收益抵不过成本。
第一类,触发频次很低。如果一件事一个月发生一次,手动做更快。为了一个月一次的事去建回调、验签、接 token、写回推,投入的功夫比省下的多。
第二类,触发的人就是流程的执行者。如果是同一台机器上的定时任务在跑,前面多绕一圈消息,反而多了一个故障点。
第三类,把消息本身当数据载体。有人想用群消息传文件、传表格,把需求写在消息里给机器人读。这种用法在少量的时候还行,规模一大就撑不住,该走接口就走接口。
第四类,群里人员复杂且敏感。如果流程涉及审批、涉及权限变更,而触发它的群是个几百人的大群,这条路就不该走。
第五类,公司没有固定的办公平台,或者各团队各用各的。为某一个平台做了适配,换一个平台又要重写一遍,最后大部分场景还是手工。
把这几条排除掉,剩下的场景大概长这样。事情确实经常发生,发起的人不一定是开发,流程本身已经有一定规模,权限边界能说清楚。这时候消息触发能实实在在把人从「点按钮」里解放出来。
反过来,如果团队现在的流程还只有十几条、人工量也不大,先把手上的流程做稳更划算。
延伸阅读