首页 / 博客 / 机器人·功能实战

微信消息转发到钉钉飞书企业微信

分类:机器人·功能实战 · 标签:微信消息转发钉钉、微信转发飞书企业微信、个人微信API对接

前言

企业日常运营中,客户询问往往集中在个人微信,而内部协作却依赖钉钉、飞书或企业微信。消息被割裂在两套系统里,客服人员需要反复切屏复制,漏单、延迟响应屡见不鲜。把个人微信消息实时同步转发到团队IM,是打通"外部触达"与"内部协作"的核心环节。本文详解整套技术方案,从原理到代码,帮你把这条链路真正跑通。

整体架构与转发原理

微信本身没有官方 Webhook,无法直接向外推送消息。要实现"收到微信消息 → 自动转发到钉钉/飞书/企业微信",需要在中间层引入一个能稳定监听微信消息的 API 网关。

WechatApi 正是为此场景设计的个人微信 HTTP API 服务,基于 iPad 协议 实现,无需安装任何客户端插件,通过标准 HTTP 接口即可订阅微信账号的实时消息事件。

整个转发链路分三段:

  1. 监听层:WechatApi 的 Webhook 回调,将个人微信收到的每一条消息以 JSON 格式推送到你指定的服务器地址。
  2. 中转层:你自己的业务服务器(可以是一个轻量的 Python/Node.js 脚本)接收回调、解析消息类型、按规则路由。
  3. 投递层:调用钉钉、飞书或企业微信的 Webhook 机器人接口,将消息发出去。
个人微信账号
    │  (iPad 协议登录,实时同步消息)
    ▼
WechatApi 消息服务器
    │  (HTTP Webhook 回调)
    ▼
你的中转服务器 (Python/Node/Go 均可)
    │
    ├──→ 钉钉群机器人 Webhook
    ├──→ 飞书群机器人 Webhook
    └──→ 企业微信群机器人 Webhook

这个架构的优势是解耦:微信侧、中转侧、目标 IM 侧可以独立升级,不互相依赖。

第一步:WechatApi 登录与 Webhook 配置

1.1 注册并获取 AppId

前往 WechatApi 控制台 完成注册,创建设备实例后会分配一个 appId(设备 ID)。这是后续所有 API 调用的核心标识,代表一个已登录的微信账号。

请求鉴权统一使用请求头 VideosApi-token,值为你的 API 密钥,所有接口均为 HTTP POST + JSON Body。

1.2 扫码登录微信账号

调用登录接口获取二维码,用手机扫描即可将个人微信绑定到该 appId。完成登录后,账号进入在线状态,消息监听随即启动。

1.3 配置消息回调地址

在控制台"Webhook 设置"中填入你的回调 URL(必须公网可访问的 HTTPS 地址)。WechatApi 会将该账号收到的消息实时 POST 到这个地址。

典型回调 Payload 结构如下:

json{
  "appId": "wx_device_abc123",
  "msgType": "text",
  "fromUser": "wxid_xxxxxxxx",
  "fromUserNick": "张三",
  "toUser": "wxid_yyyyyyyy",
  "roomId": "12345678901@chatroom",
  "content": "这个方案价格怎么算?",
  "createTime": 1718000000
}

字段说明:

字段类型含义
appIdstring设备 ID,标识哪个微信账号收到消息
msgTypestring消息类型:text/image/voice/video/file/link 等
fromUserstring发送方微信 ID
fromUserNickstring发送方昵称
roomIdstring群聊 ID(以 @chatroom 结尾);私聊时为空
contentstring文本内容;其他类型为媒体 URL 或描述
createTimeint消息时间戳(Unix 秒)

第二步:中转服务器实现消息路由

中转服务器是整套方案的核心。它需要做三件事:接收 WechatApi 的 Webhook 回调、判断消息来源和类型、按规则推送到对应的目标 IM。

以下是一个 Python Flask 实现示例,展示完整的路由逻辑:

pythonfrom flask import Flask, request, jsonify
import requests

app = Flask(__name__)

# 钉钉/飞书/企业微信机器人 Webhook(填入各自平台生成的地址)
DINGTALK_WEBHOOK = "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN"
FEISHU_WEBHOOK   = "https://open.feishu.cn/open-apis/bot/v2/hook/YOUR_HOOK_ID"
WECOM_WEBHOOK    = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY"

# 按群聊 ID 路由到不同目标(可扩展为数据库配置)
ROOM_ROUTE = {
    "11111111111@chatroom": "dingtalk",   # 销售群 → 钉钉
    "22222222222@chatroom": "feishu",     # 客服群 → 飞书
    "33333333333@chatroom": "wecom",      # 运营群 → 企业微信
}

def send_to_dingtalk(text: str):
    payload = {"msgtype": "text", "text": {"content": text}}
    requests.post(DINGTALK_WEBHOOK, json=payload, timeout=5)

def send_to_feishu(text: str):
    payload = {"msg_type": "text", "content": {"text": text}}
    requests.post(FEISHU_WEBHOOK, json=payload, timeout=5)

def send_to_wecom(text: str):
    payload = {"msgtype": "text", "text": {"content": text}}
    requests.post(WECOM_WEBHOOK, json=payload, timeout=5)

@app.route("/wechat-callback", methods=["POST"])
def wechat_callback():
    data = request.get_json(silent=True) or {}
    msg_type  = data.get("msgType", "")
    room_id   = data.get("roomId", "")
    nick      = data.get("fromUserNick", "未知用户")
    content   = data.get("content", "")

    # 目前只处理文本消息;其他类型可按需扩展
    if msg_type != "text" or not content:
        return jsonify({"ret": 200, "msg": "skip"})

    text = f"[微信消息] 来自:{nick}\n群:{room_id or '私聊'}\n内容:{content}"

    target = ROOM_ROUTE.get(room_id, "dingtalk")   # 默认发钉钉
    if target == "dingtalk":
        send_to_dingtalk(text)
    elif target == "feishu":
        send_to_feishu(text)
    elif target == "wecom":
        send_to_wecom(text)

    return jsonify({"ret": 200, "msg": "ok"})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8080)

几个关键设计点值得注意:

第三步:各平台机器人接入细节

钉钉群机器人

在钉钉群"群设置 → 机器人 → 添加机器人"中选择"自定义",创建后得到 Webhook URL。如果开启了安全设置中的"关键词"校验,确保转发的消息文本包含该关键词,否则会返回 400 拒绝。

钉钉 Webhook 支持的消息类型有 text、markdown、link、actionCard、feedCard,大多数场景用 markdown 格式转发微信消息效果最好,可以加粗来源、加时间戳等。

飞书群机器人

飞书在群"设置 → 机器人"中添加自定义机器人,同样获得 Webhook URL。飞书支持 text、post(富文本)、interactive(卡片消息)三种格式。

用卡片消息转发时视觉效果更好,可以把发送人昵称、消息时间、内容分区展示,阅读体验接近原生通知。但卡片消息的 JSON 结构较复杂,初期可以先用 text 快速跑通,再迭代成卡片。

企业微信群机器人

企业微信群机器人的接入与钉钉类似,在群"...→ 添加群机器人"处创建,得到 Webhook Key。企业微信支持 text、markdown、image、news、file 类型,markdown 格式可以加粗、分行,适合转发结构化信息。

注意企业微信对消息频率有限制:同一机器人每分钟最多 20 条,每小时 600 条。如果微信群消息量大,需要做队列或合并推送,避免触发频率限制导致消息丢失。

第四步:调用 WechatApi 主动发送消息(双向联动)

单向转发解决了"看到消息"的问题,但如果要实现"在钉钉/飞书里回复后,消息发回微信",还需要调用 WechatApi 的发送接口。

WechatApi 的 微信API对接 能力包括发送文本、图片、文件、名片、链接卡片等,全部通过 HTTP POST 完成:

bashcurl -X POST https://api.wechatapi.net/message/send \
  -H "VideosApi-token: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "appId": "wx_device_abc123",
    "toUser": "wxid_xxxxxxxx",
    "msgType": "text",
    "content": "您好,已收到您的咨询,稍后为您跟进。"
  }'

返回体统一格式:

json{
  "ret": 200,
  "msg": "发送成功",
  "data": {
    "msgId": "msg_9876543210",
    "createTime": 1718000100
  }
}

ret 为 200 代表成功,非 200 时 msg 字段会说明原因(如账号掉线、目标用户不存在等),业务层需要根据 ret 做重试或告警逻辑。

结合这个发送接口,可以在飞书/钉钉/企业微信的机器人回调里解析回复内容,再调用 WechatApi 把回复投递到对应的微信用户或群,实现真正的双向消息联动。这对客服、销售跟进等场景极为实用,运营人员无需打开微信,在团队 IM 里就能完成所有对话。

消息类型处理与特殊场景

实际接入时,除文本消息外还会遇到以下类型,需要单独处理:

图片/视频消息:WechatApi 回调中会包含媒体文件的临时下载 URL,有效期通常较短(数分钟到数小时)。中转服务器收到后应立即下载到本地或转存 OSS,再生成持久链接转发到目标 IM,避免链接过期后无法查看。

语音消息:微信语音为 AMR 格式,大部分 IM 平台不能直接播放。转发时可以选择:① 说明"收到一条语音消息,请到微信查看";② 调用语音转文字服务(如阿里云 ASR)后转发文字;③ 把 AMR 文件转 MP3 后上传到目标平台。

文件消息:转发下载链接或文件名+大小即可,大文件直接透传会占用大量带宽。

小程序/链接卡片:提取标题和 URL 以文本或 markdown 格式转发,无法还原卡片样式,但关键信息不丢失。

群@消息:content 字段里会包含 @all@wxid_xxxx 标记,转发时注意过滤或替换,避免在目标 IM 里产生误 @ 。

对于需要精细化管理微信群消息的场景,WechatApi 还提供了完整的微信群管理机器人能力,支持按关键词过滤、自动分类、群成员管理等,可以在转发之前做更丰富的消息预处理。

部署与稳定性注意事项

公网地址与 HTTPS:WechatApi 的 Webhook 回调要求接收端是公网可访问的 HTTPS 地址。如果在本地开发测试,可以用 ngrok 或 frp 临时暴露端口;生产环境建议部署在有公网 IP 的云服务器上,配置 Nginx + Let's Encrypt 证书。

幂等与去重:网络抖动时 WechatApi 可能重发同一条消息回调。中转服务器需要记录已处理的消息 ID(存 Redis 或数据库),收到重复 msgId 时直接返回 200 跳过,避免在目标 IM 出现重复推送。

账号在线保活:iPad 协议账号长时间不活跃可能掉线。WechatApi 自身有心跳机制,但建议在控制台开启"掉线自动重连",并在中转服务器里订阅账号状态变更回调,掉线时触发告警通知到钉钉/飞书,让运维第一时间感知。

日志与监控:每条消息的接收时间、转发目标、投递结果都应落日志。建议按天切割日志文件,保留 30 天,方便排查丢消息问题时做时间线还原。

限流与队列:高并发场景(如大促期间客户消息突增)下,建议在中转层加入消息队列(RabbitMQ、Redis Stream 均可),异步消费后再投递,避免因下游 IM Webhook 抖动导致消息堆积或丢失。

小结

微信消息转发到钉钉、飞书、企业微信的核心是:用 WechatApi 打通个人微信的消息监听能力,再用一个轻量中转服务做路由分发。整套链路技术门槛不高,一个 Python 脚本就能跑通基础流程,真正的工程量在于消息类型的完整覆盖、幂等去重、限流保活等稳定性细节。

WechatApi 基于 iPad 协议 实现,相比 Hook 注入方案更稳定,支持多账号并行,适合有一定消息量的企业级场景。如果你的业务需要更进一步,比如自动回复、客户标签、跟进提醒,可以进一步参考 微信二次开发 相关能力,在这套转发基础上叠加更多自动化逻辑,把个人微信真正纳入企业数字化运营体系。

想动手试试?

WechatApi 提供扫码登录、消息收发、好友与群管理等 REST 接口,注册后几分钟跑通。

立即免费注册查看开发文档

相关产品页

🔗 个人微信API(产品页)🔗 微信二次开发(产品页)🔗 微信机器人开发(产品页)

相关文章

30 分钟做一个微信自动回复机器人(完整实战)微信机器人接入 GPT,实现智能自动回复微信群管理机器人开发实战:自动迎新、答疑、踢人微信客服机器人怎么做?7×24自动应答+转人工方案
© 2025 WechatApi · 企业级微信智能机器人接入平台
官网价格帮助文档博客
苏ICP备2024128799号 · 苏ICP备2023038368号