关注公众号: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:创建应用

  1. 进入管理后台
  2. 应用管理 → 自建
  3. 创建应用
  4. 记录 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 测试企业微信机器人

  1. 启动服务
  2. 在企业微信中发送消息给机器人
  3. Claude 处理后返回结果
你: @机器人 写一个 Python 冒泡排序
机器人: [返回完整代码]

四、钉钉机器人接入

4.1 创建钉钉机器人

步骤1:创建机器人

  1. 进入钉钉开放平台 https://open.dingtalk.com/
  2. 应用开发 → 机器人
  3. 创建自定义机器人

步骤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}&timestamp={timestamp}&sign={sign}"
    data = {
        "msgtype": "text",
        "text": {"content": content}
    }

    requests.post(url, json=data)

五、飞书机器人接入

5.1 创建飞书机器人

  1. 访问 https://open.feishu.cn/
  2. 创建企业自建应用
  3. 添加机器人能力
  4. 获取 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? 👉 本文丝滑使用 weelinking,高性价比,全系模型支持 👈

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐