Push notifications from server with Telegram Bot API

I needed a way to keep myself updated with what happens on the server (new user signup, daily stats with visitors, new user send a message to me thru contact form etc.).

You can do that with just email, but you can also do it with the help of Telegram Bot API.

Install telegram on your phone. Once installed, search for BotFather – click start and then type /newbot (follow the steps there, save safely the private bot token for the api). After the new bot is created search it and start a conversation with it (this will help you get chat_id which we will need later).

After your first conversation with the bot get the chat_id:

curl <span>-X</span> GET <span>'https://api.telegram.org/botTOKEN:FROM-BOTFATHER/getUpdates'</span>
curl <span>-X</span> GET <span>'https://api.telegram.org/botTOKEN:FROM-BOTFATHER/getUpdates'</span>
curl -X GET 'https://api.telegram.org/botTOKEN:FROM-BOTFATHER/getUpdates'

Enter fullscreen mode Exit fullscreen mode

The response will look similar to this:

<span>{</span><span> </span><span>"ok"</span><span>:</span><span> </span><span>true</span><span>,</span><span> </span><span>"result"</span><span>:</span><span> </span><span>[</span><span> </span><span>{</span><span> </span><span>"update_id"</span><span>:</span><span> </span><span>123123123123</span><span>,</span><span> </span><span>"message"</span><span>:</span><span> </span><span>{</span><span> </span><span>"message_id"</span><span>:</span><span> </span><span>124</span><span>,</span><span> </span><span>"from"</span><span>:</span><span> </span><span>{</span><span> </span><span>"id"</span><span>:</span><span> </span><span>CHAT_ID</span><span>,</span><span> </span><span>"is_bot"</span><span>:</span><span> </span><span>false</span><span>,</span><span> </span><span>"first_name"</span><span>:</span><span> </span><span>"NAME"</span><span>,</span><span> </span><span>"last_name"</span><span>:</span><span> </span><span>"NAME"</span><span>,</span><span> </span><span>"language_code"</span><span>:</span><span> </span><span>"en"</span><span> </span><span>},</span><span> </span><span>"chat"</span><span>:</span><span> </span><span>{</span><span> </span><span>"id"</span><span>:</span><span> </span><span>"HERE-IS-CHAT_ID-YOU-NEED"</span><span>,</span><span> </span><span>"first_name"</span><span>:</span><span> </span><span>"NAME"</span><span>,</span><span> </span><span>"last_name"</span><span>:</span><span> </span><span>"NAME"</span><span>,</span><span> </span><span>"type"</span><span>:</span><span> </span><span>"private"</span><span> </span><span>},</span><span> </span><span>"date"</span><span>:</span><span> </span><span>1718539209</span><span>,</span><span> </span><span>"text"</span><span>:</span><span> </span><span>"/start"</span><span>,</span><span> </span><span>"entities"</span><span>:</span><span> </span><span>[</span><span> </span><span>{</span><span> </span><span>"offset"</span><span>:</span><span> </span><span>0</span><span>,</span><span> </span><span>"length"</span><span>:</span><span> </span><span>6</span><span>,</span><span> </span><span>"type"</span><span>:</span><span> </span><span>"bot_command"</span><span> </span><span>}</span><span> </span><span>]</span><span> </span><span>}</span><span> </span><span>}</span><span> </span><span>]</span><span> </span><span>}</span><span> </span>
<span>{</span><span> </span><span>"ok"</span><span>:</span><span> </span><span>true</span><span>,</span><span> </span><span>"result"</span><span>:</span><span> </span><span>[</span><span> </span><span>{</span><span> </span><span>"update_id"</span><span>:</span><span> </span><span>123123123123</span><span>,</span><span> </span><span>"message"</span><span>:</span><span> </span><span>{</span><span> </span><span>"message_id"</span><span>:</span><span> </span><span>124</span><span>,</span><span> </span><span>"from"</span><span>:</span><span> </span><span>{</span><span> </span><span>"id"</span><span>:</span><span> </span><span>CHAT_ID</span><span>,</span><span> </span><span>"is_bot"</span><span>:</span><span> </span><span>false</span><span>,</span><span> </span><span>"first_name"</span><span>:</span><span> </span><span>"NAME"</span><span>,</span><span> </span><span>"last_name"</span><span>:</span><span> </span><span>"NAME"</span><span>,</span><span> </span><span>"language_code"</span><span>:</span><span> </span><span>"en"</span><span> </span><span>},</span><span> </span><span>"chat"</span><span>:</span><span> </span><span>{</span><span> </span><span>"id"</span><span>:</span><span> </span><span>"HERE-IS-CHAT_ID-YOU-NEED"</span><span>,</span><span> </span><span>"first_name"</span><span>:</span><span> </span><span>"NAME"</span><span>,</span><span> </span><span>"last_name"</span><span>:</span><span> </span><span>"NAME"</span><span>,</span><span> </span><span>"type"</span><span>:</span><span> </span><span>"private"</span><span> </span><span>},</span><span> </span><span>"date"</span><span>:</span><span> </span><span>1718539209</span><span>,</span><span> </span><span>"text"</span><span>:</span><span> </span><span>"/start"</span><span>,</span><span> </span><span>"entities"</span><span>:</span><span> </span><span>[</span><span> </span><span>{</span><span> </span><span>"offset"</span><span>:</span><span> </span><span>0</span><span>,</span><span> </span><span>"length"</span><span>:</span><span> </span><span>6</span><span>,</span><span> </span><span>"type"</span><span>:</span><span> </span><span>"bot_command"</span><span> </span><span>}</span><span> </span><span>]</span><span> </span><span>}</span><span> </span><span>}</span><span> </span><span>]</span><span> </span><span>}</span><span> </span>
{ "ok": true, "result": [ { "update_id": 123123123123, "message": { "message_id": 124, "from": { "id": CHAT_ID, "is_bot": false, "first_name": "NAME", "last_name": "NAME", "language_code": "en" }, "chat": { "id": "HERE-IS-CHAT_ID-YOU-NEED", "first_name": "NAME", "last_name": "NAME", "type": "private" }, "date": 1718539209, "text": "/start", "entities": [ { "offset": 0, "length": 6, "type": "bot_command" } ] } } ] }

Enter fullscreen mode Exit fullscreen mode

Take chat_id value from: HERE-IS-CHAT_ID-YOU-NEED (see up).

Nice, now save CHAT_ID and TELEGRAM_API_TOKEN in .env file (or somewhere else just don’t push it to a public repo).

Here is the code to send push notifications (messages from the server to your phone) at each 10 seconds.

<span>import</span> <span>time</span>
<span>import</span> <span>requests</span>
<span>from</span> <span>config</span> <span>import</span> <span>cfg</span>
<span>def</span> <span>server_push_notifications</span><span>():</span>
<span>try</span><span>:</span>
<span>while</span> <span>True</span><span>:</span>
<span>url</span> <span>=</span> <span>f</span><span>"</span><span>https://api.telegram.org/bot</span><span>{</span><span>cfg</span><span>.</span><span>TELEGRAM_API_TOKEN</span><span>}</span><span>/sendMessage</span><span>"</span>
<span>response</span> <span>=</span> <span>requests</span><span>.</span><span>post</span><span>(</span>
<span>url</span><span>=</span><span>url</span><span>,</span>
<span>params</span><span>=</span><span>{</span><span>'</span><span>chat_id</span><span>'</span><span>:</span> <span>cfg</span><span>.</span><span>CHAT_ID</span><span>,</span> <span>'</span><span>text</span><span>'</span><span>:</span> <span>'</span><span>All system are ok.</span><span>'</span><span>,</span> <span>'</span><span>parse_mode</span><span>'</span><span>:</span> <span>'</span><span>Markdown</span><span>'</span><span>}</span>
<span>)</span>
<span>print</span><span>(</span><span>url</span><span>,</span> <span>response</span><span>.</span><span>json</span><span>())</span>
<span>time</span><span>.</span><span>sleep</span><span>(</span><span>10</span><span>)</span>
<span>except</span> <span>KeyboardInterrupt</span><span>:</span>
<span>return</span>
<span>if</span> <span>__name__</span> <span>==</span> <span>"</span><span>__main__</span><span>"</span><span>:</span>
<span>server_push_notifications</span><span>()</span>
<span>import</span> <span>time</span>
<span>import</span> <span>requests</span>
<span>from</span> <span>config</span> <span>import</span> <span>cfg</span>


<span>def</span> <span>server_push_notifications</span><span>():</span>
    <span>try</span><span>:</span>
        <span>while</span> <span>True</span><span>:</span>
            <span>url</span> <span>=</span> <span>f</span><span>"</span><span>https://api.telegram.org/bot</span><span>{</span><span>cfg</span><span>.</span><span>TELEGRAM_API_TOKEN</span><span>}</span><span>/sendMessage</span><span>"</span>
            <span>response</span> <span>=</span> <span>requests</span><span>.</span><span>post</span><span>(</span>
                <span>url</span><span>=</span><span>url</span><span>,</span>
                <span>params</span><span>=</span><span>{</span><span>'</span><span>chat_id</span><span>'</span><span>:</span> <span>cfg</span><span>.</span><span>CHAT_ID</span><span>,</span> <span>'</span><span>text</span><span>'</span><span>:</span> <span>'</span><span>All system are ok.</span><span>'</span><span>,</span> <span>'</span><span>parse_mode</span><span>'</span><span>:</span> <span>'</span><span>Markdown</span><span>'</span><span>}</span>
            <span>)</span>
            <span>print</span><span>(</span><span>url</span><span>,</span> <span>response</span><span>.</span><span>json</span><span>())</span>
            <span>time</span><span>.</span><span>sleep</span><span>(</span><span>10</span><span>)</span>
    <span>except</span> <span>KeyboardInterrupt</span><span>:</span>
        <span>return</span> 


<span>if</span> <span>__name__</span> <span>==</span> <span>"</span><span>__main__</span><span>"</span><span>:</span>
    <span>server_push_notifications</span><span>()</span>
import time import requests from config import cfg def server_push_notifications(): try: while True: url = f"https://api.telegram.org/bot{cfg.TELEGRAM_API_TOKEN}/sendMessage" response = requests.post( url=url, params={'chat_id': cfg.CHAT_ID, 'text': 'All system are ok.', 'parse_mode': 'Markdown'} ) print(url, response.json()) time.sleep(10) except KeyboardInterrupt: return if __name__ == "__main__": server_push_notifications()

Enter fullscreen mode Exit fullscreen mode

As you can see the base is just a POST request to telegram api with chat_id and text as body. What you send as a message is up to you.

For something more serious I would recommend using scheduler, but I don’t see why a barebones while loop with a time.sleep won’t do the same thing.

原文链接:Push notifications from server with Telegram Bot API

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
Misery can be caused by someone being just weak and indecisive.
一个人仅仅因为软弱无能或优柔寡断就完全可能招致痛苦
评论 抢沙发

请登录后发表评论

    暂无评论内容