【openclaw+claude系列09】多平台制霸——微信、钉钉、飞书全渠道接入
前面都是用专门的客户端或手机 App 操控 AI,但对国内用户来说,微信、钉钉、飞书才是最常用的工具。本文手把手教你将 Claude 接入企业微信、钉钉、飞书三大国内主流平台,实现在日常工作软件中直接@机器人指挥 AI 干活。文章涵盖各平台机器人创建、消息适配器开发、统一消息网关设计,以及 Docker 一键部署方案。读完本文,你可以在任何常用 App 中随时随地调用 Claude,真正做到"一个
关注公众号:weelinking | 访问官网:weelinking.com
📅 发布日期:2026年02月14日
🏷️ 标签:多平台 | 机器人 | 企业微信
⏱️ 阅读时长:20分钟
📚 系列文章:手机指挥电脑干活系列 - 第9篇
📄 文章摘要
前面都是用专门的客户端或手机 App 操控 AI,但对国内用户来说,微信、钉钉、飞书才是最常用的工具。本文手把手教你将 Claude 接入企业微信、钉钉、飞书三大国内主流平台,实现在日常工作软件中直接@机器人指挥 AI 干活。文章涵盖各平台机器人创建、消息适配器开发、统一消息网关设计,以及 Docker 一键部署方案。读完本文,你可以在任何常用 App 中随时随地调用 Claude,真正做到"一个后端,多个入口"。
关键词: #企业微信 #钉钉 #飞书 #机器人 #weelinking
一、前言:用你最常用的 App 指挥 AI
前面都是用专门的客户端或手机 App。
但对于国内用户,有个问题:微信、钉钉、飞书才是最常用的工具。
如果能直接在微信里@一个机器人,让电脑上的 Claude 执行任务,那就太方便了!
这一篇我们实现:
- ✅ 企业微信机器人接入
- ✅ 钉钉机器人接入
- ✅ 飞书机器人接入
- ✅ 一个后端,多个入口
🔴 🔴 🔴 国内丝滑使用 Claude? 👉 本文全系使用 weelinking,全系模型支持 👈

二、整体架构
📱 微信 ─┐
📱 钉钉 ─┼─> 🌐 统一消息网关 ─> 💻 Claude ─> 🌐 网关 ─> 📱 返回对应平台
📱 飞书 ─┘
核心思想:
- 一个 Claude 服务
- 多个平台适配器
- 统一的消息格式
- 分平台返回结果
三、企业微信机器人接入
3.1 创建企业微信机器人
步骤1:注册企业微信
访问 https://work.weixin.qq.com/
- 免费注册企业(个人也可以)
- 完成基本信息填写
步骤2:创建应用
- 进入管理后台
- 应用管理 → 自建
- 创建应用
- 记录 AgentId 和 Secret
步骤3:配置接收消息
- 设置 API 接收消息
- 填写 URL (你的服务器地址)
- 配置 Token 和 EncodingAESKey
3.2 实现企业微信适配器
创建 wechat_adapter.py:
from flask import Flask, request
import xmltodict
import hashlib
from urllib.parse import parse_qs
import anthropic
from Crypto.Cipher import AES
import base64
import struct
API_KEY = "你的API_KEY"
client = anthropic.Anthropic(
api_key=API_KEY,
base_url="https://api.weelinking.com/v1"
)
class WechatWorkAdapter:
def __init__(self, token, encoding_aes_key, corp_id):
self.token = token
self.encoding_aes_key = encoding_aes_key
self.corp_id = corp_id
def verify_signature(self, signature, timestamp, nonce, echo_str):
"""验证签名"""
tmp_list = [self.token, timestamp, nonce, echo_str]
tmp_list.sort()
tmp_str = ''.join(tmp_list)
hash_obj = hashlib.sha1(tmp_str.encode('utf-8'))
return hash_obj.hexdigest() == signature
def decrypt_message(self, encrypt_msg):
"""解密消息"""
key = base64.b64decode(self.encoding_aes_key + "=")
cipher = AES.new(key, AES.MODE_CBC, key[:16])
decrypted = cipher.decrypt(base64.b64decode(encrypt_msg))
# 解析
content_len = struct.unpack("!I", decrypted[16:20])[0]
content = decrypted[20:20+content_len].decode('utf-8')
return content
def process_message(self, xml_data):
"""处理消息"""
data = xmltodict.parse(xml_data)
msg = data['xml']
if msg['MsgType'] == 'text':
user_message = msg['Content']
from_user = msg['FromUserName']
# 调用 Claude
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=2048,
messages=[{
"role": "user",
"content": user_message
}]
)
reply = response.content[0].text
# 返回 XML 格式
return f"""<xml>
<ToUserName><![CDATA[{from_user}]]></ToUserName>
<FromUserName><![CDATA[{msg['ToUserName']}]]></FromUserName>
<CreateTime>{msg['CreateTime']}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{reply}]]></Content>
</xml>"""
return "success"
app = Flask(__name__)
# 配置信息(从企业微信后台获取)
TOKEN = "your_token"
ENCODING_AES_KEY = "your_aes_key"
CORP_ID = "your_corp_id"
adapter = WechatWorkAdapter(TOKEN, ENCODING_AES_KEY, CORP_ID)
@app.route('/wechat', methods=['GET', 'POST'])
def wechat_handler():
if request.method == 'GET':
# 验证URL
signature = request.args.get('msg_signature')
timestamp = request.args.get('timestamp')
nonce = request.args.get('nonce')
echo_str = request.args.get('echostr')
if adapter.verify_signature(signature, timestamp, nonce, echo_str):
return echo_str
return "Invalid signature"
elif request.method == 'POST':
# 处理消息
xml_data = request.data.decode('utf-8')
reply = adapter.process_message(xml_data)
return reply
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
3.3 测试企业微信机器人
- 启动服务
- 在企业微信中发送消息给机器人
- Claude 处理后返回结果
你: @机器人 写一个 Python 冒泡排序
机器人: [返回完整代码]
四、钉钉机器人接入
4.1 创建钉钉机器人
步骤1:创建机器人
- 进入钉钉开放平台 https://open.dingtalk.com/
- 应用开发 → 机器人
- 创建自定义机器人
步骤2:配置 Webhook
- 获取 Webhook URL
- 配置加签密钥(推荐)
4.2 实现钉钉适配器
创建 dingtalk_adapter.py:
from flask import Flask, request, jsonify
import hmac
import hashlib
import base64
import time
import anthropic
API_KEY = "你的API_KEY"
client = anthropic.Anthropic(
api_key=API_KEY,
base_url="https://api.weelinking.com/v1"
)
app = Flask(__name__)
# 钉钉配置
DINGTALK_SECRET = "your_secret"
def verify_signature(timestamp, sign):
"""验证钉钉签名"""
secret_enc = DINGTALK_SECRET.encode('utf-8')
string_to_sign = f'{timestamp}\n{DINGTALK_SECRET}'
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(
secret_enc,
string_to_sign_enc,
digestmod=hashlib.sha256
).digest()
calculated_sign = base64.b64encode(hmac_code).decode('utf-8')
return calculated_sign == sign
@app.route('/dingtalk', methods=['POST'])
def dingtalk_handler():
"""处理钉钉消息"""
data = request.json
# 验证签名
timestamp = request.headers.get('timestamp')
sign = request.headers.get('sign')
if not verify_signature(timestamp, sign):
return jsonify({"errcode": -1, "errmsg": "Invalid signature"})
# 获取消息内容
if data.get('msgtype') == 'text':
user_message = data['text']['content']
# 去掉@机器人的部分
user_message = user_message.replace('@机器人', '').strip()
# 调用 Claude
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=2048,
messages=[{
"role": "user",
"content": user_message
}]
)
reply = response.content[0].text
# 返回钉钉格式
return jsonify({
"msgtype": "text",
"text": {
"content": reply
}
})
return jsonify({"errcode": 0, "errmsg": "ok"})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8001)
🔗 开始使用 Claude
文中的所有操作,你现在就可以上手。
推荐使用 weelinking 访问 Claude:
| 优势 | 说明 |
|---|---|
| 🇨🇳 国内直连 | 无需任何网络配置,打开即用 |
| 💰 按量付费 | 用多少花多少,不浪费 |
| 🎁 新用户福利 | 注册即送体验额度 |
| ⚡ 稳定可靠 | 账号池技术,不掉线 |
4.3 推送消息到钉钉
import requests
import time
import hmac
import hashlib
import base64
def send_to_dingtalk(content):
"""主动推送消息到钉钉"""
webhook = "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN"
secret = "YOUR_SECRET"
# 计算签名
timestamp = str(round(time.time() * 1000))
secret_enc = secret.encode('utf-8')
string_to_sign = f'{timestamp}\n{secret}'
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(
secret_enc,
string_to_sign_enc,
digestmod=hashlib.sha256
).digest()
sign = base64.b64encode(hmac_code).decode('utf-8')
# 发送请求
url = f"{webhook}×tamp={timestamp}&sign={sign}"
data = {
"msgtype": "text",
"text": {"content": content}
}
requests.post(url, json=data)
五、飞书机器人接入
5.1 创建飞书机器人
- 访问 https://open.feishu.cn/
- 创建企业自建应用
- 添加机器人能力
- 获取 App ID 和 App Secret
5.2 实现飞书适配器
创建 feishu_adapter.py:
from flask import Flask, request, jsonify
import json
import anthropic
API_KEY = "你的API_KEY"
client = anthropic.Anthropic(
api_key=API_KEY,
base_url="https://api.weelinking.com/v1"
)
app = Flask(__name__)
# 飞书配置
FEISHU_APP_ID = "your_app_id"
FEISHU_APP_SECRET = "your_app_secret"
@app.route('/feishu', methods=['POST'])
def feishu_handler():
"""处理飞书消息"""
data = request.json
# 处理验证请求
if data.get('type') == 'url_verification':
return jsonify({
"challenge": data.get('challenge')
})
# 处理消息
if data.get('header', {}).get('event_type') == 'im.message.receive_v1':
message = json.loads(data['event']['message']['content'])
user_message = message.get('text', '')
# 调用 Claude
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=2048,
messages=[{
"role": "user",
"content": user_message
}]
)
reply = response.content[0].text
# 返回飞书消息格式
return jsonify({
"msg_type": "text",
"content": json.dumps({"text": reply})
})
return jsonify({"code": 0})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8002)
5.3 飞书富文本消息
飞书支持更丰富的消息格式:
def send_card_message(title, content):
"""发送卡片消息"""
return jsonify({
"msg_type": "interactive",
"card": {
"header": {
"title": {
"tag": "plain_text",
"content": title
}
},
"elements": [
{
"tag": "div",
"text": {
"tag": "lark_md",
"content": content
}
}
]
}
})
六、统一网关设计
为了更好地管理多平台,创建统一网关:
from flask import Flask, request, jsonify
import anthropic
app = Flask(__name__)
API_KEY = "你的API_KEY"
client = anthropic.Anthropic(
api_key=API_KEY,
base_url="https://api.weelinking.com/v1"
)
class MessageGateway:
"""统一消息网关"""
@staticmethod
def process_message(user_message, platform, user_id):
"""处理消息,返回统一格式"""
# 调用 Claude
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=2048,
messages=[{
"role": "user",
"content": user_message
}]
)
reply = response.content[0].text
# 记录日志
print(f"[{platform}] User:{user_id} - {user_message[:50]}...")
return reply
@staticmethod
def format_response(reply, platform):
"""根据平台格式化响应"""
if platform == 'wechat':
return f"""<xml>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{reply}]]></Content>
</xml>"""
elif platform == 'dingtalk':
return {
"msgtype": "text",
"text": {"content": reply}
}
elif platform == 'feishu':
return {
"msg_type": "text",
"content": json.dumps({"text": reply})
}
return reply
gateway = MessageGateway()
# 企业微信接口
@app.route('/wechat', methods=['POST'])
def wechat():
xml_data = request.data.decode('utf-8')
# ... 解析 XML
reply = gateway.process_message(user_message, 'wechat', user_id)
return gateway.format_response(reply, 'wechat')
# 钉钉接口
@app.route('/dingtalk', methods=['POST'])
def dingtalk():
data = request.json
user_message = data['text']['content']
reply = gateway.process_message(user_message, 'dingtalk', 'dingtalk_user')
return jsonify(gateway.format_response(reply, 'dingtalk'))
# 飞书接口
@app.route('/feishu', methods=['POST'])
def feishu():
data = request.json
# ... 解析飞书消息
reply = gateway.process_message(user_message, 'feishu', user_id)
return jsonify(gateway.format_response(reply, 'feishu'))
if __name__ == '__main__':
app.run(host='0.0.0.0', port=9000)
七、Docker 一键部署
创建 Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY . .
EXPOSE 9000
CMD ["python", "unified_gateway.py"]
requirements.txt:
flask
flask-cors
anthropic
xmltodict
pycryptodome
requests
docker-compose.yml:
version: '3.8'
services:
claude-gateway:
build: .
ports:
- "9000:9000"
environment:
- API_KEY=你的API_KEY
- BASE_URL=https://api.weelinking.com/v1
volumes:
- ./logs:/app/logs
restart: unless-stopped
启动:
docker-compose up -d
八、使用场景
场景1:微信群里的代码助手
群成员: @Claude 帮我写个 Python 快速排序
Claude: [返回代码]
群成员: @Claude 解释一下这段代码
Claude: [详细解释]
场景2:钉钉工作群自动化
员工: @Claude 生成今日工作日报
Claude: [自动生成日报]
员工: @Claude 查看服务器状态
Claude: [返回监控数据]
场景3:飞书项目协作
成员: @Claude 分析这个 Bug
[贴上错误日志]
Claude: [分析问题,给出解决方案]
九、安全与权限
9.1 用户权限管理
ALLOWED_USERS = {
'wechat': ['user1', 'user2'],
'dingtalk': ['dept_admin'],
'feishu': ['*'] # 所有人
}
def check_permission(platform, user_id):
"""检查用户权限"""
allowed = ALLOWED_USERS.get(platform, [])
if '*' in allowed:
return True
return user_id in allowed
9.2 消息频率限制
from collections import defaultdict
import time
user_requests = defaultdict(list)
def rate_limit(user_id, max_requests=10, window=60):
"""频率限制"""
now = time.time()
# 清理过期记录
user_requests[user_id] = [
t for t in user_requests[user_id]
if now - t < window
]
if len(user_requests[user_id]) >= max_requests:
return False
user_requests[user_id].append(now)
return True
十、总结与下期预告
本期实现的功能
- ✅ 企业微信机器人接入
- ✅ 钉钉机器人接入
- ✅ 飞书机器人接入
- ✅ 统一消息网关
- ✅ Docker 一键部署
你现在可以
- 在微信里指挥 Claude
- 在钉钉群里协作开发
- 在飞书中自动化工作
- 一个后端,多平台使用
下期预告
第10篇:终极形态——安全加固、多设备协同与效率倍增秘籍
- 安全加固完整方案
- 多设备协同配置
- 20 个高频指令模板
- 故障排查指南
- 系列总结与展望
最后一篇,集大成之作!
🔗 开始使用 Claude
文中的所有操作,你现在就可以上手。
推荐使用 weelinking 访问 Claude:
| 优势 | 说明 |
|---|---|
| 🇨🇳 国内直连 | 无需任何网络配置,打开即用 |
| 💰 按量付费 | 用多少花多少,不浪费 |
| 🎁 新用户福利 | 注册即送体验额度 |
| ⚡ 稳定可靠 | 账号池技术,不掉线 |
🔜 下期预告
「终极形态——安全加固、多设备协同与效率倍增秘籍」
最后一篇,集大成之作!安全加固完整方案、多设备协同配置、20 个高频指令模板、故障排查指南、系列总结与展望——把整套系统打磨成生产级水准。
👉 点击关注,下篇第一时间通知你。
📖 推荐阅读
如果这篇对你有帮助,以下文章你也会喜欢:
- [Claude Skill 从入门到精通 - 第8篇:Skill 的分享与团队协作] — 团队协作的最佳实践
- [零基础用 Claude 开发应用 - 第5篇:用 Claude 开发一个聊天机器人] — 聊天机器人开发实战
- [产品经理用 Claude 实现产品 - 第5篇:用 Claude 搭建产品原型] — 产品原型快速搭建
📦 本篇配套资源
- ✅ 企业微信/钉钉/飞书机器人创建指南
- ✅ 三大平台适配器完整源码
- ✅ 统一消息网关源码
- ✅ Docker 一键部署配置文件
- 📷 需补充:各平台机器人配置截图
📖 推荐阅读
如果这篇对你有帮助,以下文章你也会喜欢:
- Claude Code 省 Token 终极指南:从烧钱到精打细算 — 接了
weelinking按量付费,做到终极省钱 - CC Switch 完全安装指南:5 分钟配置好 Claude Code 的多 API 切换神器,全程接入 weelinking — 可以丝滑无缝切换多平台的API
- 把 Claude Code 用成工程工具:8 条黄金法则与一套可复用工作流 — CC Switch 配置好之后,这 8 条法则能让你的 Claude Code 效率再翻一倍
🔴 🔴 🔴 国内廉价稳定使用 Claude? 👉 本文丝滑使用 weelinking,高性价比,全系模型支持 👈
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)