🚀 企业微信长连接来了!
一套代码生成三平台智能助手,内网也能跑
📝 干货满满,建议先收藏再看!
🔥 重磅更新
企业微信 5.0.7 版本(2025年3月更新)正式支持智能机器人 API 模式长连接!
这是企业微信近3年来最大规模的更新之一,开发者终于可以无需公网IP、无需域名,直接通过 WebSocket 长连接接入智能机器人!
✅ 无需公网IP —— 内网环境也能接入
✅ 无需域名备案 —— 省去繁琐配置流程
✅ 低延迟响应 —— 消息实时推送,毫秒级到达
✅ 流式消息 —— 支持 AI 流式输出,体验更佳
🎉 官方 SDK 支持
企业微信官方提供了两种语言的 SDK,开发者可以快速接入:
| Node.js | Python | 其他语言 |
aibot-node-sdk |
aibot-python-sdk |
自行实现 WebSocket |
创建机器人时选择 "API模式" → "使用长连接",即可获取 Bot ID 和 Secret!
🏢 真实场景
你是一家 SaaS 服务商,为客户提供智能客服/运维助手服务:
- 客户 A 用飞书,需要接入飞书机器人
- 客户 B 用钉钉,需要接入钉钉机器人
- 客户 C 用企业微信,需要接入企业微信机器人
每个客户都要一套独立的机器人?
🤯 维护成本爆炸?代码重复率 80%?
💡 本文教你用一套核心代码 + 多适配器,优雅搞定多平台接入!
🎯 一、企业微信智能机器人:长连接 vs Webhook
企业微信智能机器人支持两种 API 模式接收消息回调:
1.1 为什么选择长连接模式?
对于智能助手场景,长连接模式有明显优势:
- 🚀 低延迟:复用已建立的长连接,消息实时推送
- 🔒 更安全:无需暴露公网地址,避免被攻击风险
- 🛠 更简单:无需处理消息加解密,开发效率提升
- 📊 更实时:支持流式消息,用户体验更好
1.2 适用场景
官方推荐使用 WebSocket 长连接方式的场景:
- 无公网 IP:开发者服务部署在内网环境,无法配置公网可访问的回调 URL
- 高实时性要求:需要更低的消息延迟
- 简化开发:无需处理消息加解密逻辑
🏗 二、多渠道架构设计
我们的目标是:一套核心代码,支持飞书、钉钉、企业微信三个平台。
2.1 核心设计理念
整个架构遵循"关注点分离"原则:
- 适配器层:只负责消息收发,不包含业务逻辑
- 后端服务层:处理所有业务逻辑,与IM平台无关
- 数据层:存储日志、配置、知识库等
2.2 两个项目的关系
| 项目 | 定位 | 适用场景 |
|---|---|---|
| chatbot-service | 全功能单体应用 | 开发测试、功能迭代 |
| im-adapter-service | 轻量级适配器 | 生产环境、Kubernetes部署 |
🔌 三、企业微信长连接实现
3.1 核心代码实现
使用官方 Python SDK 实现企业微信长连接:
# 安装官方 SDK
# pip install aibot-python-sdk
from aibot import AIBot, AIBotOptions
class WeComAdapter:
def __init__(self, bot_id: str, secret: str, message_handler):
self.bot = AIBot(AIBotOptions(
bot_id=bot_id,
secret=secret,
))
self.message_handler = message_handler
self._register_handlers()
def _register_handlers(self):
@self.bot.on("authenticated")
def on_authenticated():
logger.info("[WeCom] 认证成功")
@self.bot.on("message.text")
async def on_text_message(frame):
await self._handle_text_message(frame)
async def _handle_text_message(self, frame):
body = frame.get("body", {})
text_content = body.get("text", {}).get("content", "")
req_id = frame.get("headers", {}).get("req_id")
response = await self.message_handler(text_content)
await self.bot.respond_msg(req_id, {
"msgtype": "stream",
"stream": {
"id": generate_stream_id(),
"finish": True,
"content": response
}
})
async def start(self):
await self.bot.start()
3.2 流式消息机制
流式消息通过 stream.id 进行关联,实现类似 ChatGPT 的打字效果:
📝 流式消息流程
- 发送流式消息:首次使用某个 stream.id,创建新的流式消息
- 刷新流式消息:继续使用相同的 stream.id,更新消息内容
- 完成流式消息:设置
finish=true,消息不再可更新
⚠️ 注意:从首次发送开始,需在 6分钟内 完成所有刷新并设置 finish=true,否则消息将自动结束。
3.3 支持的消息类型
长连接模式支持以下消息类型的回调:
| 消息类型 | msgtype | 说明 |
|---|---|---|
| 文本消息 | text |
用户发送的文本内容 |
| 图片消息 | image |
用户发送的图片,仅支持单聊 |
| 语音消息 | voice |
用户发送的语音(转为文本),仅支持单聊 |
| 文件消息 | file |
用户发送的文件,仅支持单聊 |
| 视频消息 | video |
用户发送的视频,仅支持单聊 |
| 图文混排 | mixed |
用户发送的图文混排内容 |
🚀 四、Kubernetes 部署架构
生产环境采用 单Pod多容器 架构:
4.1 部署优势
- 📦 镜像复用:一个镜像支持多个平台,减少维护成本
- ⚖️ 独立扩展:每个容器可独立扩缩容
- 🔒 故障隔离:一个平台出问题不影响其他平台
- 📊 资源控制:每个容器有独立的资源限制
4.2 重要注意事项
⚠️ 连接数量限制:每个智能机器人同一时间只能保持一个有效的长连接。
当同一个机器人发起新的连接请求时,新连接会踢掉旧连接。如果需要实现高可用,建议采用主备切换模式而非同时多连接。
4.3 频率限制
- 收到消息回调后,24小时内可以往该会话回复消息
- 给某个会话发消息的限制:30条/分钟,1000条/小时
- 心跳间隔:建议每 30秒 发送一次
📊 五、数据流详解
一条消息的完整旅程:
🎉 六、总结
通过本文,我们实现了:
- ✅ 企业微信长连接:无需公网IP,低延迟,更安全
- ✅ 多渠道统一:一套代码支持飞书、钉钉、企业微信
- ✅ Kubernetes部署:单Pod多容器,独立扩展
- ✅ 流式消息:更好的用户体验
🎯 核心收益
开发效率
↑ 50%
消息延迟
↓ 70%
维护成本
↓ 60%
一套代码,三个平台,无限可能
📚 参考链接
- 企业微信智能机器人长连接官方文档
- 企业微信智能机器人开发指南
- 官方 SDK:
aibot-node-sdk/aibot-python-sdk
💬 有问题?欢迎在评论区留言讨论!
如果这篇文章对你有帮助,别忘了点赞和收藏哦!