☰
telegram-bot-messaging - README
2026/10/7 2:38:37 网站建设 项目流程

Telegram 技能

一个用于通过 Bot API 发送 Telegram 消息、文件和提醒的 AI 智能体技能——发送更新、使用内联按钮提问并等待批准,以及读取回复。适用于 Claude Code、Gemini CLI、Cursor、OpenAI Codex、Goose 以及其他支持 Agent Skills 标准 的 AI 客户端。

功能

  • 发送- 纯文本、MarkdownV2 或 HTML 消息(超过 4096 字符自动拆分,格式被拒绝时自动回退为纯文本)
  • 文件- 发送文档;图片(png/jpg/jpeg/gif/webp)自动作为照片发送
  • 提问- 使用内联按钮提问并等待点击或自由文本回复(手机端批准)
  • 读取- 打印自上次读取以来的新传入消息
  • 多机器人- 在默认机器人之外注册额外的命名机器人
  • 多目标- 将消息路由到命名的聊天、群组或频道
  • 钩子集成- 接入 Claude Code 钩子、cron 任务或 CI 进行通知

纯 bash + curl + jq —— 除了机器人令牌外无需安装。

要求

  • bash
  • curl
  • jq(macOS 上用brew install jq,Debian/Ubuntu 上用apt install jq)

macOS 自带 bash 和 curl;通常只需要安装jq。

快速开始

1. 创建机器人

  1. 在 Telegram 中打开 @BotFather
  2. 发送/newbot并按照提示操作(显示名称,然后是以 “bot” 结尾的用户名)
  3. BotFather 会回复一个 HTTP API 令牌

2. 运行设置

bashscripts/telegram.sh setup

这会引导你粘贴令牌,通过getMe验证它,并让你向新机器人发送一条消息以便它发现你的聊天 ID。配置写入~/.config/telegram/config(权限 600),并发送一条确认消息以确认一切正常。

3. 添加更多机器人(可选)

bashscripts/telegram.sh setup--botalerts

为每个额外的机器人使用不同的--bot NAME重复操作。命名机器人共享默认聊天 ID,除非你为它们配置了不同的目标。

4. 查找群组/频道 ID(可选)

要向群组或频道而不是个人聊天发送消息:

  1. 将机器人添加到群组/频道
  2. 在该群组/频道中发送任意消息
  3. 运行bash scripts/telegram.sh read --all查看随消息一起打印的聊天 ID
  4. 将TARGET_<NAME>=<chat_id>添加到~/.config/telegram/config,然后使用--to <name>

使用示例

发送消息

# Basic alertbashscripts/telegram.sh send"Deploy finished ✅"# No notification soundbashscripts/telegram.sh send"low priority update"--silent# MarkdownV2 formatting (falls back to plain text if rejected)bashscripts/telegram.sh send"*bold* alert"--formatmd# HTML formattingbashscripts/telegram.sh send"<b>bold</b> alert"--formathtml# Named target and named botbashscripts/telegram.sh send"hi"--toalerts--botwork

发送文件

# Send a documentbashscripts/telegram.shfilereport.pdf"Q3 report"# Images are auto-detected and sent as photosbashscripts/telegram.shfilescreenshot.png"Build output"# To a named target, silentlybashscripts/telegram.shfilebackup.zip--toalerts--silent

提问并等待回答

# Default Yes/No options, 5-minute timeoutANSWER=$(bashscripts/telegram.sh ask"Deploy to prod?"--options"Yes,No"--timeout300)echo"$ANSWER"# Custom optionsbashscripts/telegram.sh ask"Which environment?"--options"Staging,Prod,Cancel"

退出码0表示已回答(答案打印到 stdout);退出码2表示超时且没有收到回复。

读取传入消息

# New messages since the last read (advances the offset)bashscripts/telegram.shread# Limit the number of messagesbashscripts/telegram.shread--limit5# Ignore the saved offset and show everything availablebashscripts/telegram.shread--all

注意:ask和read共享相同的每机器人游标,因此一次ask会消耗后续read本会显示的传入消息。

命令参考

命令描述参数退出码
setup引导式机器人注册 + 聊天 ID 发现--bot NAME0 成功,1 错误
send MESSAGE发送文本消息--to TARGET,--bot NAME,--silent,--format md|html0 成功,1 错误
file PATH [CAPTION]发送文档(图片则发送照片)--to TARGET,--bot NAME,--silent0 成功,1 错误
ask QUESTION使用内联按钮提问,等待回复--options "Yes,No",--timeout SECS,--to TARGET,--bot NAME0 已回答,2 超时,1 错误
read打印自上次读取以来的新传入消息--limit N,--bot NAME,--all0 成功,1 错误

配置参考

环境变量优先;未在环境中设置的任何内容都回退到~/.config/telegram/config(以权限 600 创建):

TELEGRAM_BOT_TOKEN=123:ABC... # default bot token TELEGRAM_CHAT_ID=987654321 # default chat/target BOT_ALERTS_TOKEN=456:DEF... # named bot: --bot alerts (add via: setup --bot alerts) TARGET_FAMILY=-100987... # named target: --to family (any chat/group/channel id) TELEGRAM_APPROVER_IDS=123456789 # default group approver user IDs (comma-separated) APPROVERS_FAMILY=123456789,987654321 # approvers for --to family (overrides default)
  • TELEGRAM_BOT_TOKEN/TELEGRAM_CHAT_ID— 默认机器人令牌和默认发送目标。
  • BOT_<NAME>_TOKEN— 命名机器人的令牌,使用--bot <name>选择(键名大写,例如--bot alerts→BOT_ALERTS_TOKEN)。
  • TARGET_<NAME>=<chat_id>— 命名的发送目标,使用--to <name>选择(键名大写,例如--to family→TARGET_FAMILY)。数字形式的--to值直接作为聊天 ID 使用,无需查找。
  • TELEGRAM_APPROVER_IDS— 允许在群组目标中回答ask的 Telegram 用户 ID。
  • APPROVERS_<NAME>— 目标特定的群组审批人(例如APPROVERS_FAMILY);覆盖该命名目标的全局允许列表。
  • TELEGRAM_CONFIG_DIR— 覆盖配置目录(默认为~/.config/telegram)。

Claude Code 钩子(settings.json)

当 Claude 需要输入以及完成时,通知你的手机:

{"hooks":{"Notification":[{"hooks":[{"type":"command","command":"bash ~/.claude/skills/telegram/scripts/telegram.sh send \"🔔 Claude needs input in $(basename \\\"$PWD\\\")\""}]}],"Stop":[{"hooks":[{"type":"command","command":"bash ~/.claude/skills/telegram/scripts/telegram.sh send \"✅ Claude finished in $(basename \\\"$PWD\\\")\" --silent"}]}]}}

任何脚本/自动化中的审批闸门:

if["$(bashscripts/telegram.sh ask'Deploy to prod?'--options'Yes,No')"="Yes"];then./deploy.shfi

安全说明

  • 机器人令牌赋予对机器人的完全控制权——任何拥有它的人都可以以你的机器人身份发送/接收。请像对待密码一样对待它。
  • 包含令牌的 API URL 通过 stdin 传给 curl,不会暴露在 curl 进程参数中。
  • ~/.config/telegram/config以权限 600 创建(仅所有者读写)。
  • 仅当发送者用户 ID 等于聊天 ID 时才接受私聊回答。群组
    目标需要显式的TELEGRAM_APPROVER_IDS或目标特定的APPROVERS_<NAME>
    允许列表,且ask只接受来自这些用户 ID 的按钮点击和文本。
  • 默认情况下,群聊中的机器人只能看到提及它们或回复它们的消息。要读取所有群组消息,要么将机器人设为管理员,要么通过 @BotFather(/setprivacy)为其禁用隐私模式。

许可证

Apache 2.0

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询