OpenClaw接入飞书

吴书松
吴书松
发布于 2026-03-10 / 1 阅读
0
0

OpenClaw接入飞书

飞书机器人接入详细步骤

第一步:创建飞书应用

  1. 访问飞书开放平台

  2. 创建新应用

    • 点击"创建应用" → 选择"机器人"

    • 填写应用信息:

      应用名称:OpenClaw助手
      应用描述:AI助手服务
      应用图标:上传合适的图标
      开发者邮箱:你的邮箱
      
  3. 选择应用类型

    • 选择"内部应用"(企业内部使用)

    • 或"应用商店应用"(公开应用)

第二步:配置基础信息

  1. 应用信息设置

    应用名称:OpenClaw助手
    应用描述:基于OpenClaw的AI智能助手
    应用图标:上传PNG格式图标
    
  2. 获取凭证信息

    • App ID:cli_xxx 格式

    • App Secret:xxx 格式

    • Verification Token:随机生成的字符串

第三步:配置权限

  1. 添加权限

    im:message - 消息发送
    im:robot - 机器人权限
    im:message_group - 群组消息
    im:contact - 联系人权限
    
  2. 设置权限范围

    • 选择"应用可见范围"

    • 添加需要使用机器人的部门或用户

第四步:配置事件订阅

  1. 添加事件订阅

    事件类型:im.message.receive_v1
    处理方式:HTTP回调
    回调URL:https://你的域名/feishu-webhook
    
  2. 添加其他事件

    im.message.send_v1 - 消息发送事件
    im.chat.member_added_v1 - 成员加入事件
    

第五步:开发服务器端代码

创建 feishu_bot.py 文件:

import os
import hashlib
import hmac
import json
import requests
from flask import Flask, request, jsonify

app = Flask(__name__)

# 配置信息
APP_ID = "cli_xxx"
APP_SECRET = "xxx"
VERIFICATION_TOKEN = "your_verification_token"
BOT_NAME = "OpenClaw助手"

def verify_signature(request):
    """验证飞书请求签名"""
    signature = request.headers.get('X-Signature')
    timestamp = request.headers.get('X-Timestamp')
    
    if not signature or not timestamp:
        return False
    
    # 签名验证逻辑
    sign_string = f"{timestamp}\n{VERIFICATION_TOKEN}"
    expected_signature = hmac.new(
        APP_SECRET.encode('utf-8'),
        sign_string.encode('utf-8'),
        hashlib.sha256
    ).hexdigest()
    
    return signature == expected_signature

@app.route('/feishu-webhook', methods=['POST'])
def handle_webhook():
    """处理飞书事件回调"""
    # 验证签名
    if not verify_signature(request):
        return jsonify({'code': 1, 'message': 'Invalid signature'}), 403
    
    try:
        data = request.json
        
        # 处理消息事件
        if data.get('type') == 'im.message.receive_v1':
            event = data.get('event', {})
            message = event.get('message', {})
            text = message.get('text', '')
            sender_id = message.get('sender', {}).get('sender_id', {}).get('user_id', '')
            chat_id = message.get('chat_id', '')
            
            # 处理消息内容
            response_text = process_message(text, sender_id)
            
            # 发送回复
            send_message(chat_id, response_text)
            
        return jsonify({'code': 0})
        
    except Exception as e:
        print(f"Error processing webhook: {e}")
        return jsonify({'code': 1, 'message': 'Internal error'}), 500

def process_message(text, user_id):
    """处理用户消息"""
    # 这里可以接入OpenClaw或其他AI服务
    if text.lower() in ['hello', 'hi', '你好']:
        return f"你好!我是{BOT_NAME},有什么可以帮助你的吗?"
    elif text.lower() in ['help', '帮助']:
        return "我可以帮助你处理各种任务,请告诉我你需要什么帮助。"
    else:
        # 这里可以调用OpenClaw API
        return f"收到你的消息:{text}\n正在处理中..."

def send_message(chat_id, text):
    """发送消息到飞书"""
    url = "https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id"
    
    headers = {
        'Authorization': f'Bearer {get_access_token()}',
        'Content-Type': 'application/json'
    }
    
    data = {
        "receive_id": chat_id,
        "msg_type": "text",
        "content": {
            "text": text
        }
    }
    
    try:
        response = requests.post(url, headers=headers, json=data)
        return response.json()
    except Exception as e:
        print(f"Error sending message: {e}")
        return None

def get_access_token():
    """获取飞书访问令牌"""
    url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
    
    data = {
        "app_id": APP_ID,
        "app_secret": APP_SECRET
    }
    
    try:
        response = requests.post(url, json=data)
        result = response.json()
        
        if result.get('code') == 0:
            return result.get('tenant_access_token')
        else:
            print(f"Error getting access token: {result}")
            return None
            
    except Exception as e:
        print(f"Error getting access token: {e}")
        return None

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

第六步:部署服务器

  1. 准备服务器环境

    # 安装依赖
    pip install flask requests
    
    # 创建配置文件
    nano config.py
    
  2. 配置文件内容

    # config.py
    APP_ID = "cli_xxx"
    APP_SECRET = "xxx"
    VERIFICATION_TOKEN = "your_verification_token"
    BOT_NAME = "OpenClaw助手"
    
  3. 运行服务器

    python feishu_bot.py
    

第七步:配置域名和HTTPS

  1. 购买域名

    • 注册一个域名(如:openclaw-bot.com)

  2. 配置DNS

    • 将域名指向你的服务器IP

  3. 获取SSL证书

    # 使用Let's Encrypt获取免费证书
    sudo certbot certonly --standalone -d openclaw-bot.com
    
  4. 配置Nginx

    server {
        listen 443 ssl;
        server_name openclaw-bot.com;
        
        ssl_certificate /etc/letsencrypt/live/openclaw-bot.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/openclaw-bot.com/privkey.pem;
        
        location /feishu-webhook {
            proxy_pass http://127.0.0.1:5000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    

第八步:测试机器人

  1. 添加测试账号

    • 在飞书开放平台点击"测试账号"

    • 将机器人添加到测试群聊

  2. 发送测试消息

    你好
    帮助
    测试
    
  3. 检查响应

    • 确认机器人正确回复

    • 检查日志输出

第九步:发布应用

  1. 提交审核

    • 在飞书开放平台点击"提交审核"

    • 填写审核说明

  2. 等待审核

    • 通常需要1-3个工作日

  3. 正式发布

    • 审核通过后点击"发布"

    • 应用可在飞书中使用

第十步:监控和维护

  1. 监控日志

    # 查看应用日志
    tail -f logs/feishu_bot.log
    
  2. 设置监控

    • 使用监控工具检查服务器状态

    • 设置告警机制

  3. 定期更新

    • 定期更新依赖包

    • 关注飞书API变更

常见问题解决

  1. 签名验证失败

    • 检查VERIFICATION_TOKEN是否正确

    • 确保服务器时间准确

  2. 消息发送失败

    • 检查access_token是否有效

    • 确认权限配置正确

  3. 回调URL无法访问

    • 检查防火墙设置

    • 确认域名解析正确


评论