У меня есть телеграм бот с настроенным вебхуком со следующим исходным кодом-
@asynccontextmanager
async def lifespan(_):
await bot.set_webhook(
url='webhook_url',
allowed_updates=dp.resolve_used_update_types(),
drop_pending_updates=True,
)
yield
await bot.delete_webhook()
app = FastAPI(lifespan=lifespan)
@app.post("/telegram-webhook")
async def webhook(request: Request) -> None:
print('request!')
await asyncio.sleep(5) // for testing puproses!!
update = Update.model_validate(await request.json(), context={"bot": bot})
await dp.feed_update(bot, update)
if __name__ == "__main__":
uvicorn.run(app, port=5000, log_level="info")
Обнаружил что обрабатывается только одно сообщение за раз. Что бы это проверить добавил искуственную задержку и сделал 2 запроса. Итог, второй запрос обрабатывается только после того как первый завершит работу. Тоесть бот может обслуживать только одного пользователя за раз:)
Так-же проверил, fastapi может принимать несколько запросов. Это телеграм-сервера ждут пока заверштся один запрос что бы начать второй.
В чем может быть проблема?
-
Такова логика телеграм-серверов. Более того, если по какой-то причине телеграм-бот не может обработать запросы, сервера через некоторое разумное время повторяют запросы в том порядке, как они поступили от пользователя.Виктор Карев– Виктор Карев2025年04月02日 12:54:57 +00:00Commented 2 апр. 2025 в 12:54
-
Я думал вебхуки как раз и предназначены для больших нагрузок. Как тогда работают боты с несколькими миллионами пользователей ?mazda3301– mazda33012025年04月02日 14:06:59 +00:00Commented 2 апр. 2025 в 14:06
-
Например ботом пользуются 10000 пользователей. Каждый сделает какое то действие, это уже 10000 событий. Сервера телеги будут вызывать вебхук для каждого события отдельно ? Ждать пока завершится первый зарпос что бы перейти к следующему ?mazda3301– mazda33012025年04月02日 14:27:45 +00:00Commented 2 апр. 2025 в 14:27
-
Именно так, поэтому в событии хука вы получаете данные и сразу отвечаете серверу телеграмм что все получено, и только после этого запускается обработка события в отдельном потоке, пока паралельно идет получение новых событий.Владимир Клыков– Владимир Клыков2025年04月02日 19:44:25 +00:00Commented 2 апр. 2025 в 19:44
-
Для каждой пары пользователь-бот сервера телеграма устанавливают свою очередь событий.Виктор Карев– Виктор Карев2025年04月03日 04:52:34 +00:00Commented 3 апр. 2025 в 4:52
Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.
Начните задавать вопросы и получать на них ответы
Найдите ответ на свой вопрос, задав его.
Задать вопросИзучите связанные вопросы
Посмотрите похожие вопросы с этими метками.
default