宝塔面板通过Telegram机器人发送告警信息,不支持HTML标签发送失败问题解决
前置条件:
服务器需要能连接TG服务器,如果是国内服务器的话则需要自己搭个转发
获取机器人Token:
找 @BogFather 按提示一步步操作后获得
群组/个人TG的ID:
个人ID找 @UserIndorobot 获得
群组ID在网页端获得,打开 网页版TG
登录成功后选择要获得ID的群组,看地址栏,类似于这样的地址 https://web.telegram.org/a/#-123456789
红色部分就是群组ID,有些带"-"有些不带
登录宝塔:
设置->告警通知->告警设置->自定义消息通道->配置->添加
名称随便输入
地址 https://api.telegram.org/bot你的机器人Token/sendMessage
请求方式 POST
参数格式 application/json
把chat_id的值改为你自己的ID
{"chat_id":"-123456789","parse_mode":"HTML","text":"<b>服务器通知</b><blockquote> \n\n类型:$type \n\n标题:$title \n\n内容:\n$msg</blockquote>"}
保存即可,此时TG应该会收到一个通知,如果没有收到可能是无法连接或者参数有错误
某些告警信息可能包含HTML标签,但大多标签在TG机器人接口里是不支持的,会报错无法发送
此时需要修改2个文件
/www/server/panel/class/msg/web_hook_msg.py /www/server/panel/mod/base/msg/web_hook_msg.py
搜索:
def _build_real_data(msg: str, title:str, push_type:str, custom_parameter: dict):
在下面加上如下代码
msg = str.replace(msg, '&', '&') msg = str.replace(msg, '<', '<') msg = str.replace(msg, '>', '>') title = str.replace(title, '&', '&') title = str.replace(title, '<', '<') title = str.replace(title, '>', '>')
两个文件都这样修改一下,成功后如图
修改完后上传到服务器覆盖原文件
删除这两个目录
rm -rf /www/server/panel/class/msg/__pycache__ rm -rf /www/server/panel/mod/base/msg/__pycache__
SSH连接到服务器上重启宝塔面板
命令
bt
选择1回车
至此宝塔已经可能通过Telegram发送告警信息了
需要注意的是,每次版本更新后都要重新做一次修改文件