2.19.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:
<?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'] в качестве получателя
}

Внимание!

Для работы библиотеки 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:
    <?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]);
        }
    }
Содержание

    (5)