Интеграция Django Webhook с Aiogram
Обзор
Этот проект интегрирует Telegram-бота (использующего Aiogram) с Django-приложением через веб-хук. Однако при запуске python manage.py migrate
возникает следующая ошибка:
RuntimeError: Event loop is closed
Unclosed client session
Выпуск
- Ошибка указывает на проблемы с преждевременным закрытием цикла событий и незакрытой сессией клиента aiohttp.
- Обработчик webhook обрабатывает обновления из Telegram асинхронно с помощью Aiogram, но цикл событий не управляется должным образом в синхронных представлениях Django.
Код
session = AiohttpSession()
bot = Bot(token=settings.BOT_TOKEN, session=session, default=DefaultBotProperties(parse_mode=ParseMode.HTML))
dp = Dispatcher()
@csrf_exempt
def webhook(request):
if request.method == "POST":
try:
update_data = json.loads(request.body)
update = Update(**update_data)
async def process_update():
await dp.feed_update(bot=bot, update=update)
loop = asyncio.get_event_loop()
if loop.is_closed():
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(process_update())
return HttpResponse("OK")
except Exception as e:
logger.error(f"Error: {e}")
return HttpResponse("Bad Request", status=400)
return HttpResponse("Method not allowed", status=405)
попросите ChatGPT, но безуспешно.