最近看见好几篇关于Telegram bot推送的帖子,之前简单了解过,自己琢磨官方文档就能明白大半了https://core.telegram.org/bots/api,本帖记录学习过程,仅本小白理解过程,有可能说的不对。
打不开?试试 https://pp.us-south.cf.appdomain.cloud/
下面说说自己琢磨的
server酱为什么火?最主要是微信api不是每个人都可以申请,所以想推送信息到微信就需要用到它
TG不一样,api开放,bot的ap也i很简单。(另外账号api和bot api功能和使用好像不一样,这里只说bot)
1.TG bot申请无门槛,https://t.me/BotFather 申请就是了
2.TG bot的api很简单
● 官方提供的api地址:https://api.telegram.org
● 使用方法:
- https://api.telegram.org/bot<token>/METHOD_NAME
-bot<token>申请bot时生成,
-METHOD_NAME 参数很多,推送常用的是几个sendXxxx的,如sendMessage、sendPhoto、sendVideo、sendMediaGroup、sendDocument
● 请求方式:post/get都可以
举个最简单的例子,我创建了一个bot名字叫@abc,token为1545138812:AAGroid6uSJFbQxRM2f8X6KHlsnDReHUkvE,我怎么用bot给我自己发消息呢?
先去 @abc 创建对话,然后通过getUpdates的方法获取到你发给bot的对话信息。
简单做法浏览器访问下面这个链接就能获得对话信息,记录其中的chat_id(用户对话的chat_id就是userid)。
- https://api.telegram.org/bot1545138812:AAGroid6uSJFbQxRM2f8X6KHlsnDReHUkvE/getUpdates
然后用sendMessage方法就可以让bot给你发一条信息(将下面的chat_id改为刚从上面链接获取到的你的chat_id,向频道群组发时就需要bot加群)
- https://api.telegram.org/bot1545138812:AAGroid6uSJFbQxRM2f8X6KHlsnDReHUkvE/sendMessage?chat_id=1138220708&text=H
- ello
3.TG bot的更新消息的方法有两个,一个是getUpdates,一个是Webhooks
getUpdates是pull模式,大概理解是程序请求一下getUpdates获取用户发过来的信息,再处理信息做出响应。
Webhooks是push模式,Telegram会将用户发送的信息发送到你配置的一个webhook url上,这样程序就可以根据用户发送的信息做出响应
如果单单是做推送,发个简单消息,不需要啥交互的,好像根本不需要理会啥更新模式,不用配置webhook,嫌bot token暴露外在的,可以反代时把二级目录也反代就好了。
4.官方提供的bot api是有一些限制(文件大小、效率等等),可以自己搭建api(https://github.com/tdlib/telegram-bot-api),自己搭建的api好处:
下载没有大小限制的文件,直接下载文件,无需在getFile请求之后
最大上传2000 MB的文件。
使用文件的本地路径和文件URI方案上传的文件.
webhook可以使用HTTP URL、本地IP地址、使用任何端口,最大连接数100000。
5.推送可能常用到的方法
sendMessage/sendPhoto/sendAudio/sendDocument/sendVideo/sendVoice/sendMediaGroup等等几个方法的参数大同小异
还有其他方法可以到https://core.telegram.org/bots/api 下面的Available methods查看
例子:
### sendMessage(直接文本,支持MarkdownV2/HTML)
- https://api.telegram.org/bot1545138812:AAGroid6uSJFbQxRM2f8X6KHlsnDReHUkvE/sendMessage?chat_id=1138220708&text=Hello
- curl -X POST \
- -H ‘Content-Type: application/json’ \
- -d ‘{“chat_id”: “1138220708”, “text”: “This is a test from curl”, “disable_notification”: true}’ \
- https://api.telegram.org/bot1545138812:AAGroid6uSJFbQxRM2f8X6KHlsnDReHUkvE/sendMessage
### sendPhoto(单张图片。最大10M,可以url地址或者本地图片)
- https://api.telegram.org/bot1545138812:AAGroid6uSJFbQxRM2f8X6KHlsnDReHUkvE/sendPhoto?chat_id=1138220708&photo=https://pixiv50.com/static/images/wcldpgn/6203904_82693450_p0.jpg
- curl -F “chat_id=<CHAT_ID>” -F “photo=@/home/logo.png” \
### sendVideo(最大50M,只支持mp4) 加标题参数 caption
- https://api.telegram.org/bot1545138812:AAGroid6uSJFbQxRM2f8X6KHlsnDReHUkvE/sendVideo?chat_id=1138220708&video=https://cdntube2.b-cdn.net/mp4/6ce773dc977f726cd5d56cb28d9d77b2414a6497.mp4&caption=Laura’s got big tittie’s
- curl方式:
- curl -F video=@”/path/to/video/file” https://api.telegram.org/bot<token>/sendVideo?chat_id=<chat_id>
- python方式:
- files = {‘video’: open(‘123.mp4’, ‘rb’)}
- r = requests.post(url, files=files)
- print r.text
#### 加 标题参数 caption, 格式参数parse_mode ,用MarkdownV2模式给标题加超链接
- https://api.telegram.org/bot1545138812:AAGroid6uSJFbQxRM2f8X6KHlsnDReHUkvE/sendVideo?chat_id=1138220708&video=https://cdntube2.b-cdn.net/mp4/6ce773dc977f726cd5d56cb28d9d77b2414a6497.mp4&caption=[Laura’s got big tittie’s](https://4k5.net/read-8127.html)&parse_mode=MarkdownV2
### sendMediaGroup(多个媒体,一次最多好像9个,以json模式,第一张图加标题参数)
- https://api.telegram.org/bot1545138812:AAGroid6uSJFbQxRM2f8X6KHlsnDReHUkvE/sendMediaGroup?chat_id=1138220708&media=[{“caption”:”[Pixiv50](https://pixiv50.com/)”,”parse_mode”:”MarkdownV2″,”type”:”photo”,”media”:”https://pixiv50.com/static/images/wcldpgn/6203904_82693450_p0.jpg”},{“type”:”photo”,”media”:”https://www.pixiv50.com/static/images/iamcnqu/3371956_83774670_p0.jpg”}]
6.墙
国内环境,使用Telegram需要代理,不能直接访问,可以尝试:
①或者找找个web代理使get请求成功就好,一些能访问外网的奇奇怪怪接口都可以,如
- https://thingproxy.freeboard.io/fetch/https://api.telegram.org/bot1545138812:AAGroid6uSJFbQxRM2f8X6KHlsnDReHUkvE/getMe
②反代bot api
可以使用CF 上的worker反代,具体参考文末两贴
③搭建本地api,项目地址:https://github.com/tdlib/telegram-bot-api(简单看了一下,这个需要用到的好像就是账号api)
至于怎么上TG客户端接收信息就不说了