Создаём чат-бота на PHP: от теории до работающего кода

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Почему PHP — отличный язык для чат-бота?

Когда речь заходит о создании чат-ботов, многие сразу думают о Python или Node.js. Но PHP, на котором работает pythonlib.ru и большая часть интернета, ничуть не хуже справляется с этой задачей. У PHP есть три главных козыря: простота развёртывания на любом хостинге, огромное количество готовых библиотек и понятный синтаксис. Если вы уже знакомы с PHP, то написать своего первого чат-бота сможете за вечер. В этой статье мы разберём создание чат-бота на PHP с нуля, начиная от регистрации в Telegram и заканчивая обработкой сложных команд.

Мы не будем использовать фреймворки — только чистый PHP и одна официальная библиотека. Это позволит вам понять, как всё работает «под капотом». А затем вы сможете легко перейти на любой современный фреймворк (Laravel, Symfony) для масштабирования.

Что нужно для старта?

Прежде чем писать код, давайте подготовим рабочее окружение. Для разработки бота на PHP вам понадобится:

  • Веб-сервер (Apache или Nginx) с PHP 7.4 или выше — подойдёт любой хостинг или OpenServer на локальной машине.
  • Доступ к HTTPS — Telegram требует защищённого соединения для Webhook (можно использовать ngrok для локальной разработки).
  • Composer — менеджер пакетов для PHP (установка одной командой).
  • Аккаунт Telegram — для регистрации бота и тестирования.

Если у вас уже есть сайт на PHP, например, как pythonlib.ru, вы можете добавить бота прямо на его поддомен — это удобно и не требует дополнительных затрат.

Регистрация бота в Telegram

Откройте Telegram, найдите BotFather (официальный бот для создания ботов) и отправьте команду:

/newbot

BotFather попросит придумать имя и username вашего бота. Username должен заканчиваться на bot, например: MyFirstPHPBot. После успешной регистрации вы получите токен — длинную строку вида:

1234567890:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw

Сохраните этот токен — он понадобится для всех запросов к API. Никому не передавайте его, иначе ваш бот смогут взломать.

Архитектура чат-бота: Long Polling vs Webhook

Есть два способа заставить бота получать сообщения:

  • Long Polling — бот сам постоянно «дёргает» сервер Telegram с вопросом: «Есть новые сообщения?». Проще для отладки, но нагружает сервер.
  • Webhook — Telegram сам отправляет POST-запрос на ваш URL, когда кто-то пишет боту. Быстрее и надёжнее, требует HTTPS.

В этом практическом руководстве мы будем использовать Webhook, так как это современный стандарт для продакшн-ботов. Настроить его можно одной командой через браузер.

Шаг 1: Устанавливаем библиотеку для работы с Telegram API

Чтобы не писать парсинг JSON и отправку запросов вручную, установим официальную PHP-библиотеку от Telegram. Откройте терминал в папке вашего проекта и выполните:

composer require telegram-bot/api

Эта библиотека поддерживает все методы API и обновляется вместе с Telegram. После установки в папке появится vendor и файл composer.json.

Шаг 2: Базовый скрипт для обработки входящих сообщений

Создайте файл bot.php — это будет точка входа для Webhook. Вот минимальный код, который отвечает «Привет!» на любое сообщение:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Telegram\Bot\Api;

$token = 'ВАШ_ТОКЕН_ЗДЕСЬ';
$telegram = new Api($token);

// Получаем входящее обновление
$update = $telegram->getWebhookUpdate();

// Извлекаем текст сообщения и ID чата
$message = $update->getMessage();
$chatId = $message->getChat()->getId();
$text = $message->getText();

// Отвечаем
$telegram->sendMessage([
    'chat_id' => $chatId,
    'text' => "Привет! Ты написал: $text"
]);

Это простейший чат-бот на PHP, который уже работает. Сохраните файл и загрузите на сервер.

Настройка Webhook

Теперь нужно сказать Telegram, куда отправлять сообщения. Откройте браузер и перейдите по ссылке (замените TOKEN и URL):

https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://ваш-сайт.ru/bot.php

Если всё прошло успешно, вы увидите JSON с "ok": true. Теперь любой текст, отправленный вашему боту, будет попадать в bot.php.

Шаг 3: Добавляем логику команд

Простое эхо — скучно. Давайте научим бота реагировать на команды. Добавим обработку /start, /help и пользовательских сообщений:

<?php
// ... подключение и настройка из шага 2 ...

$text = trim($message->getText());

if ($text === '/start') {
    $response = "Добро пожаловать! Я учебный бот с pythonlib.ru. Доступные команды: /help, /about";
} elseif ($text === '/help') {
    $response = "Я могу: \n- Отвечать на приветствия\n- Показывать погоду (в разработке)\n- И просто болтать";
} elseif ($text === '/about') {
    $response = "Создан на PHP специально для статьи на pythonlib.ru. Версия 1.0";
} elseif (stripos($text, 'привет') !== false || stripos($text, 'здравствуй') !== false) {
    $response = "Привет-привет! Как дела?";
} else {
    $response = "Извини, я пока не понимаю такие сообщения. Попробуй /help";
}

$telegram->sendMessage([
    'chat_id' => $chatId,
    'text' => $response
]);

Обратите внимание на stripos — регистронезависимый поиск подстроки. Это позволяет реагировать на «Привет», «приВЕТ» и т.д. Такая логика делает разработку бота на PHP гибкой и понятной.

Шаг 4: Работа с кнопками и инлайн-клавиатурой

Telegram поддерживает красивые кнопки. Давайте добавим инлайн-клавиатуру с двумя вариантами ответа. Модифицируем обработку /start:

Блоги

Рекомендаций по книгам