← Назад к блогу
Блог

Интеграция Telegram Bot API в Yii2: пошаговое руководство

Зачем нужен Telegram-бот?

Telegram-бот — это быстрый способ добавить интерактив в ваше приложение без разработки отдельного мобильного клиента. Пользователи уже привыкли к Telegram, а API позволяет обрабатывать сообщения, кнопки и даже платежи.

Шаг 1: Создаём бота

Открываем @BotFather в Telegram, отправляем /newbot, задаём имя и username. Получаем токен вида 123456:ABC-DEF... — сохраняем его в .env:

TELEGRAM_BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

Шаг 2: Устанавливаем зависимости

В Yii2 используем официальный PHP SDK или простой HTTP-клиент:

composer require longman/telegram-bot

Шаг 3: Настраиваем webhook

Webhook — это URL, на который Telegram будет отправлять обновления. Создаём контроллер:

class TelegramController extends Controller
{
    public function actionWebhook()
    {
        $token = Yii::$app->params['telegram.token'];
        $update = json_decode(file_get_contents('php://input'), true);
        
        if (!$update || !isset($update['message'])) {
            return $this->asJson(['ok' => true]);
        }
        
        $message = $update['message'];
        $chatId = $message['chat']['id'];
        $text = $message['text'] ?? '';
        
        // Обработка команд
        if ($text === '/start') {
            $this->sendMessage($chatId, 'Добро пожаловать! Я бот для записи на услуги.');
        }
        
        return $this->asJson(['ok' => true]);
    }
    
    private function sendMessage(int $chatId, string $text): void
    {
        $token = Yii::$app->params['telegram.token'];
        file_get_contents("https://api.telegram.org/bot{$token}/sendMessage?" . http_build_query([
            'chat_id' => $chatId,
            'text' => $text,
            'parse_mode' => 'HTML',
        ]));
    }
}

Шаг 4: Регистрируем webhook

Выполняем один раз, чтобы Telegram знал наш URL:

curl "https://api.telegram.org/bot{TOKEN}/setWebhook?url=https://example.com/telegram/webhook"

Шаг 5: Inline-кнопки

Для интерактивных меню используем reply_markup:

$keyboard = json_encode([
    'inline_keyboard' => [
        [['text' => 'Записаться', 'callback_data' => 'book']],
        [['text' => 'Мои записи', 'callback_data' => 'my_bookings']],
    ]
]);

file_get_contents("https://api.telegram.org/bot{$token}/sendMessage?" . http_build_query([
    'chat_id' => $chatId,
    'text' => 'Выберите действие:',
    'reply_markup' => $keyboard,
]));

Итог

Telegram Bot API — простой и мощный инструмент. За 30 минут можно добавить бота в любое Yii2-приложение. В следующей статье расскажу про обработку callback-кнопок и интеграцию с базой данных.