学习笔记|简单使用Telegram Bot API做消息推送

    最近看见好几篇关于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

● 使用方法:

  1. 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)。

  1. https://api.telegram.org/bot1545138812:AAGroid6uSJFbQxRM2f8X6KHlsnDReHUkvE/getUpdates

然后用sendMessage方法就可以让bot给你发一条信息(将下面的chat_id改为刚从上面链接获取到的你的chat_id,向频道群组发时就需要bot加群)

  1. https://api.telegram.org/bot1545138812:AAGroid6uSJFbQxRM2f8X6KHlsnDReHUkvE/sendMessage?chat_id=1138220708&text=H
  2. 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)

  1. https://api.telegram.org/bot1545138812:AAGroid6uSJFbQxRM2f8X6KHlsnDReHUkvE/sendMessage?chat_id=1138220708&text=Hello
  1. curl -X POST \
  2.      -H ‘Content-Type: application/json’ \
  3.      -d ‘{“chat_id”: “1138220708”, “text”: “This is a test from curl”, “disable_notification”: true}’ \
  4.      https://api.telegram.org/bot1545138812:AAGroid6uSJFbQxRM2f8X6KHlsnDReHUkvE/sendMessage

### sendPhoto(单张图片。最大10M,可以url地址或者本地图片)

  1. https://api.telegram.org/bot1545138812:AAGroid6uSJFbQxRM2f8X6KHlsnDReHUkvE/sendPhoto?chat_id=1138220708&photo=https://pixiv50.com/static/images/wcldpgn/6203904_82693450_p0.jpg
  1. curl -F “chat_id=<CHAT_ID>” -F “photo=@/home/logo.png” \

### sendVideo(最大50M,只支持mp4) 加标题参数 caption

  1. 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
  1. curl方式:
  2. curl -F video=@”/path/to/video/file” https://api.telegram.org/bot<token>/sendVideo?chat_id=<chat_id>
  3. python方式:
  4. files = {‘video’: open(‘123.mp4’, ‘rb’)}
  5. r = requests.post(url, files=files)
  6. print r.text

#### 加 标题参数 caption, 格式参数parse_mode ,用MarkdownV2模式给标题加超链接

  1. 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模式,第一张图加标题参数)

  1. 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请求成功就好,一些能访问外网的奇奇怪怪接口都可以,如

  1. 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客户端接收信息就不说了