当前位置: 首页 > news >正文

Openclaw自动批准配对飞书鉴

如果你也在用 OpenClaw 对接飞书,每天被一堆配对请求点到手酸,这篇文章应该能帮你省点咖啡时间。

核心思路:list → extract → approve → loop

OpenClaw 提供了 CLI 工具,支持 pairing list 查看待处理请求,也支持 pairing approve 单个批准。这意味着我们完全可以用一个脚本把流程串起来:

  1. :定时调用 pairing list,看看有没有新来的配对码;
  2. :从输出里把配对码"抠"出来;
  3. :拿到码之后,逐个执行 approve
  4. :歇一会儿,继续下一轮。

说白了,就是一个守护进程 + 轮询 + 批量处理的经典套路。


代码实现

先上完整代码,后面分段拆解。

#!/bin/bash
# OpenClaw 自动批准配对脚本 - 最终版LOG_FILE="/home/admin/auto-approve.log"
OPENCLAW="/home/admin/.local/share/pnpm/openclaw"echo "$(date '+%Y-%m-%d %H:%M:%S') 自动批准服务启动 (PID: $$)" >> "$LOG_FILE"while true; do# 1. 获取待处理配对码codes=$($OPENCLAW pairing list 2>/dev/null | grep -oE '[A-Z0-9]{8}')if [ -n "$codes" ]; thenfor code in $codes; doecho "$(date '+%Y-%m-%d %H:%M:%S') 发现配对码: $code,正在批准..." >> "$LOG_FILE"result=$($OPENCLAW pairing approve feishu "$code" 2>&1)if echo "$result" | grep -q "Approved"; thenecho "$(date '+%Y-%m-%d %H:%M:%S') ✅ 成功批准: $code" >> "$LOG_FILE"elseecho "$(date '+%Y-%m-%d %H:%M:%S') ❌ 批准失败: $code" >> "$LOG_FILE"fidonefisleep 10
done

逐段拆解

1. 识别配对码——正则提取是关键

codes=$($OPENCLAW pairing list 2>/dev/null | grep -oE '[A-Z0-9]{8}')

这是整个脚本的第一步,也是最核心的一步

pairing list 的原始输出大概长这样(示意):

PENDING PAIRINGS
----------------
Platform: feishu | Code: A1B2C3D4 | User: alice
Platform: feishu | Code: X9Y8Z7W6 | User: bob

我们需要的是中间那串 8 位字符。用 grep -oE '[A-Z0-9]{8}' 正好能精准提取:

参数 含义
-o only-matching:只输出匹配到的部分,不要整行
-E 扩展正则,支持 {8} 这种量词
[A-Z0-9]{8} 严格匹配 8 位大写字母或数字

一个小坑:如果配对码格式变了(比如加了横杠、变成小写),这个正则会失效。目前 OpenClaw 的码是标准 8 位大写,所以够用。

另外,2>/dev/null 是为了防止 pairing list 在网络抖动或 token 过期时报错,把错误输出直接扔掉,避免污染后续处理。

2. 批量批准——for 循环逐个搞定

if [ -n "$codes" ]; thenfor code in $codes; do# ... approve ...done
fi

这里有个细节:grep -oE 如果匹配到多个结果,默认会用换行或空格分隔。Shell 的 for...in 正好按空白字符切分,于是天然实现了批量遍历

也就是说,哪怕一次来了 10 个配对请求,脚本也会一个一个按顺序处理,不会漏掉。

3. 执行批准——调用 OpenClaw CLI

result=$($OPENCLAW pairing approve feishu "$code" 2>&1)

命令结构很清晰:

片段 作用
pairing approve 子命令,执行批准动作
feishu 平台标识,目前团队只用飞书,所以写死了
"$code" 当前要批准的具体配对码
2>&1 把 stderr 也抓进变量,这样后面才能判断到底是成功了还是报错了

4. 结果判定——字符串匹配有点"土",但好用

if echo "$result" | grep -q "Approved"; thenecho "... ✅ 成功批准: $code" >> "$LOG_FILE"
elseecho "... ❌ 批准失败: $code" >> "$LOG_FILE"
fi

OpenClaw 批准成功时,标准输出里会包含 Approved 字样;失败时则可能是 ErrorExpiredInvalid 之类的。

我没有用退出码判断,因为有些 CLI 工具即使业务失败也会返回 0 退出码。直接 grep 字符串虽然看起来有点"土",但在这个场景下稳定可靠

5. 守护进程——while true + sleep

while true; do# ... 扫描 + 批准 ...sleep 10
done

脚本跑起来之后就是一个常驻进程。每 10 秒扫描一次,既不会漏掉紧急请求,也不会疯狂刷 API。

10 秒这个值是我拍脑袋定的,实际可以根据配对请求的频率调整。如果团队人不多,改成 30 秒甚至 60 秒也完全没问题,还能更省电。


实际运行效果

日志文件 /home/admin/auto-approve.log 里会长这样:

2026-05-11 16:43:01 自动批准服务启动 (PID: 12345)
2026-05-11 16:43:12 发现配对码: A1B2C3D4,正在批准...
2026-05-11 16:43:13 ✅ 成功批准: A1B2C3D4
2026-05-11 16:43:13 发现配对码: X9Y8Z7W6,正在批准...
2026-05-11 16:43:14 ❌ 批准失败: X9Y8Z7W6

一目了然,出了问题也能翻日志定位。


还能怎么优化?

这个脚本目前算是"够用且好用",但真要上生产环境长期跑,还有几个可以打磨的点:

1. 失败原因要留痕

现在的失败日志只写了"批准失败",但没记具体报错。建议改成:

echo "$(date) ❌ 批准失败: $code, 详情: $result" >> "$LOG_FILE"

这样排查时不用手动复现。

2. 加个优雅退出

while true 很硬核,但如果要重启或下线服务,直接 kill 可能会让正在进行的 approve 中断。可以加个 trap

trap 'echo "$(date) 收到终止信号,正在退出..." >> "$LOG_FILE"; exit 0' SIGTERM SIGINT

3. 防止重复批准

如果某个配对码因为网络原因被处理了两次,OpenClaw 一般会返回"已处理"或报错。可以在本地维护一个已处理码的缓存,避免重复请求。

4. 平台参数化

现在平台写死了 feishu,如果以后接钉钉、企业微信,就得改代码。可以通过环境变量注入:

PLATFORM="${OPENCLAW_PLATFORM:-feishu}"

结语

这个脚本本质上没什么高深技术,就是把几个 CLI 命令用 Bash 串成了一个自动化流水线。但正是这种"小自动化",能把人从重复、低价值的点击操作里解放出来。

如果你也在用 OpenClaw,或者有类似的"手动批准"痛点,不妨拿过去改改用。有优化思路也欢迎交流。

Happy scripting! 🚀

本文示例代码基于 OpenClaw CLI 与 Bash,测试环境为 Ubuntu24.06lts。

http://www.jsqmd.com/news/797753/

相关文章:

  • STM32F407实战:FreeRTOS移植与内存管理策略解析
  • ARM GIC中断控制器虚拟化架构与实现解析
  • git rebase简介
  • AI对话魅力工程:从共情到幽默,打造拟人化交互系统
  • 如何免费快速获取网易云音乐歌词?这款开源工具让你告别手动复制
  • AI工具搭建自动化视频生成NVENC
  • [Android] 抖音车机版myDV 1.2.11
  • Airbnb:AI 编写 60% 新代码,客户支持处理 40% 问题,但旅游电商应用仍有难题
  • 【Midjourney Beetroot印相实战指南】:零基础3步复刻暗房胶片质感,2024唯一可商用植物染色AI成像法
  • ENVI 5.3波谱库实战:从自带库浏览到自定义创建,遥感地物识别效率翻倍
  • PyTorch数据集加载进阶:除了CIFAR10,你的自定义数据该怎么准备?
  • 20254111 实验三《Python程序设计》实验报告
  • AI工具搭建自动化视频生成Quick Sync
  • [Android] 星光尺子v1.0
  • VMware解锁macOS完整指南:3步免费运行苹果系统
  • Excel+ChatGPT函数实战:零代码实现语义理解与智能数据处理
  • DFB激光器啁啾参数alpha和kappa到底怎么定?从论文到实际选型的避坑指南
  • 书匠策AI实测手记:我用课程论文功能“偷“回了三个通宵,这波操作值得你抄作业
  • 影刀RPA高阶架构:告别“连点器”式多开,内置原生指纹引擎重塑全域店群防封底座
  • 英雄联盟玩家必备:5分钟快速上手LeagueAkari完整教程
  • 5分钟掌握ExplorerPatcher:Windows界面定制终极指南
  • Perplexity Science杂志搜索效率革命(92%研究者不知道的隐藏参数与语义过滤协议)
  • 别再乱接电阻了!手把手教你为DDR4/DDR5内存信号选对端接方案(附仿真对比)
  • 终极AMD Ryzen调试工具完整指南:免费开源硬件性能调优利器
  • 测试开发全日制学徒班7期第9天“-变量作用域
  • 告别连接失败!用DBeaver连接Oracle数据库时,驱动jar包到底该怎么找怎么配?(附19c实测)
  • 从入门到精通:摄影测量学核心概念与应用全景解析
  • 20254125 实验三《Python程序设计》报告
  • 单电源全范围线性斜坡发生器设计与优化
  • DIY红外热像仪进阶:手把手教你用C语言实现7种伪彩色编码(附完整代码)