记一次对接OhMyPushBot-电报telegram技巧分享

很早就计划弄这个功能来着不停没时机,原来计划弄邮件通知的,但是在搞邮箱小号的时间发现好麻烦于是放弃了,直到有一次我理解到 Telegram 的机器人似乎可以推送消息,并且对接也很方便,于是今日花了半天折腾了一下午…

先预备一下 Telegram 的机器人申请:

在电报( Telegram )中搜索 BotFather,第一个有官方认证的就是了

输入指令:/newbot

输入机器人的名字( 记得带 bot 后缀 ),然后就好了

记一次对接 Telegram 机器人即时通知-天真的小窝

然后会有一个如下的信息:


Done! Congratulations on your new bot. You will find it at t.me/zmide_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot !Support if you want a better username for it. Just make sure the bot is fully operational before you do this. Use this token to access the HTTP API: 999999:AAAAAABBB_kkkvcfhsajhsjahd Keep your token secure and store it safely, it can be us!ed by anyone to control your bot. For a description of the Bot API, see this page: https://core.telegram.org/bots/api

我们拿到这个 token ,然后点击 t.me/zmide_bot 打开和机器人的聊天窗口发送 Hello World…

https://api.telegram.org/bot( 这里加上你的token )/getUpdates

你就能看到你给机器人发送的消息,接口返回的是一个 json 的数据格式

记一次对接 Telegram 机器人即时通知-天真的小窝

取到 chat 下面的 id ,这个就是聊天 id 了

https://api.telegram.org/bot( 这里加上你的token )/sendMessage

这个就是发送消息的接口了,它可以用 GET 要么 POST 来调用,必传的参数有两个一个就是 chat_id ( 聊天 id ) 另有一个就是 text ( 消息内容 ),固然另有许多非必传参数甚至还可以发送 Markdown ,html ,图片,文件等许多种类的消息…

更多 api 内容可以参考官方文档: https://core.telegram.org/bots/api#available-methods

发送消息的 GET 使用方法:


https://api.telegram.org/bot( 这里加上你的token )/sendMessage?chat_id=66666666&text=这是一条神奇的消息~

POST 的使用方法我就不介绍了…

telegram聊天接口

前几天做的小玩具

OhMyPushBot

Telegram 是个风趣的聊天工具,最好玩的就是它非常开放 Bot 系统。相比于微信订阅号这种层层考核还一堆限定,要么 QQ、微信 机器人这种强行扒官方协议的灰色接口, Telegram 提供的 API 非常简单。你可以用 Bot 管理 Channel,制作好玩的 Bot,这所有只需要和 BotFather 聊聊天,就可以设置并创建一个Bot,完全不需要等候考核。

制作这个 Bot,最大的用处就是方便一些主动化脚本通知事件结束。一样平常的场景下,主动化脚本要发送通知,多数使用发送邮件的方案,但是发送邮件需要使用专用的工具。 并且一样平常的邮件需要自己检察邮件环境,早些年有过黑莓的PushMail服务,几百元一个月的服务费也不是一样平常人玩得起的。如今好了,Telegram 作为一个免费 IM 工具, 美满的客户端支持(Linux、Windows上都有,各大手机平台也都有),比较及时的推送速率,简直是事件通知最佳的选择。

怎样使用

我已经摆设了一个实例,挂在我的服务器上做转发。访问 OhMyPushBot ,先和 Bot 聊一下天。

  1. 和 Bot 聊天,点击

    start

    按钮
  2. 点击下令要么手动输入

    /url

    下令
  3. Bot 会发送给你一个 URL,像是 https://ohmypushbot.zjyl1994.com/send?chatid=1234567890&sign=xxxxxxxxxxxxxxxxxxx
  4. 给适才的 URL 发送一个 HTTP POST 请求,请求Body中的消息会被投递到您和 Bot 的聊天窗口中
  5. 消息体正文支持 Markdown 格式,请求成功后接口返回

    ok

    ,不然返回错误消息

Markdown 支持

消息体支持的 Markdown 特性 ,原文是英文的,简单翻译如下:

*粗体* _斜体_ [行内超链接](http://www.example.com/) [行内提及用户](tg://user?id=123456789) `行内代码块` ```代码块 预先格式化过的代码块 ``` 

怎样实现

原生的 Telegram Bot API 非常好用,只需要你拿到正当的 Bot Token,调用 HTTP 格式的接口,就可以发送消息,也可以用 Webhook 吸收用户发来的消息。

这个 Bot 重要使用了两个 API,

sendMessage



setWebhook

,使用方法可以拜见 Telegram Bot API 文档 。

首先我先使用

setWebhook

挂了一个 Webhook 到 Telegram 服务器,当 Bot 收到消息的时间,Telegram 会主动调用我们的接口,剖析 JSON, 可以得到当前聊天的 ChatID,调用

sendMessage

通过 ChatID 可以发送消息到特定的对话中。 详细实现可以拜见开源代码的 service.go 。

为了防备无聊的人随机天生 ChatID 调用接口发送垃圾消息,我增长了一个简单的参数验证,接口的 sign 部分就是 ChatID 根据 BotToken 进行 HMAC-MD5 之后的结果。 假如不知道的人想伪造 sign,从密码学角度来说大概不大概。并且 HMAC 的 Key 是 BotToken,每个Bot都不一样,以是非常的安全。

开源代码

为了方便列位审计我的代码,我把代码托管到了 GitHub 上,地点是: https://github.com/zjyl1994/telegram-push-bot 欢迎列位大佬和神仙拍砖。

下载telegram群组聊天消息及统计方案:

1 创建机器人


在telegram应用里与BotFather交互创建机器人,参考链接:https://core.telegram.org/bots#6-botfather 发送/setjoingroups,设置机器人可以参加其他群组

2 把机器人参加群组

3 与BotFather交互发送 /setprivacy,禁用机器人的隐私模式以吸收除其他机器人发送的消息之外的全部消息

4 通过api吸收群组的聊天消息(机器人参加的群组)


api:https://api.telegram.org/bot<token>/getUpdates 创建机器人时BotFather会返回token,详细api方法getUpdates参考链接:https://core.telegram.org/bots/api#getupdates api方法getUpdates返回值参考链接:https://core.telegram.org/bots/api#update

5 在永真循环里循环发送http请求,调用getUpdates接口,并把返回的每条群聊消息保存到数据库,

返回的每条消息都市有唯一标示update_id,update_id依次递增,而且有消息发送人的唯一标示id及发送时间,update_id作为对应消息保存在数据库记载的主键;

调用getUpdates接口时添加offset请求参数,参数值为数据库最大的update_id加一,接口返回的群聊消息的update_id大于即是offset,而且最多返回100条消息;

调用getUpdates接口添加了offset参数不会查询到重复的群聊消息同时也不会漏查群聊消息;数据库记载主键为update_id,重复的update_id无法插入数据库;

鉴于每次调用getUpdates接口最多返回100条消息及!群聊消息在telegram服务器保存不超越24小时,永真循环里发送http请求调用getUpdates接口最大程度保证全部聊天消息都可以查出来;

6 做一个前端页面,输入指定文本及群聊消息时间区间,根据该文本含糊查询数据库指定时间区间的全部群聊消息记载,并根据消息发送人的唯一标示id分组,根据每组的记载总数递减排序,查询出全部发送了该指定文本的用户

7 摘自teleram官网的一些Java实现

TelegramBots. An easy to use library to create Telegram Bots.

https://github.com/rubenlagus/TelegramBots

JTelegramBot. A Java library that wraps Telegram Bot API with a simpler API using Builder design pattern.

https://github.com/Eng-Fouad/JTelegramBot

telegramBotUtilities. A simple java library that allows you to manage your telegram bots.

https://github.com/leocus/telegramBotUtilities

Java API for Bots and Gaming platform.

https://github.com/pengrad/java-telegram-bot-api

本文网址:

http://www.1cm8858.com/d/20211162216_6999_1404188133/home

Ten articles before and after

因Telegram将在明年引入广告-电报telegram技巧分享

山村老屋2之废弃医院第三章怎么过通关攻略图文-电报telegram技巧分享

telegram如何设置中文字体?币查查-电报telegram技巧分享

telegram主题、多帐号登入-电报telegram技巧分享

共青团中央?龍凤:菲律宾马尼拉最大军火商/手枪支买枪械武器军事射击黑产猪肉(@FLL84)-电报telegram技巧分享

telegram推出新官方软件telegramTelegramX-电报telegram技巧分享

telegram用户名和t.(username)有什么用?一定要设置吗如何@TGgeek-电报telegram技巧分享

telegram华为专用版下载手机可以吗-电报telegram技巧分享

telegran怎么注销【暗网仔小指南之一】电报telegram注意事项(本文仅发表于膜乎)-电报telegram技巧分享

分享和预览telegram-电报telegram技巧分享