
搭建步骤
- tg上添加botfather创建 tg bot, 直接参考官方文档即可 文档
- 你需要一个vps服务器,在上面部署一套api server,用于处理bot的会话请求
- 准备一个域名(直接使用vps服务器的ip也行),用于设置 tg bot 的 setwebhook
创建 tg bot
这里最关键的是记录下bot 的token,这个在创建好bot后,botfather会发给你,就是这一串乱码的东西 1090xxxx:AAG9...xxx
, 这个token在后面设置webhook会用到。
tg bot api 的基本结构 https://api.telegram.org/bot{token}/METHOD_NAME
几个常用的tg bot api
https://api.telegram.org/bot{token}/getUpdates
https://api.telegram.org/bot{token}/setwebhook?url={url}
https://api.telegram.org/bot{token}/getWebhookInfo
https://api.telegram.org/bot{token}/sendMessage?chat_id={chat_id}&text={text}&parse_mode=Markdown
实际上只需要两个api就能满足绝大多数普通个人用户的需求
1. setwebhook
这个api用于设置将你所创建的tg bot接收到的会话,转发给指定服务器进行处理,假设我的bot token为 1090xxxx:AAG9...xxx
, 我准备使用的服务器域名为 tg.arthurnone.com
,那么就构建一个如下URL,在浏览器端访问一下,就能进行设置,稍微要注意的就是,必须使用https
。
https://api.telegram.org/bot1090xxxx:AAG9...xxx/setwebhook?url=https://tg.arthurnone.com`
设定了服务器之后,那么需要做的就是,将tg bot服务器转发过来的请求,进行处理后,做一个返回就行了。这里就用到了第二个api sendMessage
2. sendMessage
每给你所创建的tg bot发一条信息,tg bot的服务器都会以post的方法发一条json数据到你的服务器,格式如下
{
'update_id': 682xxxxx,
'message': {
'message_id': 1,
'from': {
'id': 394xxx,
'is_bot': False,
'first_name': 'Arthur',
'username': 'Arthur',
'language_code': 'zh-hans'
},
'chat': {
'id': 394xxx, # chat_id
'first_name': 'Arthur',
'username': 'Arthur',
'type': 'private'
},
'date': 158xxx,
'text': 'hehe', # text
'entities': [{'offset': 0, 'length': 5, 'type': 'bot_command'}]
}
}
chat_id 在这个数据里就是 message.chat.id
部分, 用户发给bot的信息就是 message.text
。
只要有这两条信息,就可以设置对应的回复了。
服务端设置
class Handler(flask.views.MethodView):
def post(self, *args, **kwargs):
body = request.get_json()
chat_id = formdata['chat']['id']
text = body['message']['text']
if text == "/help":
return_help(chat_id)
elif text == "/blogs":
return_blogs(chat_id)
elif text == "/about":
return_me(chat_id)
elif text == "/new":
blog = get_blog(0)
return_data(chat_id, blog)
elif "blog" in text:
num = text.split("_")[1]
blog = get_blog(num)
return_data(chat_id, blog)
return
return_blogs 方法的部分
data = urllib.parse.quote(data)
url = f"https://api.telegram.org/{token}/sendMessage?chat_id={cid}&text={data}&parse_mode=Markdown"
requests.get(url)
最后构建的url就是
https://api.telegram.org/bot{token}/sendMessage?chat_id={chat_id}&text=*Arthur Blog List*
/blog\_1 17 例新型冠状病毒感染的肺炎死亡病例病情简单分析图
/blog\_2 逛动物园
/blog\_3 远程工作一个月
/blog\_4 Blog API 添加 Base64 防爬虫
/blog\_5 记一次 AWS 容量问题
/blog\_6 Blog 数据自动备份方案
/blog\_7 My resume
/blog\_8 API 设计的一些事
/blog\_9 新jobs项目介绍
/blog\_10 None
/blog\_11 一些风景照
/blog\_12 此网站后端技术简介
/blog\_13 此网站前端技术简介
/blog\_14 2019.5.7
&parse_mode=Markdown
发送这条请求到tg bot api后,就是上图所显示的内容。