2.20.8. Прыклад размяшчэння на хостынгу Telegram-бота на PHP

Увага!

Бот можа адпраўляць паведамленні толькі тым карыстальнікам, якія адправілі яму любое паведамленне, не спынялі яго і не блакіравалі.

Для працы з Telegram-ботам рэкамендуецца выкарыстоўваць Webhook. Такі метад пераважней, чым Long Polling, па некалькіх прычынах:

  • Скрыпт, які запускаецца з дапамогай Webhook, працуе некалькі хутчэй за скрыпт, які абнаўляе інфармацыю з пэўным інтэрвалам.
  • На віртуальным і бізнэс-хостынгу ёсць абмежаванне на час выкананне працэсу, з-за чаго скрыпт не можа быць запушчаным увесь час і аўтаматычна завяршаецца сістэмай. Гэтае абмежаванне нельга абыйсці, таму выкарыстанне стала працавальнага скрыпту можа прывесці да страты дадзеных, калі падчас апрацоўкі якой-небудзь падзеі адбудзецца завяршэнне працы гэтага скрыпту.
  1. Ініцыялізуйце стварэнне новага робата – адпраўце Telegram-боту @BotFather паведамленне /newbot.
  2. Бот запытае назву новага бота — адпраўце паведамленне, якое будзе прынята як назва бота.
  3. Адпраўце паведамленне з імем бота. Імя адрозніваецца ад назвы тым, што з’яўляецца ўнікальным ідэнтыфікатарам, з дапамогай якога можна выкарыстоўваць запрашэнні, ствараць спасылкі на яго і г. д. У канцы імя абавязкова павінна быць слова bot (Напрыклад, examplebot або example_bot).
  4. У новым паведамленні будзе паказаны токен, які трэба будзе выкарыстоўваць для працы бота. Захавайце дадзены токен.

Увага!

Для працы Webhook на сайце абавязкова павінен выкарыстоўвацца валідны SSL-сертыфікат (напрыклад, сертыфікат ад Let’s Ecnrypt).

Усталяваць Webhook можна некалькімі спосабамі:

Перайдзіце па спасылцы віду:
https://api.telegram.org/bottoken/setWebhook?url=https://domain.com/path/to/file.php

У спасылцы выкарыстоўвайце свае дадзеныя:

  • token - токен, які вы атрымалі пры стварэнні бота. Увага! Слова bot змяняць перад token ня трэба.
  • domain.com - ваш дамен, які Telegram будзе выкарыстоўваць для адпраўкі запытаў вашаму боту. Не рэкамендуецца паказваць адрас з www або без www у выпадку, калі ўсталяваны рэдырэкт на зваротны адрас.
  • path/to/file.php - шлях да файла бота, які будзе апрацоўваць запыты.

Пасля пераходу па спасылцы ў браўзэры павінна з’явіцца паведамленне віду «Webhook was set». Калі такое паведамленне з’явілася, то Webhook усталяваны карэктна, у іншым выпадку пераправерце выкарыстоўваны URL-адрас і працу SSL-сертыфіката.

Увага!

У скрыпце абавязкова павінна быць умова, якая абмяжоўвае колькасць запускаў для ўсталёўкі і праверкі Webhook, паколькі часты зварот да Telegram будзе выдаваць памылку і спыняць працу скрыпту.

Дадайце ў пачатку вашага скрыпту (пасля аб’явы зменных з дадзенымі токена і імя робата) такі код:

if(!json_decode(file_get_contents("https://api.telegram.org/name:token/setWebhook?url=https://domain.com/path/to/file.php"))->ok){die('webhook is not set');}
Прыклад простага бота, які будзе адказваць на паведамленне /start:
  1. <?php
  2. define('token','XXXXXXXXXXXXXXXXXXXXXXXXX'); // вместо ''XXXXXXXXXXXXXXXXXXXXXXXXX'' пакажыце ваш токен
  3. $result = json_decode(file_get_contents('php://input'), true); // передаём в переменную $result поўную інфармацыю аб паведамленні карыстальніка
  4. if ($result['message']['text'] == '/start') {
  5. file_get_contents("https://api.telegram.org/bot" . token . "/sendMessage?chat_id=" . $result['message']['chat']['id'] . "&text=" . urlencode('Hi')); // отправляем ответ пользователю, используя его уникальный идентификатор $result['message']['chat']['id'] у якасці атрымальніка
  6. }

Увага!

Для працы бібліятэкі Telegram Bot SDK неабходна змяніць версію PHP на 8.0 ці вышэй.
  1. Падключыцеся да хостынгу па SSH.
  2. Перайдзіце ў каталог вашага сайта:
    cd ~/example.com/www
  3. Усталюйце бібліятэку Telegram Bot SDK:
    composer require irazasyed/telegram-bot-sdk
  4. Стварыце файл і змясціце ў яго прыклад найпростага бота з выкарыстаннем бібліятэкі. Telegram Bot SDK:
    1. <?php
    2. include('vendor/autoload.php'); // подключаем библиотеку
    3. use Telegram\Bot\Api;
    4.  
    5. $telegram = new Api('XXXXXXXXXXXXXXXXXXXXXXXXX'); // вместо ''XXXXXXXXXXXXXXXXXXXXXXXXX'' пакажыце ваш токен
    6. $result = $telegram -> getWebhookUpdates(); // передаём в переменную $result поўную інфармацыю аб паведамленні карыстальніка
    7.  
    8. $text = $result["message"]["text"]; // текст сообщения
    9. $chat_id = $result["message"]["chat"]["id"]; // уникальный идентификатор пользователя
    10. $name = $result["message"]["from"]["username"]; // имя пользователя
    11.  
    12. if ($text) {
    13. if ($text == "/start") {
    14. $reply = "Hi!";
    15. $telegram->sendMessage(['chat_id' => $chat_id, 'text' => $reply]);
    16. }
    17. }
Змест