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 даёт мощные возможности для автоматизации, общения с клиентами и организации цифровых сервисов. Вы легко можете расширить этот бот, добавив:
-
Рассылку сообщений
-
Подписки на события
-
Интерактивные формы
Автор: Евгений Морковин
0 комментариев
Оставьте комментарий
Комментарии