Alojamiento: Cloudflare Workers (Node.js)
Cloudflare Workers es una plataforma pública de computación sin servidor que ofrece una solución conveniente y simple para ejecutar JavaScript en el edge. Al tener la capacidad de manejar tráfico HTTP y estar basada en la Service Worker API, construir bots para Telegram se convierte en algo muy sencillo. Además, puedes incluso desarrollar Web Apps en el edge, todo gratis dentro de ciertas cuotas.
Esta guía te llevará a través del proceso de alojar tus bots de Telegram en Cloudflare Workers.
¿Buscas la versión de Deno?
Este tutorial explica cómo implementar un bot de Telegram en Cloudflare Workers usando Node.js. Si estás buscando la versión Deno, por favor revisa este tutorial en su lugar.
Requisitos previos
Para seguir adelante, por favor asegúrese de que tiene una cuenta de Cloudflare con su subdominio de workers configurado.
Puesta a punto
En primer lugar, crea un nuevo proyecto:
npx wrangler generate my-bot
Puedes cambiar my
por lo que quieras. Este será el nombre de tu bot y el directorio del proyecto.
Después de ejecutar el comando anterior, sigue las instrucciones que veas para inicializar el proyecto. Allí, puedes elegir entre JavaScript o TypeScript.
Cuando el proyecto esté inicializado, cd
en my
o en el directorio en el que hayas inicializado tu proyecto. Dependiendo de cómo inicializaste el proyecto, deberías ver una estructura de archivos similar a la siguiente:
.
├── node_modules
├── package.json
├── package-lock.json
├── src
│ ├── index.js
│ └── index.test.js
└── wrangler.toml
A continuación, instala grammy
, y otros paquetes que puedas necesitar:
npm install grammy
Creando tu Bot
Edita src
o src
, y escribe este código dentro:
import { Bot, webhookCallback } from "grammy";
// La siguiente línea de código asume que ha configurado los secretos BOT_TOKEN y BOT_INFO.
// Ver https://developers.cloudflare.com/workers/platform/environment-variables/#secrets-on-deployed-workers.
// El BOT_INFO se obtiene de `bot.api.getMe()`.
const bot = new Bot(BOT_TOKEN, { botInfo: BOT_INFO });
bot.command("start", async (ctx) => {
await ctx.reply("¡Hola, mundo!");
});
addEventListener("fetch", webhookCallback(bot, "cloudflare"));
2
3
4
5
6
7
8
9
10
11
12
The above example bot replies “¡Hola, mundo!” when it receives /start
.
Desplegando tu Bot
Antes de desplegar, necesitamos editar wrangler
:
account_id = 'your account_id' # Obtén esto del dashboard de Cloudflare.
name = 'my-bot' # El nombre de tu bot, que aparecerá en la URL del webhook, por ejemplo: https://my-bot.my-subdomain.workers.dev
main = "src/index.js" # El fichero de entrada del worker.
compatibility_date = "2023-01-16"
2
3
4
A continuación, puede desplegar utilizando el siguiente comando:
npm run deploy
Configurando tu Webhook
Necesitamos decirle a Telegram a dónde enviar las actualizaciones. Abre tu navegador y visita esta URL:
https://api.telegram.org/bot<BOT_TOKEN>/setWebhook?url=https://<MY_BOT>.<MY_SUBDOMAIN>.workers.dev/
Sustituye <BOT
, <MY
, y <MY
por tus valores. Si la configuración se realiza correctamente, verá una respuesta JSON como esta:
{
"ok": true,
"result": true,
"description": "Webhook was set"
}
2
3
4
5
Probando tu Bot
Abre tu aplicación de Telegram, e inicia tu bot. Si responde, ¡significa que estás listo!
Depuración de tu bot
Para propósitos de prueba y depuración, puedes ejecutar un servidor de desarrollo local o remoto antes de desplegar tu bot en producción. Simplemente ejecuta el siguiente comando:
npm run start
Una vez iniciado el servidor de desarrollo, puedes probar tu bot enviándole actualizaciones de ejemplo utilizando herramientas como curl
, Insomnia, o Postman. Consulta aquí para ver ejemplos de actualizaciones y aquí para obtener más información sobre la estructura de actualizaciones.