Чат-боты · 14 октября 2026 · 3 мин чтения
Telegram-бот на PHP: когда подходит и как устроен вебхук
Эта страница на узбекском: /uz/blog/php-da-telegram-bot-yaratish
PHP часто недооценивают в разговорах о ботах: модно писать на Python или Node.js. Но у PHP есть практическое преимущество — он уже работает на миллионах сайтов. Если сайт компании сделан на PHP, бот можно разместить рядом, использовать ту же базу данных и тех же разработчиков. Для многих задач это быстрее и проще, чем поднимать отдельную инфраструктуру.
Как бот получает сообщения
У Telegram Bot API два способа доставки обновлений:
Long polling — бот сам периодически спрашивает у Telegram, есть ли новые сообщения. Требует постоянно работающего процесса. Для PHP, который традиционно обрабатывает запрос и завершается, это менее естественно, хотя реализуемо через консольный скрипт и менеджер процессов.
Webhook — Telegram сам отправляет каждое обновление POST-запросом на ваш адрес. PHP-скрипт принимает запрос, обрабатывает его и отвечает. Это идеально ложится на модель PHP и работает на обычном хостинге. Требование — адрес должен быть доступен по HTTPS с действительным сертификатом.
Для PHP-ботов в большинстве случаев выбирают вебхук.
Как устроен вебхук
- Вы создаёте бота через BotFather и получаете токен
- Размещаете скрипт-обработчик на сервере с HTTPS
- Регистрируете адрес обработчика методом setWebhook
- Telegram присылает на него JSON с каждым сообщением, нажатием кнопки или другим событием
- Скрипт разбирает данные и отвечает пользователю через методы Bot API
При регистрации вебхука стоит задать секретный токен: Telegram будет передавать его в заголовке, и скрипт сможет отклонять запросы не от Telegram.
Библиотеки
Писать всё через прямые HTTP-запросы можно, но удобнее использовать библиотеки. Среди популярных в PHP-сообществе — Telegram Bot SDK, php-telegram-bot и Nutgram. Они дают объекты для сообщений, клавиатур, обработчиков команд и избавляют от рутины. Если сайт сделан на Laravel или Symfony, есть пакеты интеграции с этими фреймворками: бот получает доступ к моделям, очередям и конфигурации проекта.
Структура обработчиков
Даже простой бот быстро разрастается. Чтобы код не превратился в один огромный файл с условиями, разделите его:
- обработчики команд: /start, /help, /catalog
- обработчики нажатий на inline-кнопки
- обработчики текстовых сообщений в зависимости от шага диалога
- сервисы для работы с базой и внешними API
- шаблоны текстов сообщений, отдельно от логики
Состояние диалога
Каждый запрос в PHP обрабатывается независимо, поэтому бот не помнит, на каком шаге находится пользователь. Состояние нужно хранить: в базе данных, Redis или сессиях библиотеки. Например, при оформлении заявки бот записывает, что пользователь на шаге «ввод телефона», и следующее сообщение обрабатывает соответственно. Без продуманного хранения состояния многошаговые сценарии ломаются при параллельных диалогах.
Медленные операции
Telegram ждёт ответа на вебхук ограниченное время. Если обработка долгая — генерация документа, запрос к медленному внешнему сервису, — сначала быстро ответьте Telegram, а тяжёлую работу передайте в очередь. В Laravel для этого есть встроенные очереди. Иначе Telegram будет повторять доставку, и пользователь получит дублирующиеся ответы.
Безопасность
- Храните токен в конфигурации окружения, а не в коде репозитория
- Проверяйте секретный токен вебхука
- Не выводите ошибки PHP наружу — они могут раскрыть пути и данные
- Ограничьте административные команды списком идентификаторов пользователей
- Экранируйте пользовательский ввод при работе с базой
Когда PHP — хороший выбор
- Сайт компании уже на PHP, и бот работает с теми же данными
- В команде есть PHP-разработчики
- Бот обрабатывает заявки, отвечает на вопросы, показывает каталог
- Нужен простой хостинг без отдельного сервера
Если боту нужно долго держать соединения, работать с потоковыми данными или интенсивно использовать машинное обучение, удобнее другие стеки. Если хотите бота, который работает в связке с вашим сайтом, напишите — оценим, как встроить его в текущую инфраструктуру.
Обсудим задачу
Оставьте имя и телефон — перезвоним, расспросим о процессе и предложим, с чего начать.
Обсудить проект