Hosting: Funciones sin servidor de Vercel

Este tutorial te guiará sobre cómo desplegar tu bot en Vercelopen in new window utilizando Vercel Serverless Functionsopen in new window, asumiendo que ya tienes una cuenta en Vercelopen in new window.

Estructura del proyecto

El único prerrequisito para empezar con Vercel Serverless Functions es mover tu código al directorio api/ como se muestra a continuación. También puedes ver la documentación de Vercelopen in new window para más información.

.
├── node_modules/
├── build/
├── api/
│   └── bot.ts
├── package.json
├── package-lock.json
└── tsconfig.json

Si estás usando TypeScript, es posible que quieras instalar @vercel/node como dependencia de desarrollo, pero no es obligatorio para seguir esta guía.

Configurar Vercel

El siguiente paso es crear un archivo vercel.json en el nivel superior de tu proyecto. Para nuestra estructura de ejemplo, su contenido sería:

{
  "functions": {
    "api/bot.ts": {
      "memory": 1024,
      "maxDuration": 10
    }
  }
}

Si quieres usar la suscripción gratuita de Vercel, tus configuraciones memory y maxDuration podrían ser como las de arriba para no saltarse sus límites.

Si quieres saber más sobre el archivo de configuración vercel.json, consulta su documentaciónopen in new window.

Configuración de TypeScript

En nuestro tsconfig.json, tenemos que especificar nuestro directorio de salida como build/, y nuestro directorio raíz como api/. Esto es importante ya que los especificaremos en las opciones de despliegue de Vercel.

{
  "compilerOptions": {
    "target": "ES2019",
    "module": "commonjs",
    "rootDir": "./api",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "outDir": "./build",
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "strict": true,
    "skipLibCheck": true
  }
}




 


 






El archivo principal

Independientemente de usar TypeScript o JavaScript, deberíamos tener un archivo fuente por el que se ejecute nuestro bot. Debería ser más o menos así:

import { Bot, webhookCallback } from "grammy";

const bot = new Bot(process.env.BOT_TOKEN);

export default webhookCallback(bot, "http");

En el panel de control de Vercel

Asumiendo que ya tienes una cuenta de Vercel a la que está conectado tu GitHub, añade un nuevo proyecto y selecciona el repositorio de tu bot. En Build & Development Settings:

  • Directorio de salida: build
  • Comando de instalación: npm install

No olvides añadir los secretos como el token de tu bot como variables de entorno en la configuración. Una vez hecho esto, ¡puedes desplegarlo!

Configurar el Webhook

El último paso es conectar tu aplicación Vercel con Telegram. Modifica la siguiente URL con tus credenciales y visítala desde tu navegador:

https://api.telegram.org/bot<BOT_TOKEN>/setWebhook?url=<HOST_URL>

El HOST_URL es un poco complicado, porque necesitas usar el dominio de tu aplicación Vercel siguiendo la ruta al código del bot, por ejemplo https://appname.vercel.app/api/bot. Donde bot se refiere a tu archivo bot.ts o bot.js.

Entonces deberías ver una respuesta como esta:

{
  "ok": true,
  "result": true,
  "description": "Webhook was set"
}

¡Enhorabuena! Tu bot debería estar ahora en funcionamiento.