news 2026/9/8 23:44:55

LobeHub Telegram 机器人端到端测试指南:基于 osascript 的 macOS 桌面自动化实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LobeHub Telegram 机器人端到端测试指南:基于 osascript 的 macOS 桌面自动化实践

LobeHub Telegram 机器人端到端测试指南:基于 osascript 的 macOS 桌面自动化实践

【免费下载链接】lobehub🤯 LobeHub is your Chief Agent Operator, organizing your agents into 7×24 operations by hiring, scheduling, and reporting on your entire AI team.项目地址: https://gitcode.com/GitHub_Trending/lo/lobehub

本文围绕 LobeHub 仓库中.agents/skills/agent-testing-bot/telegram/这一机器人渠道端到端验收技能展开。LobeHub 需要把 AI Agent 接入 Telegram、Discord、Slack、微信等真实聊天渠道进行验证,而这些原生 App 无法用 CDP 驱动,只能通过 macOS 的 AppleScript /osascript完成激活、导航、发消息与截图取证。读完本文,你将掌握在真实 Telegram 桌面端中定位机器人会话、发送长短消息、抓取回复截图、可选使用 Telegram Bot HTTP API 做程序化补充验证的完整方法,并理解其背后共享的 macOS 自动化模式、录制前置门槛与驱动脚本契约。

一、背景:为什么需要“Telegram 机器人测试”这份技能

LobeHub 的核心定位是「Chief Agent Operator」,将你的 Agent 组织成 7×24 小时运行的 AI 团队,而 Telegram 正是这类智能体对外提供服务的消息渠道之一(见仓库文档 docs/usage/channels/telegram.mdx,它描述了如何通过 BotFather 创建机器人并把 LobeHub Agent 连接为 Telegram 渠道)。当改动涉及机器人渠道行为时,唯一能端到端验证真实渠道的方式,就是驱动真实的原生客户端去收发消息。

在仓库中,这由 .agents/skills/agent-testing-bot/SKILL.md 定义:它是一个**扩展(extend)**通用acceptance技能的 LobeHub 项目级技能,将验收流程延伸到机器人渠道这一“surface”。其触发词包括test botbot testtest in telegramtest in wechat等。整体仍遵循同一套三阶段流程:

PLAN (Steps 0–2) → EXECUTE (Steps 3–6) → FINISH (Step 7)

以及相同的报告与发布管道(result.jsonreport-init.shlh acceptance run ingest … --source agent-testing)。

每个渠道目录都遵循同一套目录契约:一个index.md(含激活、导航、发消息、验证片段)外加一个test-<platform>-bot.sh驱动脚本。Telegram 对应的正是本篇核心文档 index.md 与 test-telegram-bot.sh。

关键前置认知:Telegram 渠道测试是 macOS 专属、无法在无头/云环境运行。因为这类 surface 依赖操作系统级截屏(screencapture,而非 CDP)与原生 macOS App,一旦屏幕录制(TCC)权限缺失或显示器休眠/锁屏/进入屏保,截屏会整张变黑。运行前必须通过录制门槛检查:

./.agents/acceptance/scripts/check-screen-recording.sh # exit 0 = OS capture will work

并在整个采集期间用caffeinate -dimsu &(结束后 kill)保持显示器唤醒。

二、环境准备与运行前提

在把任何osascript片段跑起来之前,需要满足以下条件(见 test-telegram-bot.sh 头部注释与共享参考 osascript.md 的 Gotchas 部分):

  1. macOS 系统(Telegram 机器人测试不适用于无头环境);
  2. Telegram 桌面客户端已安装并登录,且目标机器人已存在于会话列表中;
  3. 辅助功能(Accessibility)权限:驱动方(Terminal / iTerm / Agent 宿主)需在 系统设置 > 隐私与安全性 > 辅助功能 中被授予访问权限,否则System Events自动化会被拒绝——首次运行会弹出授权请求;
  4. 屏幕录制权限与屏幕唤醒:OS 级截屏需要 Screen Recording 权限,且显示器不能被锁定/休眠/屏保。

App 名称兼容性细节:Telegram 桌面端在不同安装方式下进程名可能是TelegramTelegram Desktop。因此驱动脚本会先探测真实名称(见下文“驱动脚本”),而文档示例统一以Telegram作为 App name / Process name 展示。

三、激活与导航:进入指定机器人的会话

Telegram 桌面端没有像 Discord/Slack 那样的Cmd+K快速切换器,其搜索快捷键是Cmd+F(也可直接点击搜索框)。进入某个机器人会话的标准流程如下(对应 index.md 的 Activate & Navigate 小节):

# 1. 激活 Telegram 到前台 osascript -e 'tell application "Telegram" to activate' sleep 1 # 2. 用 Cmd+F 打开搜索,输入机器人名,回车选中第一个结果 osascript -e ' tell application "System Events" keystroke "f" using command down delay 0.5 keystroke "MyTestBot" delay 1 key code 36 -- Enter to select end tell ' sleep 2

执行中的三个要点:

  • key code 36是硬件键码的“回车”:无论键盘布局如何都有效(这在共享参考 osascript.md 中被专门强调)。同理,Tab 是key code 48,Esc 是key code 53
  • 每个动作之间要加delay:App 处理 UI 事件需要时间,典型的节奏是搜索后等 0.8–2 秒、回车后再等 2 秒让会话切换完成。
  • 更稳妥的导航:正式驱动脚本在Cmd+F之前会先按一次Escapekey code 53)以清空上一次搜索遗留的输入状态,避免把旧关键词拼进新的搜索词里。

四、发送消息:短消息键入与长消息剪贴板粘贴

4.1 发送短消息(/start等)

导航进入机器人会话后,输入框即获得焦点,此时可以直接键入命令并回车:

osascript -e ' tell application "System Events" keystroke "/start" delay 0.3 key code 36 end tell '

这是发起对话最常用的方式——Telegram 机器人通常通过/start初始化会话。

4.2 发送长消息(务必走剪贴板粘贴)

对于长文本、CJK 中文、emoji 或含特殊字符的消息,不要用keystroke逐字符键入。共享参考 osascript.md 明确指出:keystroke对超过约 20 个字符的长文本很慢,且会破坏非 ASCII 字符。正确做法是把内容写入系统剪贴板,再模拟Cmd+V粘贴(对应文档 “Send Long Message” 小节):

osascript -e ' tell application "Telegram" to activate delay 0.5 set the clipboard to "Tell me about quantum computing in detail" tell application "System Events" keystroke "v" using command down delay 0.3 key code 36 end tell '

该“设置剪贴板 → Cmd+V → 回车”的组合是整套 osascript 自动化里最核心的输入模式:它既快又能保证任意字符的完整性。

五、验证回复:等待与截图取证

消息发出后,需要给机器人留出推理与回复的时间,然后通过操作系统级截屏固定证据:

sleep 10 screencapture /tmp/telegram-bot-response.png

截图之后,配合视觉模型(Agent 的Read工具)对画面内容做校验即可。这里值得注意(对应 SKILL.md 的 “Screen-recording gate” 与 capture-app-window.sh):

  • 机器人渠道的证据采集走capture-app-window.sh而不是 CDP,因此屏幕录制权限缺失、显示器休眠、锁屏或处于屏保时,截屏会完全变黑——所以在任何机器人截图前都要先跑check-screen-recording.sh门槛,并通过caffeinate -dimsu &保持屏幕常亮;
  • 更精确的做法是截取特定 App 窗口而非全屏。脚本先用 Swift +CGWindowListCopyWindowInfo按进程名找到layer == 0、宽高大于 200 的主窗口 ID,再执行screencapture -l "$WINDOW_ID" -x;若找不到窗口则回退为全屏截取。

六、Telegram Bot HTTP API:免 UI 的程序化补充验证

UI 自动化之外,index.md 还提供了一条纯程序化替代路径——用官方 Bot API 直接向机器人会话推送消息或拉取更新,适用于验证 webhook/回复逻辑而不必操作界面:

# 以机器人身份向会话发送消息(测试 webhook / 回复链路) curl -s "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" \ -d "chat_id=$CHAT_ID&text=test message" # 拉取最近更新 curl -s "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/getUpdates?limit=5" | jq .

两条命令分别依赖$TELEGRAM_BOT_TOKEN$CHAT_ID两个环境变量——前者来自 BotFather 发放的机器人令牌,后者是需要提前确定的会话/用户标识。把这条路径与 UI 自动化结合,可以构成“UI 侧验证端到端体验 + API 侧快速探测/断言”的互补组合。需要说明的是:本文档与仓库不涉及 token 的注册获取细节,该令牌的创建过程在 LobeHub 渠道接入文档 docs/usage/channels/telegram.mdx 中有完整说明。

七、一键驱动脚本:test-telegram-bot.sh

文档最后给出的test-telegram-bot.sh把上述所有步骤封装成一行命令。其完整签名与注释在脚本文件 test-telegram-bot.sh 中,遵循所有 osascript 渠道平台共享的统一接口契约:

./$PLATFORM/test-$PLATFORM-bot.sh $CHANNEL_OR_CONTACT $MESSAGE [$WAIT_SECONDS] [$SCREENSHOT_PATH]

对应到 Telegram 的实际调用示例:

./.agents/skills/agent-testing-bot/telegram/test-telegram-bot.sh "MyTestBot" "/start" ./.agents/skills/agent-testing-bot/telegram/test-telegram-bot.sh "MyTestBot" "Hello bot" 30 ./.agents/skills/agent-testing-bot/telegram/test-telegram-bot.sh "GPTBot" "/ask What is AI?" 60 /tmp/my-test.png

四个位置参数分别是:<bot_or_chat>(要搜索的机器人用户名或会话名)、<message>(要发送的消息内容)、<wait_seconds>(等待回复秒数,默认 10)、<screenshot_path>(截图输出路径,默认/tmp/telegram-bot-test.png)。

脚本内部完整复现了上文讲解的全部模式,值得逐段理解其工程化细节(脚本启用set -euo pipefail严格模式):

  1. 探测 App 名称:依次询问TelegramTelegram Desktop哪个能响应,找不到则输出[error] Telegram app not found.并以退出码 1 结束;
  2. 激活osascript -e "tell application \"$APP\" to activate",随后sleep 1
  3. 搜索导航:先key code 53(Escape)清除残留状态,再keystroke "f" using command down打开搜索、延迟后键入$BOT(通过"'"$BOT"'"方式安全地把 shell 变量嵌入 AppleScript 字符串)、等待后用回车选择首个结果;
  4. 发送消息:同样走“剪贴板写入$MESSAGECmd+V→ 回车”的长文本安全路径;
  5. 等待回复sleep "$WAIT"
  6. 截图取证:调用上层通用技能提供的窗口截图脚本"$SCRIPT_DIR/../../../acceptance/scripts/capture-app-window.sh" "$APP" "$SCREENSHOT"——即只截取 Telegram 窗口并带有屏幕录制黑屏前置检查。

这与文档 SKILL.md 中“每个脚本激活 App、导航到频道/联系人、发送消息、等待、并经由capture-app-window.sh截取结果窗口”的驱动契约描述完全一致。

八、常见坑位与质量建议(macOS 自动化通用经验)

以下要点从共享参考 osascript.md 中提炼,同样适用于 Telegram 渠道测试:

现象原因对策
System Events自动化失败驱动 App 未获辅助功能权限在 系统设置 > 隐私与安全性 > 辅助功能 中授权后重试
长文本键入异常 / 非 ASCII 乱码keystroke对长文与 CJK/emoji 不可靠超过约 20 字符一律改用“剪贴板 +Cmd+V
截屏整张全黑屏幕录制权限缺失,或屏幕休眠/锁屏/屏保先跑check-screen-recording.sh,再用caffeinate -dimsu &保活
键盘布局不同导致按键错乱字符按键依赖布局优先用硬件键码:Enter=36、Tab=48、Esc=53
entire contents极慢无障碍读取整棵 UI 树开销大复杂界面改用截图 + 视觉工具验证

结语

Telegram 机器人测试是 LobeHubagent-testing-bot技能中复用度极高的一个渠道,其模式与同技能下 Discord(Cmd+K快速切换)、Slack(Cmd+K)、微信/Lark/QQ 等渠道共享,核心无非是「激活 → 快捷键导航 → 剪贴板粘贴输入 → 等待 → 窗口截图」五步。开发者若需将这套方法平移到新的机器人平台,可参考仓库的 add-new-bot-platform.mdx 扩展文档,并始终牢记本文强调的两个硬性前提:辅助功能/屏幕录制权限就绪,以及显示器全程保持唤醒。

进一步可研读的仓库文件:

  • 机器人渠道总技能与平台矩阵:.agents/skills/agent-testing-bot/SKILL.md
  • 共享 macOS 自动化模式与坑位清单:.agents/acceptance/references/osascript.md
  • 驱动脚本实现:.agents/skills/agent-testing-bot/telegram/test-telegram-bot.sh
  • 窗口截图与黑屏门槛:.agents/acceptance/scripts/capture-app-window.sh 与 .agents/acceptance/scripts/check-screen-recording.sh
  • Telegram 渠道接入说明:docs/usage/channels/telegram.mdx

【免费下载链接】lobehub🤯 LobeHub is your Chief Agent Operator, organizing your agents into 7×24 operations by hiring, scheduling, and reporting on your entire AI team.项目地址: https://gitcode.com/GitHub_Trending/lo/lobehub

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 23:42:49

opencode:开源终端AI编程助手的配置与实战全解析

1. 项目概述与核心认知1.1 opencode 到底是一款什么样的工具先说结论&#xff1a;opencode 是一个开源的 AI 编程助手&#xff0c;以终端命令行工具为主要形态&#xff0c;和 Claude Code、Codex 这类产品属于同一个赛道&#xff0c;但又有自己的差异化定位。我在实际用了两三周…

作者头像 李华
网站建设 2026/9/8 23:42:40

Rails Action Text 全面指南:富文本编辑、附件管理与安全渲染

Rails Action Text 全面指南&#xff1a;富文本编辑、附件管理与安全渲染 【免费下载链接】rails Ruby on Rails 项目地址: https://gitcode.com/GitHub_Trending/rai/rails Action Text 是 Ruby on Rails 内置的富文本处理框架&#xff0c;它把所见即所得&#xff08;W…

作者头像 李华
网站建设 2026/9/8 23:42:10

基于深度学习与OCR的银行卡号识别技术解析

简介&#xff1a;一套基于深度学习的银行卡号识别项目&#xff0c;以卷积神经网络&#xff08;CNN&#xff09;和TensorFlow为核心&#xff0c;配图形界面&#xff0c;面向金融科技开发者、高校学生及计算机视觉入门者&#xff0c;解决银行卡号自动定位与识别的实操训练问题。压…

作者头像 李华
网站建设 2026/9/8 23:39:22

黑盒通信协议逆向实战:从物理层波形到单片机插桩解析

1. 整体思路拆解&#xff1a;黑盒逆向不是玄学&#xff0c;是一套方法论 我做了这么多年嵌入式开发&#xff0c;接到过不少“只有一块板子&#xff0c;没有原理图、没有协议文档、没有固件源码”的项目。说白了就是纯黑盒逆向。以前带新人的时候&#xff0c;我经常跟他们讲一句…

作者头像 李华