Сценарій 1/6
Telegram-бот
Обробник вебхуків + асинхронне надсилання задач
Маршрутизація
Черга
Middleware PSR-15
Чому Lift тут пасує
- ▸ Middleware PSR-15 перевіряє X-Telegram-Bot-Api-Secret-Token від Telegram до запуску вашого коду
- ▸ Важкі задачі (надсилання медіа, виклики зовнішніх API) надсилаються у чергу Redis — вебхук миттєво повертає 200
- ▸ Той самий застосунок працює під RoadRunner для високонавантажених ботів без перезапуску PHP на кожне оновлення
telegram-bot.php
<?php
use Lift\App;
use Lift\Http\Request;
use Lift\Http\Response;
use Lift\Queue\RedisQueue;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
class TelegramSecretMiddleware implements MiddlewareInterface
{
public function process(ServerRequestInterface $req, RequestHandlerInterface $next): ResponseInterface
{
if ($req->getHeaderLine('X-Telegram-Bot-Api-Secret-Token') !== $_ENV['TG_SECRET']) {
return Response::json(['error' => 'Forbidden'], 403);
}
return $next->handle($req);
}
}
$app = new App();
$app->setQueue(new RedisQueue($app->make(\Lift\Redis\RedisClient::class)));
$app->use(TelegramSecretMiddleware::class);
$app->post('/webhook', function (Request $req) use ($app) {
$app->dispatch(new HandleTelegramUpdate($req->json()));
return Response::noContent();
});
$app->run();