2.20.8. Прыклад размяшчэння на хостынгу Telegram-бота на PHP
Увага!
Бот можа адпраўляць паведамленні толькі тым карыстальнікам, якія адправілі яму любое паведамленне, не спынялі яго і не блакіравалі.Для працы з Telegram-ботам рэкамендуецца выкарыстоўваць Webhook. Такі метад пераважней, чым Long Polling, па некалькіх прычынах:
- Скрыпт, які запускаецца з дапамогай Webhook, працуе некалькі хутчэй за скрыпт, які абнаўляе інфармацыю з пэўным інтэрвалам.
- На віртуальным і бізнэс-хостынгу ёсць абмежаванне на час выкананне працэсу, з-за чаго скрыпт не можа быць запушчаным увесь час і аўтаматычна завяршаецца сістэмай. Гэтае абмежаванне нельга абыйсці, таму выкарыстанне стала працавальнага скрыпту можа прывесці да страты дадзеных, калі падчас апрацоўкі якой-небудзь падзеі адбудзецца завяршэнне працы гэтага скрыпту.
Стварэнне бота
- Ініцыялізуйце стварэнне новага робата – адпраўце Telegram-боту @BotFather паведамленне
/newbot
. - Бот запытае назву новага бота — адпраўце паведамленне, якое будзе прынята як назва бота.
- Адпраўце паведамленне з імем бота. Імя адрозніваецца ад назвы тым, што з’яўляецца ўнікальным ідэнтыфікатарам, з дапамогай якога можна выкарыстоўваць запрашэнні, ствараць спасылкі на яго і г. д. У канцы імя абавязкова павінна быць слова
bot
(Напрыклад,examplebot
абоexample_bot
). - У новым паведамленні будзе паказаны токен, які трэба будзе выкарыстоўваць для працы бота. Захавайце дадзены токен.
Ўстаноўка Webhook
Увага!
Для працы 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
:
<?php define('token','XXXXXXXXXXXXXXXXXXXXXXXXX'); // вместо ''XXXXXXXXXXXXXXXXXXXXXXXXX'' пакажыце ваш токен $result = json_decode(file_get_contents('php://input'), true); // передаём в переменную $result поўную інфармацыю аб паведамленні карыстальніка if ($result['message']['text'] == '/start') { file_get_contents("https://api.telegram.org/bot" . token . "/sendMessage?chat_id=" . $result['message']['chat']['id'] . "&text=" . urlencode('Hi')); // отправляем ответ пользователю, используя его уникальный идентификатор $result['message']['chat']['id'] у якасці атрымальніка }
- Падключыцеся да хостынгу па SSH.
- Перайдзіце ў каталог вашага сайта:
cd ~/example.com/www
- Усталюйце бібліятэку Telegram Bot SDK:
composer require irazasyed/telegram-bot-sdk
- Стварыце файл і змясціце ў яго прыклад найпростага бота з выкарыстаннем бібліятэкі. Telegram Bot SDK:
- <?php
- include('vendor/autoload.php'); // подключаем библиотеку
- use Telegram\Bot\Api;
- $telegram = new Api('XXXXXXXXXXXXXXXXXXXXXXXXX'); // вместо ''XXXXXXXXXXXXXXXXXXXXXXXXX'' пакажыце ваш токен
- $result = $telegram -> getWebhookUpdates(); // передаём в переменную $result поўную інфармацыю аб паведамленні карыстальніка
- $text = $result["message"]["text"]; // текст сообщения
- $chat_id = $result["message"]["chat"]["id"]; // уникальный идентификатор пользователя
- $name = $result["message"]["from"]["username"]; // имя пользователя
- if ($text) {
- if ($text == "/start") {
- $reply = "Hi!";
- $telegram->sendMessage(['chat_id' => $chat_id, 'text' => $reply]);
- }
- }