У меня по нажатию на кнопку запускается опрос AI. Ответ может формироваться минуты, а в будущем, может, часы. Прогресс-бар реализовать пока проблематично. AI предложила вариант asyncio.create_task, но это решило проблему только от части. В логи всё равно выходит
2025... - aiogram.dispatcher - ERROR - [...] - Failed to fetch updates - TelegramNetworkError: HTTP Client says - Request timeout error
2025... - aiogram.dispatcher - WARNING - [...] - Sleep for 1.000000 seconds and try again... (tryings = 0, bot id = ...)
Раньше было всё на answer, но сейчас хочу достичь результат, чтобы у меня было одно сообщение в истории чата и файлы для пользователей, если он таковые запрашивал.
@router.callback_query(F.data.startswith("analog:"))
async def get_analog(callback: CallbackQuery, state: FSMContext):
logger.debug("The user chose to get analogues")
patent_id = callback.data.split(":")[1]
tg_id = str(callback.from_user.id)
msg = await callback.message.edit_text(" Обрабатываю ваш запрос...")
try:
success, token = await _auth_user.get_user_db()
if not success:
await callback.message.edit_text("❌ Ошибка авторизации. Попробуйте снова.")
return
except Exception as e:
logger.error(f"Token error: {e}")
await callback.message.edit_text("❌ Ошибка при проверке токена.")
return
await asyncio.create_task(
process_analog_task(
bot=callback.bot,
chat_id=msg.chat.id,
message_id=msg.message_id,
patent_id=patent_id,
access_token=access_token,
state=state
)
)
async def process_analog_task(
bot,
chat_id: int,
message_id: int,
patent_id: str,
access_token: str,
state: FSMContext
):
analog_service = AnalogService()
try:
await bot.edit_message_text(
" Ищем аналоги... (это может занять несколько минут)",
chat_id=chat_id,
message_id=message_id
)
result = await analog_service.create_analog(patent_id, access_token)
if result:
await state.set_state(UserStates.analogues_received)
await bot.edit_message_text(
"✅ Аналоги успешно получены!",
chat_id=chat_id,
message_id=message_id,
reply_markup=analog_tools(patent_id)
)
else:
await bot.edit_message_text(
"❌ Не удалось найти аналоги",
chat_id=chat_id,
message_id=message_id,
reply_markup=analog_tools(patent_id))
except Exception as e:
logger.error(f"Error in analog processing: {e}")
await bot.edit_message_text(
f"❌ Ошибка",
chat_id=chat_id,
message_id=message_id,
reply_markup=analog_tools(patent_id))