Top.Mail.Ru

Интеграция Telegram-бота с Laravel: Полноценное Webhook-решение

Интеграция Telegram-бота с Laravel: Полноценное Webhook-решение

Laravel давно зарекомендовал себя как один из самых удобных PHP-фреймворков для веб-разработки. Но что если объединить его возможности с мощью Telegram-бота? В этой статье мы рассмотрим, как создать полноценный webhook для Telegram-бота с обработкой inline-кнопок, сохранением пользователей и динамическим ответом.


В результате у вас будет Telegram-бот, который:

  • Реагирует на нажатия inline-кнопок (callback_query)

  • Отвечает на обычные сообщения

  • Сохраняет данные пользователей в базу данных

  • Отправляет красиво оформленные сообщения с клавиатурами

Создаём маршрут /webhook, который будет получать обновления от Telegram API:

use Illuminate\Support\Facades\Route;
use Illuminate\Http\Request;
use App\Models\Telegram;

Route::post('/webhook', function(Request $request) {
    $update = json_decode(file_get_contents('php://input'), true);
    ...
});

Обработка Callback-кнопок

if (isset($update['callback_query'])) {
    $chatId = $update['callback_query']['message']['chat']['id'];
    $messageText = $update['callback_query']['data'];

    // Сохраняем нового пользователя
    if (Telegram::where('chat_id', $chatId)->count() == 0) {
        Telegram::create([
            'chat_id' => $chatId,
            'fio' => ..., // имя и фамилия
            ...
        ]);
    }

    // Ответы на команды
    switch ($messageText) {
        case 'contacts': $txt = "..."; break;
        case 'services': $txt = "..."; break;
        ...
        default: $txt = "Выберите интересующий раздел:";
    }

    // Inline-клавиатура
    $keyboard = [...];
    ...
}

Ответ на обычные сообщения

if (isset($update['message'])) {
    $chatId = $update['message']['chat']['id'];
    $messageText = strtolower($update['message']['text'] ?? '');

    // Сохраняем пользователя
    if (Telegram::where('chat_id', $chatId)->count() == 0) {
        Telegram::create([...]);
    }

    $welcomeText = "👋 Привет! Я бот Евгения Морковина...";
    $keyboard = [...];
    ...
}

Использование inline-клавиатур

Laravel позволяет легко создавать клавиатуры в формате JSON:

$keyboard = [
    'inline_keyboard' => [
        [
            ['text' => '📅 Расписание', 'web_app' => ['url' => 'https://...']],
            ['text' => '💻 Услуги', 'callback_data' => 'services'],
        ],
        ...
    ]
];

Отправка сообщений через Telegram API

$url = "https://api.telegram.org/bot{$api_token}/sendMessage?" . http_build_query([
    'chat_id' => $chatId,
    'text' => $txt,
    'parse_mode' => 'Markdown',
    'reply_markup' => json_encode($keyboard)
]);

file_get_contents($url);

Модель Telegram

Создайте модель и миграцию:

php artisan make:model Telegram -m
// database/migrations/xxxx_create_telegram_table.php
Schema::create('telegrams', function (Blueprint $table) {
    $table->id();
    $table->string('chat_id')->unique();
    $table->string('fio')->nullable();
    $table->string('login')->nullable();
    $table->timestamps();
});

Интеграция Telegram с Laravel даёт мощные возможности для автоматизации, общения с клиентами и организации цифровых сервисов. Вы легко можете расширить этот бот, добавив:

  • Рассылку сообщений

  • Подписки на события

  • Интерактивные формы


 

Автор:

65

Читайте также

0 комментариев

Оставьте комментарий

Комментарии

Бот: Здравствуйте! Я чат-бот веб-разработчика. Чем могу помочь в создании или доработке вашего сайта?