Telegram бот на PHP своими руками: полный гайд для новичков

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

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

Начать курс

Telegram бот на PHP: с нуля до первого приветствия

Когда речь заходит о создании ботов для Telegram, первое, что приходит в голову — Python. И это логично: там есть элегантная библиотека python-telegram-bot, куча туториалов и огромное сообщество. Но что делать, если ваш основной стек — PHP? Или вы хотите быстро набросать простого бота для уведомлений, не разворачивая отдельный сервер на Python?

Хорошая новость: Telegram Bot API не привязан к языку. Это обычный HTTP-интерфейс, и PHP справляется с ним ничуть не хуже. В этой статье мы разберём, как создать Telegram бота на PHP с нуля: от регистрации у BotFather до полноценного бота, который отвечает на команды, шлёт сообщения и умеет обрабатывать callback-запросы. Всё с реальными примерами кода, без воды.

Почему PHP для Telegram бота — это нормально?

Многие разработчики скептически относятся к PHP в контексте ботов. Мол, это язык для «сайтов на коленке», а не для реального API. На деле PHP отлично справляется с ролью серверного обработчика: он прост, предсказуем и работает на любом хостинге. Для бота, который не требует суперпроизводительности (а большинство ботов именно такие), PHP — идеальный выбор.

Плюс, если у вас уже есть сайт на PHP, вы можете разместить бота на том же хостинге. Никаких дополнительных воркеров, демонов или сложных конфигураций. Просто файл bot.php, который висит на webhook'е и обрабатывает запросы от Telegram.

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

  • Хостинг с PHP 7.4+ (подойдёт любой, даже самый дешёвый shared-хостинг).
  • Доступ к HTTPS — Telegram требует, чтобы webhook работал по защищённому протоколу. Можно использовать Let's Encrypt.
  • Аккаунт в Telegram — очевидно, но без него никуда.
  • Базовое знание PHP — достаточно понимать, как работают функции, массивы и cURL.

Если всё это есть — поехали.

Шаг 1. Регистрируем бота у BotFather

Запустите в Telegram диалог с @BotFather — это главный «заводчик» ботов. Отправьте команду:

/newbot

Вас попросят ввести имя бота (оно будет отображаться в контактах) и username (должен заканчиваться на bot). После этого вы получите токен — длинную строку вида:

1234567890:ABCdefGhIJKlmNoPQRsTUVwXYZ

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

Также рекомендую сразу задать аватарку и описание командами /setuserpic и /setdescription. Это не обязательно, но делает бота более дружелюбным.

Шаг 2. Выбираем способ получения обновлений

Telegram Bot API предлагает два варианта:

  • Polling (long polling) — вы постоянно дёргаете сервер Telegram с вопросом «Есть новые сообщения?». Работает, но требует постоянного выполнения скрипта (например, через cron).
  • Webhook — Telegram сам отправляет POST-запрос на ваш сервер, когда приходит новое сообщение. Это удобнее и быстрее.

Мы будем использовать webhook. Для начала давайте проверим, что ваш сервер доступен из интернета по HTTPS. Если у вас нет SSL-сертификата, воспользуйтесь Cloudflare (у них есть бесплатный SSL) или купите сертификат за копейки.

Устанавливаем webhook

Отправьте GET-запрос на URL (можно просто открыть в браузере):

https://api.telegram.org/bot<ТОКЕН>/setWebhook?url=https://ваш_сайт/bot.php

Замените <ТОКЕН> на ваш настоящий токен, а https://ваш_сайт/bot.php — на реальный путь к вашему скрипту. В ответ вы должны получить JSON:

{"ok": true, "result": true, "description": "Webhook was set"}

Готово. Теперь Telegram будет слать все обновления на bot.php.

Шаг 3. Пишем базовый обработчик на PHP

Создайте файл bot.php в корне вашего сайта. Начнём с простого — бот, который отвечает «Привет!» на любое сообщение.

<?php

// Токен вашего бота
$token = '1234567890:ABCdefGhIJKlmNoPQRsTUVwXYZ';

// Получаем входящие данные от Telegram
$content = file_get_contents('php://input');
$update = json_decode($content, true);

if (!$update) {
    exit;
}

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

if (!$chat_id) {
    exit;
}

// Формируем ответ
$reply = "Привет! Я бот на PHP. Ты написал: " . $text;

// Отправляем ответ через Bot API
$url = "https://api.telegram.org/bot{$token}/sendMessage";
$data = [
    'chat_id' => $chat_id,
    'text' => $reply,
];

$options = [
    'http' => [
        'header' => "Content-Type: application/json\r\n",
        'method' => 'POST',
        'content' => json_encode($data),
    ],
];

$context = stream_context_create($options);
file_get_contents($url, false, $context);

Это минимальный рабочий бот. Проверьте: напишите ему любое сообщение — он должен ответить тем же текстом, но с префиксом «Привет!».

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

  • file_get_contents('php://input') — читает сырые POST-данные, которые присылает Telegram.
  • json_decode — преобразует JSON в массив PHP.
  • Из массива мы достаём chat_id (идентификатор чата) и текст сообщения.
  • Формируем ответ и отправляем его обратно через sendMessage.

Обратите внимание: мы используем stream_context_create вместо cURL. Это встроенная функция PHP, которая не требует дополнительных расширений. Однако для более сложных запросов (например, с файлами) лучше использовать cURL — он гибче.

Шаг 4. Обрабатываем команды

Просто отвечать на сообщения — скучно. Давайте добавим поддержку команд: /start, /help и свою команду /joke.

<?php

$token = 'ВАШ_ТОКЕН';
$content = file_get_contents('php://input');
$update = json_decode                

Блоги

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