Alojamiento: Firebase Functions
Este tutorial le guiará a través del proceso de despliegue de su bot en Firebase Functions.
Requisitos previos
Para seguir el tutorial, necesitarás tener una cuenta de Google. Si aún no tienes una, puedes crearla aquí.
Configuración inicial
Esta sección te guiará a través del proceso de configuración. Si necesitas explicaciones más detalladas sobre cada paso que darás, consulta la documentación oficial de Firebase.
Creación de un Proyecto Firebase
- Vaya a la consola Firebase y haga clic en Añadir Proyecto.
- Si se le solicita, revise y acepte los términos de Firebase.
- Haga clic en Continuar.
- Decide si quieres compartir analíticas o no.
- Haga clic en Crear proyecto.
Configuración
Para escribir funciones y desplegarlas en Firebase Functions, necesitarás configurar un entorno Node.js e instalar Firebase CLI.
Es importante tener en cuenta que actualmente sólo las versiones 14, 16 y 18 de Node.js son compatibles con Firebase Functions. Para más información sobre las versiones de Node.js soportadas, consulte aquí.
Una vez que tengas Node.js y npm instalados, instala Firebase CLI globalmente:
npm install -g firebase-tools
Inicialización del Proyecto
- Ejecuta
firebase login
para abrir tu navegador y autenticar Firebase CLI con tu cuenta. cd
en el directorio de tu proyecto.- Ejecute
firebase init functions
, y escribay
cuando se le pregunte si desea inicializar una nueva base de código. - Elige
use existing project
y selecciona el proyecto que creaste en el paso 1. - El CLI te da dos opciones para el soporte de lenguajes:
- JavaScript
- TypeScript
- Opcionalmente, puede seleccionar ESLint.
- El CLI te pregunta si quieres instalar las dependencias con npm. Si usas otro gestor de paquetes como
yarn
opnpm
puedes rechazarlo. En ese caso, tienes quecd
en el directoriofunctions
e instalar las dependencias manualmente. - Abre
.
y busca la clave:/functions /package .json "engines":
. La versión{"node": "16"} node
debe coincidir con tu versión instalada de Node.js. De lo contrario, el proyecto podría no ejecutarse.
Preparando tu código
Puedes usar este corto ejemplo de bot como punto de partida:
import * as functions from "firebase-functions";
import { Bot, webhookCallback } from "grammy";
const bot = new Bot("");
bot.command("start", (ctx) => ctx.reply("¡Bienvenido!. En marcha."));
bot.command("ping", (ctx) => ctx.reply(`¡Pong! ${new Date()}`));
// Durante el desarrollo, puede activar su función desde https://localhost/<firebase-projectname>/us-central1/helloWorld
export const helloWorld = functions.https.onRequest(webhookCallback(bot));
2
3
4
5
6
7
8
9
10
Desarrollo Local
Durante el desarrollo, puedes utilizar el emulador de Firebase para ejecutar tu código localmente. Esto es mucho más rápido que desplegar cada cambio en Firebase. Para instalar los emuladores, ejecute:
firebase init emulators
El emulador de funciones ya debería estar seleccionado. (Si no lo está, navega hasta él usando las teclas de flecha, y selecciónalo usando espacio
). Para las preguntas sobre qué puerto usar para cada emulador, simplemente pulsa enter
.
Para iniciar los emuladores y ejecutar tu código, utiliza:
npm run serve
TIP
Por alguna razón la configuración estándar del script npm no inicia el compilador TypeScript en modo watch. Por lo tanto, si usas TypeScript, también tienes que ejecutar:
npm run build:watch
Después de que se inicien los emuladores, deberías encontrar una línea en la salida de la consola parecida a esta:
+ functions[us-central1-helloWorld]: http function initialized (http://127.0.0.1:5001/<firebase-projectname>/us-central1/helloWorld).
Esa es la URL local de tu función en la nube. Sin embargo, tu función sólo está disponible para el localhost de tu ordenador. Para probar realmente tu bot, necesitas exponer tu función a Internet para que la API de Telegram pueda enviar actualizaciones a tu bot. Hay varios servicios, como localtunnel o ngrok, que pueden ayudarte con eso. En este ejemplo, utilizaremos localtunnel.
En primer lugar, vamos a instalar localtunnel:
npm i -g localtunnel
Después de eso, puede reenviar el puerto 5001
:
lt --port 5001
localtunnel debería darte una URL única, como https://
.
Todo lo que queda por hacer es decirle a Telegram dónde enviar las actualizaciones. Puedes hacerlo llamando a set
. Por ejemplo, abre una nueva pestaña en tu navegador y visita esta URL:
https://api.telegram.org/bot<BOT_TOKEN>/setWebhook?url=<WEBHOOK_URL>/<firebase-projectname>/us-central1/helloWorld
Sustituye <BOT
por tu bot token real, y <WEBHOOK
por tu propia URL obtenida de localtunnel.
Ahora deberías ver esto en la ventana de tu navegador.
{
"ok": true,
"result": true,
"description": "Webhook was set"
}
2
3
4
5
Tu bot ya está listo para las pruebas de despliegue.
Despliegue
Para desplegar tu función, simplemente ejecuta:
firebase deploy
La CLI de Firebase te dará la URL de tu función una vez que el despliegue se haya completado. Debería ser algo como https://
. Para una explicación más detallada puedes echar un vistazo al paso 8 de la guía de inicio.
Después de desplegar, necesitas decirle a Telegram dónde enviar las actualizaciones a tu bot llamando al método set
. Para ello, abre una nueva pestaña del navegador y visita esta URL:
https://api.telegram.org/bot<BOT_TOKEN>/setWebhook?url=https://<REGION>.<MY_PROJECT>.cloudfunctions.net/helloWorld
Reemplaza <BOT
con tu bot token real, <REGION>
con el nombre de la región donde desplegaste tu función, y <MY
con el nombre de tu proyecto Firebase. La CLI de Firebase debería proporcionarte la URL completa de tu función en la nube, así que puedes simplemente pegarla después del parámetro ?url
en el método set
.
Si todo está configurado correctamente, deberías ver esta respuesta en la ventana de tu navegador:
{
"ok": true,
"result": true,
"description": "Webhook was set"
}
2
3
4
5
Eso es todo, tu bot está listo para funcionar. Ve a Telegram y mira cómo responde a los mensajes.