这是「进击的Coder」的第 645 篇技术分享

作者:刘志军

来源:Python 之禅

阅读本文大概需要 6 分钟。

最近用 Telegram 时间比较多

对开发者来说,Telegram 最吸引人的地方估计是 Telegram bot,你可以建个机器人玩。这在微信中是不敢想象的事情。尽管公众号支持一定的开发能力,但个人公众号就是个鸡肋。

目前对我来说,最有用的一个功能是通过机器人来做消息提醒。作为开发者,我想实时知道网站的运行情况,系统报错时能即时提醒是一个痛点问题。

当然,在国内有些一些现成的解决方案,比如接入企业微信或者钉钉之类的聊天工具中,就是接入麻烦,你还得先弄个企业。也有一些第三方平台通过公众号来做提醒的。

我之前的做法是通过发短信的方式进行提醒,但是我根本就没有去看短信的习惯。短信用完后这种方案就放弃了。后来,我又想到一个新的办法,就是用邮件方式,sendcloud 每天有一定免费限额的邮件发送量。将邮件提醒集成到系统,给 QQ 邮箱发送消息,因为 QQ 邮箱有一个好处是可以关联到微信,这样每当有系统有报错时都可以在第一时间收到微信的消息提醒。

近来发现 Telegram 的机器人也是一个备选方案,10 分钟就可以快速的搭建一个出来。

申请机器人

搞一个机器人也很简单。

直接向【机器人爸爸】申请一个机器人,搜 "BotFather" ,然后给他发送一条消息  /newbot

这时候他会提示你给机器人设置一个用户名,必须以_bot结尾

如果遇到重复的名字会提示你换个名字。申请成功后,他会给你下发一个token。


这个 token 就是你后面调用api 的凭证,所以要保管好,因为任何人只要拿到这个 token 就可以利用你的机器人操作 api,如果 token 泄漏了可以更新 token。

验证 token

可以用下面的接口来验证该 token 是否可用

https://api.telegram.org/bot{token}/getMe

注意,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}
}

发消息

  1. 发消息前我们先创建一个频道专门用来接收消息

  2. 给频道设置唯一频道帐号

  3. 把机器人拉到频道里面,机器人才可以在里面发消息


调用发送消息接口

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"}
}

接口验证没问题你就可以用相应的库集成进你的系统啦

我们以 flask 为例,以下为核心代码

# view.py
@api.route("/error")
def exception_test():s = 1/0return 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 = appself._session = requests.session()self.token = Noneif app is not None:self.init_app(app)def init_app(self, app):self.app = appself.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, 这时候 telgram 就会收到消息提醒


End

崔庆才的新书《Python3网络爬虫开发实战(第二版)》已经正式上市了!书中详细介绍了零基础用 Python 开发爬虫的各方面知识,同时相比第一版新增了 JavaScript 逆向、Android 逆向、异步爬虫、深度学习、Kubernetes 相关内容,‍同时本书已经获得 Python 之父 Guido 的推荐,目前本书正在七折促销中!

内容介绍:《Python3网络爬虫开发实战(第二版)》内容介绍

扫码购买

点个在看你最好看

用 Telegram bot 搭个消息提醒服务相关推荐

  1. 前端实现实时消息提醒消息通知

    需求:当用户收到待审批和待处理的消息后状态栏图标闪烁并进行弹窗提醒,点击消息跳转到指定的消息. 实现方式:web端+c端. 说明: 客户不需要非常的及时的接收消息,所以未对接websocket协议,使 ...

  2. 在Python应用中Telegram 机器人搭建消息提醒

    推荐好文: ①程序员用Python爬虫做副业半个月就赚了3W ②程序员别瞎学,这几门语言要被淘汰了- 对开发者来说,Telgram最吸引人的地方估计是 Telgram bot,你可以在建个机器人来做些 ...

  3. telegram bot自动发送消息

    目前我的项目当有错误出现只有邮件通知,但是因为工厂里的操作工没有邮件账户,所以添加了一个消息通知.使用telegram bot.(在国内的小伙伴不知道能不能用) <非常简单的操作> 首先你 ...

  4. discord bot 发送私信实现消息提醒

    discord bot 发送私信实现消息提醒 通过用户的discord创建用户的私信通道,bot机器人向用户的discord发过期提醒 在这里插入代import discord from discor ...

  5. Telegram Bot 使用文档

    官方文档 创建机器人# 在telegram中我们可以通过和一个名为BotFather的机器人交互来申请我们自己的机器人,具体步骤如下 添加BotFather为好友 点击这里添加botfather 打开 ...

  6. RTX发送消息提醒实现以及注意事项

    RTX发送消息提醒实现以及注意事项 一.RTX简介 RTX是腾讯公司推出的企业级即时通信平台.该平台定位于降低企业通信费用,增强企业内部沟通能力,改善企业与客户之间的沟通渠道,创造新兴的企业沟通文化, ...

  7. AM消息中间件OA、ERP消息提醒的必要工具

    AM消息中间件OA.ERP消息提醒的必要工具     AM是企业即时通讯Active Messenger的简称,系统提供免费的消息中间件(以COM组件的方式提供),开放给第三方程序(OA.ERP.HR ...

  8. WEB消息提醒实现之二 实现方式-Jquery Ajax轮询

    Jquery Ajax轮询 原理 普通的jquery ajax轮询的原理主要是,客户端通过定时器定时发送ajax请求到服务器,服务器获取数据后马上响应并关闭连接. 普通的jquuery ajax轮询过 ...

  9. telegram自动发信息_创建telegram 机器人 并发送消息

    使用telegram的原因:利用该app的机器人定时发一些报表或者一些预警信息 telegram是国外常用的聊天工具,功能很强大,除了聊天还可以玩游戏,传文件,视频,声音,投票,群组.telegram ...

最新文章

  1. 如何使用有限的数据来训练 GANs?
  2. 请求接口时params和data的区别
  3. 安装Grid Control
  4. LeetCode Intersection of Two Arrays
  5. 对象交互 空调与摇控器 0107
  6. JS类库——Image
  7. Java字节码增强探秘
  8. 创业布局移动端App,应该先做Android还是iOS?
  9. Linux 下使用 sem_t 有名信号量的注意事项
  10. 互联网+国家战略-整理
  11. 南京理工大学matlab怎么弄,基于MATLAB/SimDriveline 的某型军用车辆 起步过程仿真研究...
  12. 从ResNet、DenseNet、ResNeXt、SE Net、SE ResNeXt 演进学习总结
  13. ElementUI日期时间选择器限制时间范围,禁止此刻之前的所有时间选择(精确到,时、分、秒)、pickerOptions、日期选择器范围选择
  14. 【亲测可用】豆瓣电影的API接口
  15. python运行命令_Python执行系统命令教程
  16. 第二篇--PCI设备解析
  17. Python判断能否组成三角形
  18. Autodesk 123D Design最新中文版详细安装教程!
  19. 大数据——Hadoop集群调优
  20. Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建三(zookeeper篇)

热门文章

  1. 《视觉SLAM 十四讲》第五讲 实践:拼接点云-编译遇到的terminate called after throwing an instance of 'pcl::IOException问题及解决方法
  2. python getcwd_Python os.getcwd() 方法
  3. FPGA-DDR总线电源硬件设计技巧-Fly-by走线阻抗
  4. 嵌入式产品软件(固件)开发需要考虑的2个方面
  5. Android性能测试文章汇总
  6. 分享嵌入式开发使用过程中遇到的几个问题(MQX4.2,IAR,Kinetis K66)
  7. 复盘618:数字狂欢背后透露了哪些隐藏信号?
  8. MacBook Air安装Win7的经验总结(包括双系统,单系统WIN7)
  9. 网页服务器怎么做链接,如何做网页超级链接
  10. 回顾刚来的那一天还历历在目,不禁感概一番