在开发工作流中,及时获取代码仓库的动态至关重要。无论是代码推送、Issue 提交还是 Pull Request 请求,第一时间响应能显著提升协作效率。Telegram 作为一款快速、安全的消息应用,非常适合作为开发者通知的中心枢纽。本文将从零开始,教你如何将 GitHub 仓库的通知实时绑定到 Telegram,利用官方 Bot API 和 GitHub Actions 实现自动化推送。
一、方案概览:为什么选择 Telegram 接收 GitHub 通知
Telegram 拥有极低的消息延迟、强大的 API 支持和跨平台客户端,是接收开发通知的理想选择。而 GitHub 官方提供的 Actions 功能可以让我们在仓库事件发生时自动执行脚本,无需额外搭建服务器即可调用 Telegram Bot 发送消息。相比第三方集成服务,这种方式完全免费、可控性高,且消息内容可自由定制。
二、准备工作:创建 Telegram Bot 与获取 Chat ID
在开始绑定之前,你需要准备好一个 Telegram Bot 和你的个人 Chat ID。整个过程只需几分钟。
- 创建 Bot:在 Telegram 中搜索
@BotFather,发送/newbot,按提示设置 Bot 名称和用户名。完成后你会收到一个 API Token,形如123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11,请妥善保存。 - 获取 Chat ID:将你的新 Bot 添加到联系人,然后向它发送任意消息(如
hi)。接着访问https://api.telegram.org/bot<你的Token>/getUpdates,在返回的 JSON 中查找chat对象的id字段,那就是你的 Chat ID。如果你希望将通知发送到群组,可将 Bot 拉入群,并把群组 ID 填入。
三、核心实现:通过 GitHub Actions 推送通知到 Telegram
GitHub Actions 是 GitHub 官方提供的持续集成服务,支持托管工作流。我们只需在仓库中创建一个 YAML 文件,即可在特定事件发生时调用 Telegram API。
步骤 1:创建 Workflow 文件
在仓库根目录创建 .github/workflows/telegram-notify.yml 文件,内容如下:
name: Telegram Notification
on:
push:
branches:
- main
issues:
types: [opened, closed]
pull_request:
types: [opened, closed]
jobs:
notify:
runs-on: ubuntu-latest
steps:
- name: Send Telegram Message
run: |
MESSAGE="🔔 GitHub 事件触发\n仓库: ${{ github.repository }}\n事件: ${{ github.event_name }}\n操作: ${{ github.actor }}"
curl -s -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage" \
-d chat_id="${{ secrets.TELEGRAM_CHAT_ID }}" \
--data-urlencode "text=$MESSAGE"步骤 2:配置仓库 Secrets
为了避免明文暴露敏感信息,我们将 Token 和 Chat ID 存储为 GitHub Secrets。进入仓库的 Settings → Secrets and variables → Actions,点击 New repository secret,分别添加 TELEGRAM_BOT_TOKEN 和 TELEGRAM_CHAT_ID。
步骤 3:测试运行
推送代码到 main 分支,或在仓库中新建一个 Issue,你会立刻在 Telegram 上收到消息。如果未收到,检查 Actions 执行日志并确认 curl 命令是否成功。
四、进阶玩法:自定义通知内容与过滤条件
基础通知只能告知“有事件发生”,但你可以通过更丰富的语法和条件控制,让通知更加实用。
1. 格式化消息并附带详细信息
使用 github.event 上下文可以提取提交信息、Issue 标题等。例如:
MESSAGE="📦 新提交: ${{ github.event.head_commit.message }}\n提交者: ${{ github.event.head_commit.author.name }}\n仓库: ${{ github.repository }}"2. 针对不同事件分别处理
你可以为 push、issue、PR 分别创建独立的 job 或使用条件判断,例如只通知特定分支的推送:
if: github.ref == 'refs/heads/main'3. 使用官方 Action 简化流程
虽然 curl 已足够,但社区封装的 action 如 appleboy/telegram-action 能减少重复代码。在 workflow 中添加:
- name: Telegram notify
uses: appleboy/telegram-action@master
with:
to: ${{ secrets.TELEGRAM_CHAT_ID }}
token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
message: |
自定义消息内容五、备选方案:通过 Webhook 与轻量服务器手动绑定
如果你希望拥有更灵活的通知逻辑(比如从不同仓库聚合消息),也可以使用 GitHub Webhook 配合自己的服务器。基本思路是:在 GitHub 仓库的 Settings → Webhooks 中添加一个连接到你的服务器地址,服务器收到 POST 请求后调用 Telegram API 发送消息。这里提供一个简单的 Python Flask 示例:
from flask import Flask, request
import requests
app = Flask(__name__)
def send_telegram(message):
token = "YOUR_BOT_TOKEN"
chat_id = "YOUR_CHAT_ID"
url = f"https://api.telegram.org/bot/sendMessage"
data = {"chat_id": chat_id, "text": message}
requests.post(url, data=data)
@app.route('/webhook', methods=['POST'])
def webhook():
data = request.json
if data.get('action') == 'opened':
send_telegram(f"🆕 新 Issue: {data['issue']['title']}")
return "OK"将脚本部署到服务器或云函数,并在 GitHub 填入对应 URL 即可。这种方法适合需要处理复杂业务逻辑的场景。
六、常见问题与注意事项
- 消息频率限制:Telegram Bot 有默认的频率限制(约 30 条/秒/chat),正常使用不会触发。如果遇到 429 错误,需加入等待重试逻辑。
- Token 安全:切勿将 Token 提交到仓库中。务必使用 Secrets 或环境变量。
- Actions 免费额度:GitHub 对公共仓库免费,私有仓库每月有一定分钟的免费额度,足够个人项目使用。
总结
通过本文,你已经掌握了使用 Telegram 官方 Bot 和 GitHub Actions 绑定通知的完整方法。从创建 Bot 到编写工作流,再到高级自定义,整个过程无需搭建服务器,完全依赖官方服务,安全且免费。这种自动化方式能让你第一时间响应开发动态,将专注力集中于重要事务。未来你还可以结合多个仓库、多频道,打造属于自己的开发者通知中枢。