0

У меня есть телеграм бот с настроенным вебхуком со следующим исходным кодом-

@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 может принимать несколько запросов. Это телеграм-сервера ждут пока заверштся один запрос что бы начать второй.

В чем может быть проблема?

задан 2 апр. 2025 в 10:33
6
  • Такова логика телеграм-серверов. Более того, если по какой-то причине телеграм-бот не может обработать запросы, сервера через некоторое разумное время повторяют запросы в том порядке, как они поступили от пользователя. Commented 2 апр. 2025 в 12:54
  • Я думал вебхуки как раз и предназначены для больших нагрузок. Как тогда работают боты с несколькими миллионами пользователей ? Commented 2 апр. 2025 в 14:06
  • Например ботом пользуются 10000 пользователей. Каждый сделает какое то действие, это уже 10000 событий. Сервера телеги будут вызывать вебхук для каждого события отдельно ? Ждать пока завершится первый зарпос что бы перейти к следующему ? Commented 2 апр. 2025 в 14:27
  • Именно так, поэтому в событии хука вы получаете данные и сразу отвечаете серверу телеграмм что все получено, и только после этого запускается обработка события в отдельном потоке, пока паралельно идет получение новых событий. Commented 2 апр. 2025 в 19:44
  • Для каждой пары пользователь-бот сервера телеграма устанавливают свою очередь событий. Commented 3 апр. 2025 в 4:52

0

Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.

Ваш ответ

Черновик сохранён
Черновик удалён

Зарегистрируйтесь или войдите

Регистрация через Google
Регистрация через почту

Отправить без регистрации

Необходима, но никому не показывается

Отправить без регистрации

Необходима, но никому не показывается

Нажимая «Отправить ответ», вы соглашаетесь с условиями пользования и подтверждаете, что прочитали политику конфиденциальности.

Начните задавать вопросы и получать на них ответы

Найдите ответ на свой вопрос, задав его.

Задать вопрос

Изучите связанные вопросы

Посмотрите похожие вопросы с этими метками.