使用telegram bot实现的报警工具

个人的程序的报警很多人都用的 server 酱 之前我也是用这个的 个人使用的时候确实非常方便 但是因为 server 酱是基于微信公众号的 所以如果要发送个多人 或者分组发送消息 还是不是很方便 于是自己开始准备用 wepy 来做这个工具

结果发现貌似itchat接口被封掉了 issues 不得不寻求其他的方法

最终找到了telegram 不得不说 虽然是聊天工具 但是对开发者还是相当友好的 各种接口都有提供 而且提供了一个非常强大的机器人系统 可以进行各种操作 而且流程非常简单

创建自己的机器人

搜索BotFather 这个帐号 然后发送/start开始对话 BotFather是telegram的一个机器人帐号 用来管理所有用户创建的机器人 开始对话之后 会提示你进行各种操作 来创建和管理自己的机器人 设置机器人的用户名 创建完成之后会得到一个机器人token 之后所有的操作都是使用这个token来做

创建频道

telegram和微信不同 除了组之外还有频道的概念 频道里只有管理员可以发送消息 其他人可以订阅这个频道 接受消息 非常符合报警这个使用场景 创建完了之后设置频道的名称 并且将你的机器人设置为频道的管理员

发送消息

然后就可以测试了 用的是python-telegram-bot这个库

1
2
3
4
from telegram import Bot

bot = Bot(token = "tokenofyourtelegrambot")
bot.send_message("@channelname", "测试内容测试内容")

是不是简单到爆炸。。。。 然后在使用flask之类的封装一下成http接口简直好用到不行

当然除了 使用channel外 send_message接口也是可以给普通的组或者单人聊天发送消息的 频道的名称是以@开头 如果是普通的聊天或者群聊的话参数是会话的id 而且机器人可以接收数据和人进行交互 来进行各种操作

我自己手动稍微搞了一下 建了个机器人 @xjpin_bot 疯转了下服务器 大家感兴趣的话 可以建个频道 把这个机器人加一下管理员 然后请求 感受一下 真的非常非常非常非常方便好用

1
curl -d "content=testfromtbot" http://tbot.xjp.in/@channelname

然后分享下完整代码 二十行不到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from flask import Flask, request
from telegram import Bot

app = Flask(__name__)

TOKEN = "xxxxxxxxx"
bot = Bot(token = TOKEN)

@app.route('/<chat_id>', methods = ["POST"])
def alarm(chat_id):
content = request.form["content"]
try:
bot.send_message(chat_id, content)
return "ok"
except Exception as e:
return str(e)

if __name__ == '__main__':
app.run(port = 8000)