LongPoll
Альтернативный способ получения обновлений от Telegram API. Работает, прослушивая сервера Telegram, ожидая новых обновлений.
Области применения
Этот метод идеально подходит для:
- Локальной разработки и тестирования бота без необходимости развертывать его на публичном сервере.
- Случаев, когда у вас нет возможности использовать HTTPS или настраивать веб-сервер.
Подключение и инициализация
Скрипт с LongPoll должен запускаться из командной строки и работать непрерывно.
<?php
// Файл bot.php
require_once __DIR__ . '/vendor/autoload.php';
use ZenithGram\ZenithGram\LongPoll;
use ZenithGram\ZenithGram\ZG;
use ZenithGram\ZenithGram\Bot;
// 1. Создаем экземпляр LongPoll с токеном вашего бота
$lp = LongPoll::create(BOT_TOKEN);
// Для удобства используем конструктор Bot
$bot = new Bot();
// --- Описываем логику бота ---
$bot->onBotCommand('start', '/start')
->text('Привет! Я работаю через LongPoll.');
$bot->onText('time', 'время')
->text('Текущее время: ' . date('H:i:s'));
$bot->onDefault()
->text('Я не знаю такой команды.');
// 2. Запускаем прослушивание обновлений
$lp->listen(function(ZG $tg) use ($bot){
// Эта функция будет вызываться для каждого нового обновления.
// В $tg передается готовый к работе экземпляр ZG.
// Передаем в класс Bot текущее обновление
// Запускаем роутер для обработки текущего обновления
$bot->zg($tg)->run();
});Как запустить
- Сохраните код в файл, например,
bot.php. - Откройте терминал (командную строку) в директории с файлом.
- Выполните команду:
php bot.php- Процесс запустится и будет ожидать обновлений. Не закрывайте терминал.
Для работы в фоновом режиме
На сервере для непрерывной работы скрипта рекомендуется использовать утилиты вроде screen, tmux или менеджеры процессов, такие как supervisor.
Методы класса
create
Статический метод для создания экземпляра класса LongPoll.
| # | Название | Тип | Описание |
|---|---|---|---|
| 1 | token | string | Токен вашего Telegram бота, полученный от @BotFather. |
| 2 | timeout | int | Время, которое будет держаться соединение с сервером Telegram. По умолчанию: 20 |
| 3 | baseUrl | string | Ссылка на сервер Telegram (Может быть как локально развернутый, так и стандартный). По умолчанию: https://api.telegram.org |
Возвращает: LongPoll - экземпляр класса LongPoll.
listen
Запускает основной цикл "длинного опроса". Метод будет бесконечно получать обновления и передавать их в функцию-обработчик.
| # | Название | Тип | Описание |
|---|---|---|---|
| 1 | handler | callable | Функция (замыкание), которая будет вызвана для каждого полученного обновления. В нее передается экземпляр ZG. |
Возвращает: void
allowedUpdates
Устанавливает типы обновлений, которые бот будет получать от телеграма
| # | Название | Тип | Описание |
|---|---|---|---|
| 1 | updates | array | Массив типов обновлений, которые вынесены в отдельный Enum. Возможные значения описаны в UpdateType |
$lp = LongPoll::create(BOT_TOKEN)
->allowedUpdates([UpdateType::Message, UpdateType::EditedMessage]);skipOldUpdates
Если использовать этот метод, при запуске опроса скрипт пропустит старые обновления и начнёт получать новые
$lp = LongPoll::create(BOT_TOKEN)
->skipOldUpdates(); // Пропускаем старые обновления