Проєкти
Mini App + PHP API
Mini App + PHP API — Полная интеграция
Mini App + PHP API — это архитектурный паттерн для создания классических интернет-магазинов внутри Telegram-бота с использованием PHP-бэкенда. Подход оптимален для проектов с умеренным каталогом (до 50 товаров) и не требует разработки отдельного фронтенда на JavaScript. Весь интерфейс предоставляется через Mini App, а бизнес-логика реализуется на сервере.
Первый шаг — получить идентификатор бота и его данные. Используйте Первый запрос: getMe, который делает HTTP-запрос к api.telegram.org:
$bot = telegramApi()->getMe();
echo "Bot ID: " . $bot->id . "
" . "Name: " . $bot->first_name . "
";
Из полученного update_id можно подписываться на обновления через getUpdates. Реализация long polling позволяет получать события без постоянного соединения:
$url = "https://api.telegram.org/bot<?= getenv('TELEGRAM_BOT_TOKEN') ?>&offset=100&max_count=30";
$response = curl_getcurl($url);
if (\$response["ok"]) {
print_r(\$response["result"]);
}
Для отправки сообщений пользователям используйте sendMessage. PHP-клиент формирует JSON-пакет и отправляет его на сервер:
$payload = [
"chat_id" => $chatId,
"text" => "Новое предложение для вас!",
"parse_mode" => "Markdown",
"reply_markup" => $replyMarkup
];
curl_post("https://api.telegram.org/bot<?= getenv('TELEGRAM_BOT_TOKEN') ?>/sendMessage", $payload);
Работа с базой данных часто организуется через FSM (Finite State Machine). Хелпер БД и состояния (FSM) обеспечивает удобный API для управления состояниями чатов, корзин и заказов. Например, в Yii2 можно использовать Yii\Event\Subscriber для реактивного обновления UI при изменении статуса:
public function onUpdate(Update \Update) {
if (\$update->type === UpdateType::NEW_MESSAGE) {
$this->handleNewMessage(\$update);
}
}
Для продакшн-развёртывания применяется Production: очередь и retries — асинхронная обработка сообщений через RabbitMQ или Redis с автоматическими повторами при ошибках.
Общая схема взаимодействия: Telegram → api.telegram.org → PHP-сервис → базе данных. Все HTTP-запросы должны идти от токена getenv('TELEGRAM_BOT_TOKEN') и проверять статус ok в ответе.