BT面板告警设置:Telegram告警的自定义消息通道
要通过BT宝塔面板自定义API通道推送Telegram消息,可以按照以下步骤配置:
1. 获取Telegram Bot的API Token
1. 在Telegram中搜索 @BotFather 并创建机器人
2. 发送 /newbot 按提示操作,获取形如 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
的API Token
3. 记录下Token(后续步骤需要)
2. 获取接收消息的Chat ID
1. 在Telegram中搜索 @getmyid_bot
或直接私聊你的Bot
2. 发送 /start,机器人会返回你的Chat ID(形如 123456789)
3. 宝塔面板配置自定义API通道
进入宝塔面板 → 面板设置 → 通知设置
找到 自定义通知通道 → 点击 添加
填写以下参数:
名称:Telegram告警(自定义)
URL地址:
https://api.telegram.org/bot【你的Token】/sendMessage
例如:
https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/sendMessage
请求方式:POST
数据类型:JSON
请求内容:
{
"chat_id": 你的Chat ID ,
"text": "【{title}】\n\n{body}\n\n时间:{time}",
"disable_notification": false
}
其他字段:保持默认或按需调整
你遇到的错误 {"ok":false,"error_code":404,"description":"Not Found"} 表示 Telegram API 请求未成功,通常由以下原因导致。请按步骤排查:
1. 检查 API URL 格式
错误最常见原因是 URL 拼写错误 或 Token 格式错误:
✅ 正确格式:
https://api.telegram.org/bot
🚫 错误示例:
漏掉 bot 前缀:https://api.telegram.org/123456:ABC.../sendMessage
Token 包含特殊字符未转义(如 # 需编码为 %23)
解决:
复制粘贴时确保Token前后无空格,完整保留 bot 前缀(如 bot123456:ABC...)。
2. 验证 Token & Chat ID 有效性
Token 检查:
在浏览器直接访问(替换真实Token):
https://api.telegram.org/bot
✅ 正常返回:{"ok":true,"result":{"id":123456789,"is_bot":true,...}}
❌ 错误返回:Token无效或已被撤销。
Chat ID 检查:
确认Chat ID是 纯数字(个人聊天)或 以 -100 开头的群组ID(如 -100123456789)
向Bot发送一条消息后重试(新Bot需先触发聊天)。
3. 调整宝塔的请求参数
在宝塔面板修改自定义API配置:
数据类型 必须选 JSON(Telegram API 严格校验Content-Type)
请求内容 严格使用以下格式(注意引号为英文):
{
"chat_id": "你的Chat_ID(数字不要引号)",
"text": "测试消息内容",
"parse_mode": "Markdown"
}
如果Chat ID是数字类型,尝试 不加引号:"chat_id": 123456789
4. 服务器网络连通性测试
在宝塔服务器上执行:
curl -X POST https://api.telegram.org/bot<Token>/sendMessage -d 'chat_id=你的Chat_ID&text=测试消息'
✅ 成功:返回 {"ok":true,...}
❌ 失败:可能是服务器无法访问Telegram(需检查防火墙、DNS或代理设置)。
5. Telegram API 限制
新创建的Bot:需先在Telegram中与Bot发起聊天(发送 /start)。
被用户禁用:如果用户手动屏蔽了Bot,会返回 403 Forbidden。
最终测试方案
在宝塔面板使用以下最小化配置测试:
URL:https://api.telegram.org/bot
请求内容:
{"chat_id": 123456789, "text": "test"}
逐步添加变量(如 {title})确认是否因特殊字符导致失败。
如果仍有问题,提供以下信息以便进一步排查:
脱敏后的API URL(替换Token前几位)
服务器执行 ping api.telegram.org 的结果
宝塔面板请求日志(可通过浏览器开发者工具查看)
Telegram告警(self)
https://api.telegram.org/bot<Token>/sendMessage
请求方式 POST
参数格式 application/json
参考一(可用)添加格式:
{
"chat_id": 1631413922,
"text": "⚠️ 宝塔告警 ⚠️\n标题: {$title}\n类型: {$type}\n详情: {$msg}",
"parse_mode": "Markdown"
}
请求头 {}
参考二(可用)无格式:
{
"chat_id":1631413922,
"text":"⚠宝塔告警⚠\n标题:{$title}\n类型:{$type}\n详情:{$msg}"
}
参考三:强制转义特殊符号
如果必须用Markdown且内容不可控:
{
"chat_id": 1631413922,
"text": "⚠宝塔告警⚠\n标题: `{title}`\n详情: \n```\n{body}\n```\n类型: {type}",
"parse_mode": "MarkdownV2",
"disable_web_page_preview": true
}
- 用代码块包裹变量内容避免符号冲突
宝塔打包的告警信息包含3个字段[title,msg,type],分别指代告警标题,告警内容和告警类型,且都是文本格式,可用$title, $msg, $type 表示并填充到您自定义的模板中。如果您不作配置将会以默认格式进行发送,默认形式如下:
{
"title": "$title",
"msg": "$msg",
"type": "$type"
}