Задать вопрос
  • Как задеплоить телеграм бота на vercel?

    Wispik
    @Wispik
    На vercel нельзя залить бота, работающего через полинг, только через вебхук. Вот взял куски, из работающего бота на vercel (используется fastapi+aiogram):

    Файл /api/index.py:
    from fastapi import FastAPI, Request
    from tgbot.main import tgbot
    
    app = FastAPI()
    
    @app.post('/api/bot')
    async def tgbot_webhook_route(request: Request):
        update_dict = await request.json()
        await tgbot.update_bot(update_dict)
        return ''


    Файл /tgbot/main.py:
    import asyncio
    from aiogram import Bot, Dispatcher, Router
    from tgbot.handlers import router
    
    class TGBot:
        def __init__(self, router: Router) -> None:
           token = config('TOKEN')
           self.bot = Bot(token)
           self.dp = Dispatcher()
           self.dp.include_router(router)
           if not config('DEBUG', default=False):
               loop = asyncio.get_event_loop()
               loop.run_until_complete(self.set_commands())
               loop.run_until_complete(self.set_webhook())
    
        async def update_bot(self, update: dict) -> None:
            await self.dp.feed_raw_update(self.bot, update)
            await self.bot.session.close()
    
        async def set_webhook(self):
            webhook_url = config('WEBHOOK_URL')
            # WEBHOOK_URL = адрес сайта/api/bot
            await self.bot.set_webhook(webhook_url)
            await self.bot.session.close()
    
    tgbot = TGBot(router)


    Файл vercel.json:
    {
      "rewrites": [
        { "source": "/(.*)", "destination": "/api/index" }
      ]
    }
    Ответ написан
    Комментировать