Продвинутое
Безопасность
Безопасность Telegram-бота требует правильной работы с токеном, HTTPS и обработки обновлений. Используйте long polling для эффективного получения событий и всегда проверяйте HTTP-ответы.
## Безопасность
Безопасность — критически важный аспект любого Telegram-бота. Основные принципы защиты включают правильную работу с токеном бота, использование HTTPS, обработку ошибок и защита от несанкционированного доступа.
### Авторизация и токены
Для работы с API бота необходимо хранить токен в переменной окружения `TELEGRAM_BOT_TOKEN`. Все запросы отправляются на `https://api.telegram.org` через HTTPS — это гарантирует зашифрованную передачу данных. Токен передаётся в заголовке `Authorization` или в теле запроса в формате `BOT_TOKEN=your_token`.
Инициализируйте бота через @BotFather, затем скопируйте токен. Для получения вашего собственного идентификатора используйте функцию `telegramApi()` (см. [Первый запрос: getMe](https://telegram-bot-api/first-request)):
$url = "https://api.telegram.org/bot" . getenv("TELEGRAM_BOT_TOKEN") . "/getMe";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"Authorization: Bearer " . getenv("TELEGRAM_BOT_TOKEN")
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
echo $data->id;
### Хэндлер обновлений и долговая опрос (Long Polling)
Для получения событий от пользователей используйте механизм **long polling**. Бот постоянно опрашивает сервер, пока нет новых обновлений. Это снижает нагрузку на сеть и повышает отзывчивость. Реализуйте обработку `update_id` и `callback_data` для реакции на действия пользователей.
Пример обработки входящего обновления:
function handleUpdate($update) {
if ("update_id" === "123456789") {
// Обработка конкретного события
if (strpos($update->type, "message") !== false) {
// Новое сообщение от пользователя
$this->sendMessage($update.from.chat.id, "Вы написали: " . $update.message.text);
}
}
}
### Обработка ошибок и валидация
Всегда проверяйте HTTP-статус ответа (`200 OK`) и поле `ok` в JSON-ответе. При ошибках сервера используйте `json_last_error()` для диагностики проблем. Для безопасной обработки payload'ов применяйте `validateAndParsePayload()` (см. [Deep links](https://telegram-bot-api/deep-links)).
### Ротация токена и безопасность приложения
Если токен утек, немедленно создайте нового бота через BotFather и обновите `TELEGRAM_BOT_TOKEN` в коде. Используйте статические переменные или конфигурационные файлы вместо жестко прописанных строк в коде. Для продакшн-развёртывания рекомендуется внедрять retry-логику и очереди обработки запросов (см. [Production: очередь и retries](https://telegram-bot-api/production)).
### Дальше: Production: очередь и retries
Для высоконагруженных систем рекомендуется использовать очереди (Redis, RabbitMQ) и автоматический повтор попыток при временных сбоях.
Дальше: Production: очередь и retries