- Add step-by-step bot setup: BotFather token, chat ID lookup for private chats, groups and channels, and repository secrets - Document comma-separated multiple recipients and glob support for media file inputs - Note that file-based inputs require actions/checkout - Add message formatting section warning about legacy Markdown escaping failures and recommending html for unpredictable content - Explain template variable usage with a rendered example and show the default message format - Add release and license badges, collapse the getUpdates JSON sample, cross-link all three language versions
9.7 KiB
🚀 GitHub Actions 的 Telegram
GitHub Action 用于发送 Telegram 通知消息。
使用方法
在每次 push 时发送自定义消息:
name: telegram message
on: [push]
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: send telegram message on push
uses: appleboy/telegram-action@v1
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
message: |
${{ github.actor }} created commit:
Commit message: ${{ github.event.commits[0].message }}
Repository: ${{ github.repository }}
See changes: https://github.com/${{ github.repository }}/commit/${{github.sha}}
移除 message 参数则发送默认消息,格式如下:
appleboy/telegram-action/telegram message triggered by appleboy (push)
@v1会跟踪v1.x的最新版本。如需完全可复现的构建,请锁定确切版本, 例如appleboy/telegram-action@v1.1.1。
设置步骤
1. 创建 Telegram bot
在 Telegram 中与 @BotFather 对话,输入 /newbot
并按提示操作。BotFather 会回复 bot token — 这就是 TELEGRAM_TOKEN secret。
详见 Telegram Bot API。
2. 获取 chat ID
先给你的 bot 发送任意消息(群组或频道则需把 bot 添加为成员并在其中发一条 消息),然后调用:
curl https://api.telegram.org/bot<token>/getUpdates
从 result[].message.chat.id 读取 chat ID — 这就是 TELEGRAM_TO secret。
- 私聊的 ID 是正数,例如
65382999。 - 群组 / 超级群组 / 频道的 ID 是负数,通常以
-100开头,例如-1001234567890。请使用数字 ID,不支持@channelname这类用户名。 - 如果
getUpdates返回空结果,请在聊天中重新发一条消息后再调用一次。
注意:出现 "Error: Chat not found" 错误说明 chat ID 有误,或 bot 从未被 添加到该聊天。也可参考这个 StackOverflow 回答。
getUpdates 响应示例
{
"ok": true,
"result": [
{
"update_id": 664568113,
"message": {
"message_id": 8423,
"from": {
"id": 65382999,
"is_bot": false,
"first_name": "Bo-Yi",
"last_name": "Wu (appleboy)",
"username": "appleboy46",
"language_code": "en"
},
"chat": {
"id": 65382999,
"first_name": "Bo-Yi",
"last_name": "Wu (appleboy)",
"username": "appleboy46",
"type": "private"
},
"date": 1550333434,
"text": "?"
}
}
]
}
3. 将 secrets 添加到仓库
进入仓库的 Settings → Secrets and variables → Actions,添加
TELEGRAM_TOKEN 和 TELEGRAM_TO。
输入变量
| 变量 | 描述 |
|---|---|
| to | 必填。目标聊天的 chat ID。用逗号分隔可发送到多个聊天,例如 65382999,-1001234567890 |
| token | 必填。Telegram bot 授权 token |
| message | 可选。自定义消息,留空则发送默认消息 |
| message_file | 可选。用指定文件的内容覆盖默认消息模板,需搭配 actions/checkout |
| message_thread_id | 可选。论坛目标消息串(主题)的唯一标识符,仅适用于论坛超级群组 |
| format | 可选。markdown 或 html,留空为纯文本。参见下方消息格式 |
| photo | 可选。图片文件路径,可逗号分隔多个并支持 glob 模式,需搭配 actions/checkout |
| document | 可选。文档文件路径,可逗号分隔多个并支持 glob 模式,需搭配 actions/checkout |
| sticker | 可选。贴纸文件路径,可逗号分隔多个并支持 glob 模式,需搭配 actions/checkout |
| audio | 可选。音频文件路径,可逗号分隔多个并支持 glob 模式,需搭配 actions/checkout |
| voice | 可选。语音文件路径,可逗号分隔多个并支持 glob 模式,需搭配 actions/checkout |
| video | 可选。视频文件路径,可逗号分隔多个并支持 glob 模式,需搭配 actions/checkout |
| location | 可选。位置,格式为 纬度 经度,例如 24.9163213 121.1424972 |
| venue | 可选。地点,格式为 纬度 经度 名称 地址 |
| disable_web_page_preview | 可选。禁用此消息中链接的预览。默认值为 false |
| disable_notification | 可选。静默发送消息(无通知提示音)。默认值为 false |
| socks5 | 可选。自定义代理 URL(http、https 或 socks5) |
| debug | 可选。启用调试模式。默认值为 false |
示例
发送图片和文档(文件类参数需搭配 actions/checkout,文件才会存在于
workspace 中):
- uses: actions/checkout@v7
- name: send photo message
uses: appleboy/telegram-action@v1
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
message: send photo message
photo: tests/github.png
document: tests/gophercolor.png
从文件发送消息:
- uses: actions/checkout@v7
- name: send message file
uses: appleboy/telegram-action@v1
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
message_file: tests/message.txt
将同一消息发送到多个聊天:
- name: notify several chats
uses: appleboy/telegram-action@v1
with:
to: "65382999,-1001234567890"
token: ${{ secrets.TELEGRAM_TOKEN }}
message: deploy finished
发送位置消息:
- name: send location message
uses: appleboy/telegram-action@v1
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
location: '24.9163213 121.1424972'
venue: '35.661777 139.704051 竹北體育館 新竹縣竹北市'
发送消息到特定论坛主题(消息串):
- name: send message to forum topic
uses: appleboy/telegram-action@v1
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
message_thread_id: 42
message: Hello from GitHub Actions!
使用自定义代理发送消息(支持 http、https 和 socks5),如
socks5://127.0.0.1:1080 或 http://222.124.154.19:23500:
- name: send message using socks5 proxy URL
uses: appleboy/telegram-action@v1
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
socks5: "http://222.124.154.19:23500"
message: Send message from socks5 proxy URL.
消息格式
使用 format: markdown 时,消息会以 Telegram 的传统
Markdown 样式发送。
下划线会自动转义,但未成对的 *、` 或 [ 字符(例如出现在 commit
消息中)会让 Telegram API 以 "can't parse entities" 错误拒绝整条消息。
如果消息内容不可预期,建议改用 format: html 或纯文本(不设置 format)。
模板变量
message 和 message_file 参数会以模板方式渲染:{{ ... }} 占位符会被
替换为环境中的对应值。
- name: send message with template variables
uses: appleboy/telegram-action@v1
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
message: |
Commit {{ commit.sha }} on {{ commit.ref }}
triggered by {{ repo.namespace }}
| GitHub 变量 | Telegram 模板变量 |
|---|---|
| GITHUB_REPOSITORY | repo |
| GITHUB_ACTOR | repo.namespace |
| GITHUB_SHA | commit.sha |
| GITHUB_REF | commit.ref |
| GITHUB_WORKFLOW | github.workflow |
| GITHUB_ACTION | github.action |
| GITHUB_EVENT_NAME | github.event.name |
| GITHUB_EVENT_PATH | github.event.path |
| GITHUB_WORKSPACE | github.workspace |

