Webhook
Webhook позволяет получать обновления в реальном времени. Когда пользователь пишет боту, сервер отправит POST-запрос на твой URL.
Настроить URL для получения обновлений
| Параметр | Описание | Обязательно |
| token | Токен бота | Да |
| webhook_url | URL для получения обновлений | Нет (если уже задан — не трогается) |
| Опционально |
| webhook_secret | Секретная строка для проверки | Нет (генерируется сам) |
Ответ:
{
"status": "success",
"webhook_url": "https://your-server.com/webhook",
"webhook_secret": "a1b2c3..."
}
Секрет создаётся при первом вызове и дальше остаётся прежним — ответ всегда возвращает актуальный webhook_secret. Можно вызвать только с token, без остальных параметров: URL не изменится, вернётся текущий секрет.
Получить текущий webhook_url и webhook_secret
| Параметр | Описание | Обязательно |
| token | Токен бота | Да |
Ответ:
{
"status": "success",
"webhook_url": "https://your-server.com/webhook",
"webhook_secret": "a1b2c3..."
}
Формат входящего обновления
{
"update_id": 1690000000,
"message": {
"message_id": 42,
"from": { "username": "user123" },
"chat": { "id": "user123" },
"text": "Привет",
"date": 1690000000
}
}
Заголовки запроса
| Заголовок | Описание |
| Content-Type | application/json |
| X-TalkFast-Secret | Секретная строка для верификации запроса |
Проверка секрета у себя
<?php
$secret = 'ТОТ_ЖЕ_SECRET_ИЗ_ОТВЕТА';
$got = $_SERVER['HTTP_X_TALKFAST_SECRET'] ?? '';
if (!hash_equals($secret, $got)) { http_response_code(403); exit; }
$data = json_decode(file_get_contents('php://input'), true);
$text = $data['message']['text'] ?? '';
header('Content-Type: application/json');
echo json_encode(['text' => 'Echo: ' . $text], JSON_UNESCAPED_UNICODE);
Формат ответа webhook
{
"text": "Привет! Чем могу помочь?"
}
Если webhook вернёт JSON с полем "text", бот отправит этот текст как ответ.
Нажатие inline-кнопки (callback_query)
Когда пользователь жмёт кнопку с callback_data, сервер шлёт на webhook_url:
{
"update_id": 1690000001,
"callback_query": {
"id": "cb42_a1b2c3d4e5",
"from": { "username": "user123" },
"chat": { "id": "group_xxx" },
"data": "menu_works",
"message": { "message_id": 42, "text": "Нажми кнопку" }
}
}
<?php
$got = $_SERVER['HTTP_X_TALKFAST_SECRET'] ?? '';
if (!hash_equals('ТОТ_ЖЕ_SECRET', $got)) { http_response_code(403); exit; }
$data = json_decode(file_get_contents('php://input'), true);
$cb = $data['callback_query'] ?? null;
if ($cb !== null) {
header('Content-Type: application/json');
echo json_encode([
'text' => 'Нажато: ' . $cb['data'],
'reply_markup' => ['inline_keyboard' => [[['text' => 'Назад', 'callback_data' => 'back']]]],
], JSON_UNESCAPED_UNICODE);
exit;
}
Ответ с text приходит пользователю как сообщение бота; с reply_markup — сразу с новыми кнопками. Кнопки с url / Mini App открываются прямо в приложении.