Привет, начинающий разработчик телеграм ботов. В этом уроке мы создадим Telegram-бота на PHP, который будет выдавать ID пользователя, чата и другие полезные данные. Звучит вроде бы просто, но это отличный старт для понимания работы с API Telegram. К тому же это будет полезный бот, я таким сам постоянно пользуюсь. @getmyid_bot. Еще в уроке мы немного затронем работу с библиотеками. Вот пример такого бота -
Не знаете что еще за ID? ID в Telegram - это уникальный числовой идентификатор для каждого пользователя, чата или канала, который не меняется со временем. Он используется для однозначной идентификации объекта при работе с API, отправке сообщений и других взаимодействиях; для пользователей ID всегда положительное число, а для групп и каналов - отрицательное.
Подготовка
Вот что нам понадобится:
- Хостинг с PHP. Про хостинг я писал уже в главе "хостинг и домен" в другом уроке. Лично я обычно пишу на openserver, а только потом уже загружаю на хостинг.
- Composer — это такой "волшебный помощник" для управления библиотеками PHP. Если не знаете что это такое то срочно бегите изучать. Мне помогло видео Composer php - пакетный менеджер. На самом деле, все очень просто, хотя так может не показаться сразу. Установили Composer, в терминале в своей программе написали одну строку и все, у вас проекте есть подключенная библиотека.
- Токен бота от BotFather. Подробно об этом я рассказывал тут.
Знаешь, как говорят? "Хороший разработчик всегда готовится заранее!" Так что убедись, что всё работает, прежде чем начинать. Я точно плохой разработчик, который по ходу дела подготавливает нужное. 😀
Создаем проект
Создай папку у себя на компьютере. Открой ее в редакторе кода и в терминале установи библиотеку php-telegram-bot/core с помощью Composer:
composer require longman/telegram-bot
У вас должна появится папка vendor в папке проекта. Если не появилась значит что то сделали не так. Смотрите в терминале ошибки.
Кстати, знаешь, почему Composer так популярен? Он не только подтягивает нужные библиотеки, но и решает все зависимости автоматически. Просто магия!
Пишем код
Создай файл bot.php
в корне проекта. Открой его в своем редакторе и давай начнём писать.
Инициализация бота
<?php
// Подключаем автозагрузчик Composer
require_once __DIR__ . '/vendor/autoload.php';
use Longman\TelegramBot\Telegram;
use Longman\TelegramBot\Request;
// Вставь свой токен сюда
$bot_api_key = 'YOUR_BOT_API_KEY';
$bot_username = 'YourBotUsername'; // Без @, просто имя бота
try {
// Создаём экземпляр Telegram
$telegram = new Telegram($bot_api_key, $bot_username);
// Обрабатываем входящие запросы
$update = json_decode(file_get_contents('php://input'), true);
if (isset($update['message'])) {
handleMessage($update['message'], $telegram);
}
} catch (Exception $e) {
// Если что-то пошло не так, выводим ошибку
echo 'Ошибка: ' . $e->getMessage();
}
/**
* Функция для обработки сообщений
*/
function handleMessage($message, $telegram) {
// Получаем ID пользователя
$userId = $message['from']['id'];
$chatId = $message['chat']['id'];
// Если сообщение пересланное, получаем ID отправителя оригинального сообщения
$forwardFromId = $message['forward_from']['id'] ?? null;
// Формируем ответное сообщение
$responseText = "Ваш User ID: $userId\n";
$responseText .= "Chat ID: $chatId\n";
if ($forwardFromId) {
$responseText .= "ID отправителя пересланного сообщения: $forwardFromId\n";
}
// Отправляем ответ пользователю
Request::sendMessage([
'chat_id' => $chatId,
'text' => $responseText,
]);
}
Разбор кода
Давай разберём этот кусочек кода построчно, чтобы всё стало кристально ясно.
-
Подключение библиотеки: Мы используем
require_once
для подключения автозагрузчика Composer. Это позволяет нам использовать классы из установленной библиотекиphp-telegram-bot/core
. -
Инициализация бота: Мы создаём объект
Telegram
, передавая ему токен и имя бота. Это как сказать: "Эй, Telegram, вот мой бот, работай с ним!" -
Получение входящих данных: Telegram отправляет данные в формате JSON. Мы преобразуем их в массив PHP с помощью
json_decode
. -
Обработка сообщений: Если в данных есть ключ
'message'
, значит, пользователь отправил сообщение. Мы вызываем функциюhandleMessage
, которая занимается всей логикой. -
Формирование ответа: Мы достаём ID пользователя (
from.id
), ID чата (chat.id
) и, если сообщение пересланное, ID отправителя оригинального сообщения (forward_from.id
). -
Отправка ответа: Метод
Request::sendMessage
отправляет текстовое сообщение обратно пользователю.
Загрузка на хостинг и настройка webhook
Чтобы бот мог получать сообщения, нужно настроить webhook. Webhook — это URL, куда Telegram будет отправлять данные о новых сообщениях в боте. Подробней я рассказывал в уроке "Получение данных".
Создай скрипт set_webhook.php
:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Longman\TelegramBot\Telegram;
$bot_api_key = 'YOUR_BOT_API_KEY';
$bot_username = 'YourBotUsername';
$hook_url = 'https://yourdomain.com/bot.php'; // Замени на реальный URL к файлу
try {
$telegram = new Telegram($bot_api_key, $bot_username);
$result = $telegram->setWebhook($hook_url);
if ($result->isOk()) {
echo "Webhook успешно установлен!";
} else {
echo "Ошибка: " . $result->getDescription();
}
} catch (Exception $e) {
echo 'Ошибка: ' . $e->getMessage();
}
Теперь загружаем папку проекта на хостинг и запускаем файл set_webhook.php. Если видишь сообщение "Webhook успешно установлен!" то все хорошо и Webhook установлен. Теперь файл bot.php сможет получать уведомления о новых сообщениях в боте.
Тестируем бота
Открой Telegram, найди своего бота и отправь ему любое сообщение. Если всё сделано правильно, он ответит тебе ID пользователя и чата. Если отправишь пересланное сообщение, он покажет ещё и ID отправителя оригинала.
Полезные дополнения
-
Сохраняй в базу пользователей: Сейчас может показаться что это не нужно, но если вдруг ты заметишь что твоим ботом воспользовалось много людей, то ты сможешь их уведомить о новых функциях или рассказать о своих других ботах.
-
Команды: Можно добавить команды, например
/start
, чтобы бот приветствовал пользователя.if ($message['text'] === '/start') { $responseText = "Привет! Я помогу узнать твой ID."; Request::sendMessage(['chat_id' => $chatId, 'text' => $responseText]); }
-
Добавь аватарку и описание своему боту через @botfather, так же можно добавить бота в каталоги и тогда он нем узнает больше народу.
Ну вот и всё! Теперь ты знаешь, как создать простого, но полезного Telegram-бота на PHP. Это только начало — дальше можно добавлять новые фичи, делать интерфейсы админов, интегрировать базы данных... В общем, поле для экспериментов безгранично!
Если что-то непонятно — не стесняйся спрашивать в нашем чате. Удачи в разработке! 🚀