企业微信二次开发实战:如何构建支持多种消息类型的企业微信机器人
最近做的企微二开,要做一个"全能机器人"——能收发文本、图片、文件、链接卡片、富文本、小程序消息,能根据不同场景回不同类型。和之前聊的富媒体消息处理不同,这篇聊的是机器人整体架构——怎么让一个机器人灵活支持多种消息类型,而不是每加一种类型改一次代码。把架构设计记下来。
底层用的是 Eyun 平台开放的企微 API,承接各类消息收发,本文重点不在调接口,在"支持多消息类型的机器人怎么架构"。
能力注册:插件化
机器人不能把所有消息处理逻辑写在一个文件里,要插件化。每种消息类型一个处理器,注册到机器人:
class TextHandler:
msg_type = "text"
def handle(self, msg, context):
# 文本处理逻辑
return reply
class ImageHandler:
msg_type = "image"
def handle(self, msg, context):
# 图片OCR加理解
return reply
class FileHandler:
msg_type = "file"
def handle(self, msg, context):
# 文件下载加处理
return reply
robot.register(TextHandler())
robot.register(ImageHandler())
robot.register(FileHandler())
插件化让加新消息类型只加一个 handler 类,不动核心。最早所有逻辑写一起,加一种消息类型改半天,还容易碰坏别的。
消息处理管道
消息进来不是直接丢给 handler,要走管道:
接收 → 归一化 → 识别类型 → 分发到handler → handler处理 → 回复策略 → 发送
每个环节独立:
-
归一化:各类型消息转成统一结构
-
识别类型:按 msg_type 找对应 handler
-
分发:找不到 handler 的走默认
-
回复策略:决定回什么类型(文本/图片/卡片)
管道让每个环节可替换、可插拔。比如加敏感词过滤,在"回复策略"前插一个 filter 节点就行。
多类型回复策略
机器人回复不能总是文本。要根据场景回不同类型:
-
简单问答:文本回复
-
产品介绍:图文卡片(图片加标题加链接)
-
文件发送:文件消息
-
操作引导:富文本带按钮
-
数据报表:图片(图表截图)
回复策略配置化:
reply_strategy 表:
scene "product_intro"
reply_type "rich_card"
template "product_card_template"
variables ["product_name", "price", "image_url"]
策略表配好场景和回复类型,机器人按场景选模板构造回复。不做策略配置,所有回复都是文本,产品介绍没有图片不够直观,操作引导没有按钮要员工手动找入口。关于多类型消息构造和发送,可以看Eyun 开发文档。
消息类型兼容性
不同端对消息类型支持不同:
-
企微客户端:全类型支持
-
微信客户端(外部客户):部分卡片不支持
-
低版本:基础类型
机器人发消息前检测接收方客户端能力,不支持就降级。降级规则配置化:
compatibility 表:
msg_type "rich_card"
min_client_ver "3.0"
fallback_type "text_with_link"
不做兼容性,外部客户在微信里看到"收到不支持的卡片",体验崩。
机器人配置化
机器人能力要可配置,不是写死:
-
开关:某些 handler 可启停
-
优先级:多 handler 命中时的顺序
-
限流:每种消息类型的处理并发上限
-
超时:单类型处理超时阈值
配置化让运营调机器人能力不用发版。比如某段时间图片处理服务挂了,关掉 ImageHandler,图片消息回"图片处理暂不可用",不影响其他类型。
写在最后
多消息类型机器人这套东西,难点不在调各类型发送接口,在插件化架构、处理管道、回复策略、兼容降级、配置化这些工程细节。每一项都不深奥,但少做一项机器人就僵硬或者出兼容问题。这套搭扎实,机器人真能灵活收发多种类型消息——而不是只会发文本的半成品。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)