Интеграция мессенджера Telegram с сайтом (уведомления, боты)
Telegram Bot API — один из самых удобных инструментов для уведомлений и автоматизации. Бесплатный, быстрый, не требует регистрации имени отправителя. Покрывает большинство задач: уведомления администратору, сервисные сообщения пользователям, интерактивные боты для обработки заявок.
Уведомления в Telegram-чат (самый простой сценарий)
Быстрый способ получать уведомления о заказах или событиях на сайте — отправить в Telegram-чат через Bot API:
class TelegramNotifier
{
public function send(string $message, string $parseMode = 'HTML'): void
{
Http::post("https://api.telegram.org/bot{$this->token}/sendMessage", [
'chat_id' => config('services.telegram.chat_id'),
'text' => $message,
'parse_mode' => $parseMode
]);
}
}
// Использование
$telegram->send(
"🛒 <b>Новый заказ #{$order->id}</b>\n"
. "Сумма: {$order->total} ₽\n"
. "Клиент: {$order->customer_name}"
);
Для уведомлений в группу: бот должен быть добавлен в группу и иметь права на отправку сообщений. chat_id для группы — отрицательное число.
Webhook для входящих сообщений
Чтобы бот отвечал на сообщения пользователей, нужен webhook:
// Регистрация webhook
Http::post("https://api.telegram.org/bot{$token}/setWebhook", [
'url' => 'https://yoursite.ru/webhooks/telegram',
'allowed_updates' => ['message', 'callback_query']
]);
// Обработчик
Route::post('/webhooks/telegram', function (Request $request) {
$update = $request->json()->all();
if (isset($update['message'])) {
$chatId = $update['message']['chat']['id'];
$text = $update['message']['text'];
dispatch(new ProcessTelegramMessageJob($chatId, $text));
}
if (isset($update['callback_query'])) {
// Нажата inline-кнопка
$callbackData = $update['callback_query']['data'];
dispatch(new ProcessTelegramCallbackJob($update['callback_query']));
}
return response('OK');
});
Inline-клавиатуры для интерактивности
Http::post("https://api.telegram.org/bot{$token}/sendMessage", [
'chat_id' => $chatId,
'text' => "Заявка #{$applicationId} получена. Что сделать?",
'reply_markup' => json_encode([
'inline_keyboard' => [[
['text' => '✅ Принять', 'callback_data' => "accept_{$applicationId}"],
['text' => '❌ Отклонить', 'callback_data' => "reject_{$applicationId}"]
]]
])
]);
Менеджер нажимает кнопку в Telegram → бот получает callback_query → обновляет статус заявки на сайте → отвечает подтверждением.
Telegram Login Widget
Аутентификация на сайте через Telegram:
<script async src="https://telegram.org/js/telegram-widget.js?22"
data-telegram-login="YourBotName"
data-size="large"
data-auth-url="https://yoursite.ru/auth/telegram/callback"
data-request-access="write">
</script>
// Верификация подписи
public function callback(Request $request): void
{
$checkHash = $request->hash;
$authData = $request->except('hash');
ksort($authData);
$dataCheckString = implode("\n", array_map(
fn($k, $v) => "{$k}={$v}",
array_keys($authData), $authData
));
$secretKey = hash('sha256', config('services.telegram.bot_token'), true);
$hash = hash_hmac('sha256', $dataCheckString, $secretKey);
if (!hash_equals($hash, $checkHash)) {
abort(403, 'Invalid Telegram signature');
}
// Авторизация пользователя
}
Сервисные уведомления пользователям
Для отправки уведомлений конкретным пользователям нужно сохранить их chat_id — он передаётся при первом обращении к боту. Пользователь начинает диалог с ботом, бот сохраняет chat_id в привязке к аккаунту сайта.
Срок интеграции: 2–3 дня для бота с уведомлениями, inline-кнопками и Telegram Login.







