Інтеграція месенджера 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.ua/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.ua/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.







