Чат-боты на PHP: практическое руководство для начинающих

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

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

Начать курс

Введение: почему PHP — отличный выбор для чат-бота?

Вы когда-нибудь задумывались, как работают те умные помощники, которые отвечают на вопросы в Telegram, VK или на сайте? Многие думают, что для создания чат-бота нужно знать Python или Node.js. Но правда в том, что чат-бот на PHP — это не только реально, но и очень удобно. PHP — зрелый язык с огромным комьюнити, и он отлично подходит для быстрого прототипирования и запуска ботов.

В этом руководстве мы пройдем путь от полного нуля до работающего Telegram-бота на PHP. Мы разберем два подхода: простой эхо-бот на Localhost и бота с подключением к базе данных. Спойлер: будет много кода, который вы сможете скопировать и запустить прямо сейчас.

Что такое чат-бот и как он работает?

Прежде чем писать код, давайте разберемся с архитектурой. Чат-бот — это программа, которая получает сообщение от пользователя, обрабатывает его и отправляет ответ. В контексте Telegram (самая популярная платформа для ботов) схема выглядит так:

  • Пользователь пишет боту в Telegram.
  • Telegram отправляет POST-запрос на ваш сервер (Webhook) или вы сами постоянно опрашиваете сервер (Long Polling).
  • Ваш PHP-скрипт обрабатывает запрос и отправляет ответ через API Telegram.

Мы будем использовать Webhook — это современный и быстрый способ. Представьте, что Telegram стучится в дверь вашего сервера каждый раз, когда приходит новое сообщение. Удобно, правда?

Подготовка: что нужно для старта?

Для создания простого чат-бота на PHP вам понадобится:

  • Хостинг или локальный сервер (OpenServer, XAMPP, MAMP) с PHP 7.4+.
  • Доступ к интернету (для регистрации бота в Telegram).
  • Базовые знания PHP (переменные, функции, работа с JSON).

Если у вас нет хостинга, не беда — на этапе тестирования можно использовать Localhost с помощью утилиты ngrok, которая создает временный публичный URL. Но об этом позже.

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

Идем в Telegram, находим BotFather (официальный бот для создания ботов) и пишем команду /newbot. Отвечаем на вопросы: даем имя (например, MyTestBot) и username (обязательно заканчивается на bot, например my_test_pythonlib_bot).

После успешной регистрации BotFather выдаст вам токен — это ключ доступа к API. Выглядит он так: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11. Сохраните его в надежном месте (лучше в .env-файле, но для простоты мы пока захардкодим).

Важно: Никому не показывайте свой токен! Это пароль от вашего бота.

Шаг 2. Простейший эхо-бот на PHP (Webhook)

Создадим файл bot.php в корне вашего сайта. Этот скрипт будет принимать запросы от Telegram и отвечать тем же текстом (эхо).

<?php
// Получаем данные от Telegram
$content = file_get_contents("php://input");
$update = json_decode($content, true);

// Проверяем, есть ли сообщение
if (!$update) {
    exit;
}

// Извлекаем ID чата и текст сообщения
$chat_id = $update['message']['chat']['id'];
$text = $update['message']['text'];

// Токен вашего бота
$token = "ВАШ_ТОКЕН_ЗДЕСЬ";

// Отправляем ответ (эхо)
$url = "https://api.telegram.org/bot{$token}/sendMessage";
$data = [
    'chat_id' => $chat_id,
    'text' => "Вы написали: " . $text
];

// Используем cURL для отправки запроса
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
?>

Как это работает?

  1. Telegram отправляет POST-запрос на ваш файл bot.php.
  2. Мы читаем входящий JSON (php://input) и декодируем его.
  3. Извлекаем chat_id (уникальный идентификатор чата) и текст сообщения.
  4. Формируем URL для API Telegram и отправляем ответ через cURL.

Важно: Замените ВАШ_ТОКЕН_ЗДЕСЬ на реальный токен, полученный от BotFather.

Установка Webhook

Чтобы Telegram знал, куда отправлять запросы, нужно один раз вызвать метод setWebhook. Откройте в браузере ссылку:

https://api.telegram.org/botВАШ_ТОКЕН/setWebhook?url=https://ваш-сайт.ру/bot.php

Если вы тестируете локально, используйте ngrok:

ngrok http 80

Скопируйте сгенерированный URL (например, https://a1b2c3d4.ngrok.io) и добавьте в конец /bot.php.

Шаг 3. Умный бот с командами

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

<?php
$content = file_get_contents("php://input");
$update = json_decode($content, true);

if (!$update || !isset($update['message'])) {
    exit;
}

$chat_id = $update['message']['chat']['id'];
$text = $update['message']['text'];
$token = "ВАШ_ТОКЕН";

// Функция отправки сообщения
function sendMessage($chat_id, $text, $token) {
    $url = "https://api.telegram.org/bot{$token}/sendMessage";
    $data = ['chat_id' => $chat_id, 'text' => $text];
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_exec($ch);
    curl_close($ch);
}

// Обработка команд
switch ($text) {
    case '/start':
        sendMessage($chat_id, "Привет! Я тестовый бот с PythonLib. Напиши /help.", $token);
        break;
    case '/help':
        $help_text = "Доступные команды:\n/start - Приветствие\n/help - Помощ                

Блоги

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