Как развернуть Telegram-бота на платформе Vercel?

Я разработал телеграм-бота на Python с использованием aiogram и теперь хочу его развернуть на платформе Vercel. Не следует задавать вопросы о причинах выбора этой платформы, но интересует, как именно это сделать? Я в курсе, что это вполне возможно, и понимаю, что потребуется настроить вебхуки. Поделитесь, пожалуйста, своими знаниями по этому поводу.
  • 4 октября 2024 г. 19:44
Ответы на вопрос 2
Развертывание Telegram-бота на платформе Vercel возможно, но требует определённой подготовки и внимания к деталям. Вот пошаговое руководство, как это сделать на примере бота, использующего библиотеку aiogram.

### Шаг 1: Подготовка вашего проекта

1. **Создайте проект**:
   Убедитесь, что ваш проект правильно структурирован. Обычно это выглядит так:

   ```
   my-telegram-bot/
   ├── api.py         # Взаимодействие с Telegram API
   ├── requirements.txt
   └── vercel.json
   ```

   В `api.py` будет основная логика вашего бота.

2. **Создайте `requirements.txt`**:
   В этом файле указаны все библиотеки, необходимые для вашего бота. Например:

   ```plaintext
   aiogram
   fastapi
   uvicorn
   ```

3. **Создайте `vercel.json`**:
   Этот файл поможет Vercel понять, как обрабатывать ваш проект:

   ```json
   {
     "version": 2,
     "builds": [
       {
         "src": "api.py",
         "use": "@vercel/python"
       }
     ],
     "routes": [
       {
         "src": "/webhook",
         "methods": ["POST"],
         "dest": "api.py"
       }
     ]
   }
   ```

### Шаг 2: Написание кода бота

Пример кода для `api.py`, чтобы обрабатывать запросы от Telegram:

```python
from fastapi import FastAPI, Request
from aiogram import Bot, Dispatcher, types
import os
import logging

API_TOKEN = os.getenv('TELEGRAM_TOKEN')

bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
app = FastAPI()

@app.post("/webhook")
async def webhook(request: Request):
    json_data = await request.json()
    update = types.Update(**json_data)
    await dp.process_update(update)
    return {"status": "ok"}

@dp.message_handler(commands=['start'])
async def start_command(message: types.Message):
    await message.reply("Hello! I'm your bot.")

# Вебхук
async def set_webhook():
    webhook_url = f'https://<your-vercel-url>/webhook'
    await bot.set_webhook(webhook_url)

if __name__ == "__main__":
    import asyncio
    loop = asyncio.get_event_loop()
    loop.run_until_complete(set_webhook())
```

### Шаг 3: Развертывание на Vercel

1. **Установите Vercel CLI**:
   Убедитесь, что у вас установлен Vercel CLI. Если он не установлен, вы можете установить его с помощью npm:

   ```bash
   npm i -g vercel
   ```

2. **Войдите в Vercel**:
   Авторизуйтесь в Vercel:

   ```bash
   vercel login
   ```

3. **Разверните проект**:
   В директории вашего проекта выполните команду:

   ```bash
   vercel
   ```

   В процессе вам будет предложено выбрать проект и другие настройки.

4. **Настройте переменные среды**:
   После развертывания вам нужно будет настроить переменные среды для вашего бота (например, `TELEGRAM_TOKEN`). Это можно сделать через панель управления Vercel или с помощью CLI:

   ```bash
   vercel env add TELEGRAM_TOKEN
   ```

### Шаг 4: Тестирование

После успешного развертывания вы можете протестировать вашего бота, отправив команду `/start`. Убедитесь, что webhook настроен правильно и бот отвечает на сообщения.

### Примечания

- Платформа Vercel ограничивает продолжительность выполнения серверных функций (обычно 10 секунд), поэтому лучше использовать асинхронные обработчики.
- Убедитесь, что вы используете допустимый URL для вебхуков (например, HTTPS).

Теперь вы знаете, как развернуть вашего Telegram-бота на Vercel с использованием aiogram!
Похожие вопросы