OpenClaw 本地部署飞书机器人配置指南
前置准备
在开始之前,请确保你具备以下条件:
必需条件
- 飞书管理员权限:需要创建企业自建应用的权限,或联系管理员协助创建。
- OpenClaw 已安装:检查是否已安装
openclaw --version。
准备清单
- OpenClaw 已安装并运行
- 有飞书企业管理员权限
- 基本的命令行操作能力
创建飞书应用
进入飞书开放平台
- 打开浏览器,访问飞书开放平台。
- 使用飞书账号登录。
- 点击右上角'开发者后台'。
创建企业自建应用
- 点击'创建企业自建应用'。
- 填写应用信息:
- 应用名称:
OpenClaw AI 助手(可自定义) - 应用描述:
基于 OpenClaw 的 AI 智能助手(可自定义) - 应用图标:上传一个喜欢的图标(建议 120x120)
- 应用名称:
- 点击'创建'。
记录应用信息
创建成功后,你会看到:
App ID: cli_xxxxxxxxxxxxxxxx
App Secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
⚠️ 重要:立即保存这两个值,后面会用到!
配置机器人能力
启用机器人功能
在应用详情里面,添加应用能力,选择机器人。
配置权限
- 点击左侧'权限管理'。
- 搜索并添加以下权限:
| 权限名称 | 权限标识 | 用途 |
|---|---|---|
| 获取与发送单聊、群组消息 | im:message | 接收和发送消息 |
| 获取用户基本信息 | contact:user.base:readonly | 获取用户信息 |
| 获取群组信息 | im:chat:readonly | 获取群聊信息 |
| 发送富文本消息 | im:message:send_as_bot | 以机器人身份发送消息 |
点击'批量添加' → '确认'。
发布版本(重要)
- 点击左侧'版本管理与发布'。
- 点击'创建版本'。
- 填写版本信息:
- 版本号:
1.0.0 - 更新说明:
首次发布,支持基础对话功能
- 版本号:
- 点击'保存',然后点击'申请发布'。
- 等待管理员审批(通常几分钟内)。
获取必要凭证
获取 App ID 和 App Secret
- 在应用详情页,点击左侧'凭证与基础信息'。
- 你会看到:
这就是开发者应用的凭证,也是对应机器人的凭证。App ID: cli_xxx App Secret: xxxxx
配置 OpenClaw
创建配置文件
编辑 OpenClaw 配置文件,或者直接通过对话配置。例如:'我正在配置飞书,对应的开发者应用 appid 是 xxx, appSecret 是 xxx ,帮我配置一下'。
重启 OpenClaw
# 重启服务
openclaw gateway
# 检查状态
openclaw status
预期输出:
✓ OpenClaw 运行中
✓ Gateway: http://0.0.0.0:18789
✓ 飞书通道:已连接
测试机器人
由于本地部署无法实现双向交流(其实也可以通过 ngrok 实现,但是不安全),所以这里是实现单向推送。
首先我们已经配置好了机器人和开发者应用的信息。那么怎么让机器人给我们的飞书发送消息呢?
每个飞书用户在每个开发者应用中都有一个唯一的 openid(同一个飞书用户在不同的应用下 openid 不同),所以我们需要获取在对应应用下的 openid。正常我们是看不到的,需要通过接口获取。
我们可以用下面的脚本查询。修改其中的 3 个配置项:
APP_ID="cli_xxx"APP_SECRET="xxx"PHONE_NUMBER="xxxx"# 替换为你要查询的手机号 (不需要加 +86,接口通常自动识别或根据企业设置,若报错可尝试 "+86156...")
然后保存为 get_openid.sh。执行 sh get_openid.sh(如果是 Windows,可以把这段代码给到 AI 工具翻译成 Windows 版本)。
#!/bin/bash
# =================🔧 配置区域 (请修改这里) =================
APP_ID="cli_xxx"
APP_SECRET="xxx"
PHONE_NUMBER="xxxx"
# =======================================================
echo "🚀 开始执行三步查询流程..."
echo "--------------------------------------------------"
# --- 第一步:获取 tenant_access_token ---
echo "1️⃣ 正在获取 Access Token..."
TOKEN_RESP=$(curl -s -X POST "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal" \
-H "Content-Type: application/json" \
-d "{ \"app_id\": \"$APP_ID\", \"app_secret\": \"$APP_SECRET\" }")
# 解析 Token
ACCESS_TOKEN=$(echo "$TOKEN_RESP" | grep -o '"tenant_access_token":"[^"]*"' | cut -d'"' -f4)
if [ -z "$ACCESS_TOKEN" ]; then
echo "❌ 第一步失败:无法获取 Token。"
echo "返回信息:$TOKEN_RESP"
exit 1
fi
echo "✅ Token 获取成功:${ACCESS_TOKEN:0:10}..."
echo ""
# --- 第二步:通过手机号获取 user_id ---
echo "2️⃣ 正在通过手机号 ($PHONE_NUMBER) 查询 user_id..."
STEP2_RESP=$(curl -s -X POST "https://open.feishu.cn/open-apis/contact/v3/users/batch_get_id?user_id_type=user_id" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d "{ \"emails\": [], \"include_resigned\": false, \"mobiles\": [ \"$PHONE_NUMBER\"] }")
# 解析 user_id
if command -v python3 &> /dev/null; then
USER_ID=$(echo "$STEP2_RESP" | python3 -c "import sys, json; d=json.load(sys.stdin); print(d.get('data',{}).get('user_list',[{}])[0].get('user_id',''))" 2>/dev/null)
else
USER_ID=$(echo "$STEP2_RESP" | grep -o '"user_id":"[^"]*"' | head -1 | cut -d'"' -f4)
fi
if [ -z "$USER_ID" ]; then
echo "❌ 第二步失败:未找到 user_id。"
echo "返回信息:$STEP2_RESP"
echo "💡 提示:请检查手机号是否正确,或应用是否有【读取用户手机号】权限。"
exit 1
fi
echo "✅ 找到 user_id: $USER_ID"
echo ""
# --- 第三步:通过 user_id 获取 open_id ---
echo "3️⃣ 正在通过 user_id ($USER_ID) 查询 open_id..."
TARGET_URL="https://open.feishu.cn/open-apis/contact/v3/users/${USER_ID}?department_id_type=open_department_id&user_id_type=user_id"
STEP3_RESP=$(curl -s -X GET "$TARGET_URL" \
-H "Authorization: Bearer $ACCESS_TOKEN")
# 解析 open_id
if command -v python3 &> /dev/null; then
OPEN_ID=$(echo "$STEP3_RESP" | python3 -c "import sys, json; d=json.load(sys.stdin); print(d.get('data',{}).get('user',{}).get('open_id',''))" 2>/dev/null)
NAME=$(echo "$STEP3_RESP" | python3 -c "import sys, json; d=json.load(sys.stdin); print(d.get('data',{}).get('user',{}).get('name',''))" 2>/dev/null)
else
OPEN_ID=$(echo "$STEP3_RESP" | grep -o '"open_id":"[^"]*"' | head -1 | cut -d'"' -f4)
NAME=$(echo "$STEP3_RESP" | grep -o '"name":"[^"]*"' | head -1 | cut -d'"' -f4)
fi
if [ -z "$OPEN_ID" ]; then
echo "❌ 第三步失败:未找到 open_id。"
echo "返回信息:$STEP3_RESP"
echo "💡 提示:请检查应用是否有【读取用户信息】权限。"
exit 1
fi
echo "--------------------------------------------------"
echo "🎉 查询成功!"
echo "👤 姓名:$NAME"
echo "🆔 User ID: $USER_ID"
echo "🔑 Open ID : $OPEN_ID"
echo "--------------------------------------------------"
拿到 openid 之后,告诉小龙虾,你的飞书用户 openid 是这个。让它记下来。
然后就可以告诉小龙虾做一些事情了,比如写一篇最新的育儿文章,然后发到你的飞书。
至此,配置完成。


