企业微信机器人 ↔ 扣子智能体 桥接服务程序WeCom-Coze Bridge

WeCom-Coze Bridge

企业微信机器人 ↔ 扣子智能体 桥接服务

概述

WeCom-Coze Bridge 是一个纯 Go 后端服务,用于将企业微信智能机器人 的消息转发至扣子(Coze)智能体,并将扣子的回复实时返回给企业微信用户。

支持企业微信智能机器人的两种对接方式:

  • 长连接模式(WebSocket) --- 通过 WebSocket 与企业微信保持长连接,实时接收和回复消息
  • 回调模式(HTTP) --- 通过企业微信回调 URL 接收消息,使用 response_url HTTP POST 回复

功能特性

  • 🔁 双模式支持:长连接 / 回调模式,灵活适配不同网络环境
  • 💬 多轮对话 :基于扣子 conversation_id 维持会话上下文
  • 流式回复:支持企业微信流式消息格式,实时推送回复内容
  • 💭 思考中动画 :收到消息后立即显示 <think></think>(企业微信原生渲染为跳动小点),扣子返回后自动更新气泡
  • 🔗 自动重连:长连接模式支持指数退避重连(可配置重试次数和延迟)
  • 💓 心跳保活 :WebSocket 心跳 ping/pong,间隔可配置
  • 🔐 消息加解密:回调模式支持 AES-256-CBC 加解密和 SHA1 签名验证
  • 📊 状态查询:内置 HTTP API 提供健康检查和桥接运行状态

技术栈

组件 技术
语言 Go 1.24
WebSocket gorilla/websocket
HTTP net/http(标准库)
加解密 crypto/aes + crypto/cipher(AES-256-CBC)

快速开始

前置条件

  • Go 1.24+
  • 已发布的扣子智能体(Coze Bot)
  • 企业微信机器人(智能机器人类型)

配置

  1. 复制配置模板并填入真实凭据:
bash 复制代码
cp config.example.json config.json
  1. 编辑 config.json,填入必要的配置项:
json 复制代码
{
  "connection_mode": "long_connection",
  "port": "5000",
  "wecom": {
    "bot_id": "your-wecom-bot-id",
    "secret": "your-wecom-secret"
  },
  "coze": {
    "workload_api_token": "your-coze-api-token",
    "bot_id": "your-coze-bot-id"
  }
}

⚠️ config.json 包含真实凭据,已被 .gitignore 排除,不会提交到版本库。

构建与运行

bash 复制代码
# 本地构建
go build -o wecom2coze .

# 运行
./wecom2coze

跨平台编译(Windows → Linux amd64):

powershell 复制代码
$env:GOOS="linux"; $env:GOARCH="amd64"; go build -o wecom2coze .

配置文件字段说明

JSON 路径 必填 说明
connection_mode 连接模式:callbacklong_connection
port 服务端口,默认 5000
wecom.bot_id 长连接 企业微信机器人 Bot ID
wecom.secret 长连接 企业微信机器人 Secret
wecom.callback_token 回调 回调 Token
wecom.callback_encoding_aes_key 回调 回调 EncodingAESKey(43位)
coze.workload_api_token 扣子 API Token
coze.bot_id 扣子智能体 Bot ID
coze.api_base_url 扣子 API 地址,默认 https://api.coze.cn
project_domain_default 对外域名(回调 URL 生成用)
bridge.auto_start 是否自动启动桥接,默认 false
bridge.reconnect_max_retries 最大重连次数,默认 10
bridge.reconnect_base_delay_sec 重连基础延迟秒数,默认 2
bridge.heartbeat_interval_sec 心跳间隔秒数,默认 20
bridge.coze_chat_timeout_sec 扣子对话超时秒数,默认 120
bridge.coze_poll_interval_ms 扣子轮询间隔毫秒数,默认 1000

HTTP API

路径 方法 说明
/ GET 根路径,返回服务名称、版本和状态
/health GET 健康检查,返回 {"status":"ok","mode":"..."}
/api/status GET 桥接状态详情(连接状态、消息/错误计数、最后活动时间等)
/api/wecom/callback GET 企业微信回调 URL 验证
/api/wecom/callback POST 企业微信回调消息接收

项目结构

复制代码
├── main.go                  # 入口:加载配置、启动桥接和 HTTP 服务
├── config.json              # 实际配置(含真实凭据,被 .gitignore 排除)
├── config.example.json      # 配置模板(占位符,可提交到版本库)
├── .gitignore               # 版本忽略规则
├── go.mod                   # Go 模块定义
├── README.md                # 本文件
├── config/
│   └── config.go            # 配置加载(从 config.json 读取,支持默认值)
├── types/
│   └── types.go             # 类型定义(Config、消息体、流式响应等)
├── wecomcrypto/
│   └── crypto.go            # 企业微信消息加解密(AES-256-CBC + SHA1 签名)
├── wecom/
│   └── longconn.go          # 长连接 WebSocket 客户端
├── coze/
│   └── bot.go               # 扣子智能体 API 客户端(流式对话 /v3/chat)
├── bridge/
│   └── bridge.go            # 桥接核心:消息路由、会话管理、流式回复
└── server/
    └── server.go            # HTTP 服务器(回调/健康检查/状态查询)

架构说明

消息流程

复制代码
企业微信用户
    │
    ├── [长连接模式] ──→  wss://openws.work.weixin.qq.com
    │                      │
    │                      ▼
    │                  wecom/longconn.go ──→ bridge/bridge.go ──→ coze/bot.go ──→ 扣子 API
    │                      │                                              │
    │                      ◄──────── 流式回复 (WebSocket) ────────────────┘
    │
    └── [回调模式]  ──→  HTTP POST /api/wecom/callback
                           │
                           ▼
                       server/server.go ──→ bridge/bridge.go ──→ coze/bot.go ──→ 扣子 API
                           │                                              │
                           ◄────── 流式回复 (response_url HTTP POST) ─────┘

思考中动画机制

收到用户消息后,桥接器立即发送 <think></think> 流帧(finish=false),企业微信原生将其渲染为三个跳动的小点。待扣子返回实际回复后,发送 finish=true 的流帧更新同一气泡内容。两种模式下均支持此机制。

部署建议

  • 生产环境 :建议使用回调模式,长连接在云端服务器可能不稳定
  • 回调 URL :需在企业微信后台配置为 https://{域名}/api/wecom/callback
  • 回调通信:使用 JSON 格式(智能机器人,非 XML)
  • 消息回复 :优先使用 response_url HTTP POST
  • 扣子 Bot:必须已发布才能通过 API 调用
  • 会话存储:会话映射存储在内存中,服务重启后丢失

开发

编译命令速查

bash 复制代码
# Windows 本地构建
go build -o wecom2coze .

# Linux amd64 交叉编译
$env:GOOS="linux"; $env:GOARCH="amd64"; go build -o wecom2coze .

# Linux 服务器运行
chmod +x wecom2coze
./wecom2coze

下载地址

企业微信机器人与扣子智能体桥接程序(WeCom-Coze Bridge)

相关推荐
沐梯子9 小时前
具身智能爆发前夜的“数据饥渴”:2026机器人数据采集产业链选型解析
大数据·人工智能·机器人
消失的旧时光-194311 小时前
第 5 篇:Android 与机器人主控之间,指令、回执、超时和重试怎么设计?
机器人·tcp通信·ack·sequence
YFJ_mily15 小时前
【紧急截稿提醒】MRCS 2026第三届机电一体化、机器人与控制系统国际会议|EI/Scopus双检索|9月11日截止投稿
机器人·工业自动化·机器人控制·机电一体化·控制系统·rdlink研发家·驻马店会议
别动我齐刘海15 小时前
机器学习基础2——C++、OpenCV、点云、Open3D
c++·人工智能·opencv·机器学习·计算机视觉·机器人·ros2
梦想的旅途215 小时前
企业微信API实战:外部群定时群发与SOP自动推送指南
企业微信
圣殿骑士-Khtangc16 小时前
Go-Map面试核心考点从哈希冲突到并发安全的完整解析
面试·golang·哈希算法
worxfr16 小时前
Go 并发控制:从 Channel 方向约束到实战模式
开发语言·后端·golang
消失的旧时光-194316 小时前
第 4 篇:TCP 字节流中的粘包、半包与机器人协议解析
机器人·tcp·通信协议·半包·粘包
某林21217 小时前
从“仿真能跑”到“真机能走”:一套轮腿机械狗强化学习系统的工程化实践
人工智能·stm32·嵌入式硬件·架构·机器人·机械狗
xcLeigh17 小时前
Go入门:短变量声明的陷阱与最佳实践
java·redis·golang·教程·变量