Python利用Telegram机器人搭建消息提醒
本文介绍如何利用Python和Telegram Bot快速搭建系统消息提醒服务。通过BotFather申请机器人获取Token,创建频道并邀请机器人,调用sendMessage接口实现自动化通知。结合Flask框架,在系统报错时即时发送错误信息至微信,解决开发者对系统运行状态感知滞后的痛点。
近期频繁使用Telegram平台。
对于开发者而言,Telegram Bot最具吸引力的功能在于其可编程性,允许用户创建机器人执行特定任务。就当前应用场景,通过机器人实现消息提醒功能尤为实用。作为开发人员,实时掌握网站运行状态至关重要,而系统报错时的即时通知往往是亟待解决的关键痛点。
国内已有部分现成解决方案,例如接入企业微信或钉钉等即时通讯工具,但此类方案接入流程较为繁琐,通常需要先注册企业账号。此外,也存在通过第三方平台公众号进行提醒的服务。
此前采用的短信提醒方式因个人查看短信习惯缺失而效果不佳,短信额度耗尽后该方案被弃用。随后尝试通过邮件方式解决,利用Sendcloud提供的每日免费邮件发送额度,将邮件提醒集成至系统中并发送至QQ邮箱。鉴于QQ邮箱支持关联微信,当系统发生报错时,可通过微信第一时间接收消息提醒。
近期发现Telegram机器人同样是一个可行的备选方案,其搭建过程快速,仅需10分钟即可完成配置。
申请机器人
创建机器人的过程十分简便。
直接向官方机器人BotFather发起申请,搜索并添加“BotFather”,随后向其发送指令/newbot。

此时,BotFather会提示为机器人设置用户名,该用户名必须以_bot作为后缀结尾。

若用户名已被占用,系统会提示更换名称。申请成功后,BotFather将下发一个Token。

该Token是后续调用API的凭证,务必妥善保管。因为任何持有该Token的人均可利用你的机器人操作API;若Token发生泄露,可通过BotFather更新Token。
验证Token
可使用以下接口验证该Token是否有效。
https://api.telegram.org/bot{token}/getMe
请注意,URL中Token前需包含固定的bot前缀,若遗漏此部分,接口将返回404错误。
若配置正确,接口将返回成功响应信息。
{
"ok": true,
"result": {
"id": 12345678,
"is_bot": true,
"first_name": "xxxx",
"username": "xxxxxx",
"can_join_groups": true,
"can_read_all_group_messages": false,
"supports_inline_queries": false
}
}发送消息
- 在发送消息前,需先创建一个频道用于接收消息。
- 为频道设置唯一的频道账号标识。
- 将机器人添加至该频道,只有加入频道后,机器人才能在频道内发送消息。

调用发送消息API接口。
https://api.telegram.org/bot{token}/sendMessage?text=hello&chat_id=@频道id
- 参数text指定要发送的具体消息内容。
- 参数chat_id指定目标频道的ID。
接口返回的数据格式如下。
{
"ok": true,
"result": {
"message_id": 4,
"sender_chat": {
"id": -110201250852,
"title": "日志消息",
"username": "频道id",
"type": "channel"
},
"chat": {
"id": -110201250852,
"title": "日志消息",
"username": "频道id",
"type": "channel"
},
"date": 1654791886,
"text": "hello"
}
}若接口验证无误,即可利用相应的Python库将功能集成至你的系统中。
以Flask框架为例,以下为核心实现代码。
# view.py
@api.route("/error")
def exception_test():
s = 1/0
return success()
# app.py
@app.errorhandler(Exception)
def server_error(e):
app.logger.error(f"内部错误{str(e)}", exc_info=True)
if app.config.get("ENV") in ("production", 'development', 'local'):
tb = traceback.format_exc()
telegram.send_message(f"错误信息:{str(e)} \n堆栈信息:{tb}", chat_id=app.config.get("TELEGRAM_CHAT_ID"))
return error(code=500, http_code=500, msg="内部错误")
# telgram.py
class Telegram:
def __init__(self, app=None):
self.app = app
self._session = requests.session()
self.token = None
if app is not None:
self.init_app(app)
def init_app(self, app):
self.app = app
self.token = app.config.get("TELEGRAM_BOT_TOKEN")
def send_message(self, text, chat_id):
response = self._session.get(
f"https://api.telegram.org/bot{self.token}/sendMessage?text={text}&chat_id=@{chat_id}")启动程序后,访问localhost:5000/error路径,此时Telegram将收到相应的消息提醒。

至此,关于利用Python和Telegram机器人搭建消息提醒的介绍已完成。如需了解更多Python与Telegram消息提醒相关内容,建议查阅本站过往文章或继续浏览后续相关文章,感谢支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













