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-toolsInicialización del Proyecto
- Ejecuta
firebase loginpara abrir tu navegador y autenticar Firebase CLI con tu cuenta. cden el directorio de tu proyecto.- Ejecute
firebase init functions, y escribaycuando se le pregunte si desea inicializar una nueva base de código. - Elige
use existing projecty 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
yarnopnpmpuedes rechazarlo. En ese caso, tienes quecden el directoriofunctionse instalar las dependencias manualmente. - Abre
.y busca la clave:/functions /package .json "engines":. La versión{"node": "16"} nodedebe 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 emulatorsEl 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 serveTIP
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:watchDespué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 Cloudflare Tunnel o ngrok, que pueden ayudarte con eso. En este ejemplo, utilizaremos localtunnel.
En primer lugar, vamos a instalar localtunnel:
npm i -g localtunnelDespués de eso, puede reenviar el puerto 5001:
lt --port 5001localtunnel 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/helloWorldSustituye <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 deployLa 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/helloWorldReemplaza <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.