
Whale es un bot de Telegram modular y serverless desarrollado para ejecutarse sobre Cloudflare Workers. Lo desarrollé como un proyecto personal para gestionar tanto mi canal como el grupo de Telegram, pero decidí publicarlo como código abierto para que cualquiera pueda desplegar su propia instancia o utilizarlo como base para crear un bot similar.
Características principales
Gracias a la arquitectura edge de Cloudflare y Cloudflare KV, Whale ofrece bajas latencias, un consumo mínimo de recursos y un costo de operación prácticamente nulo. Además, puede gestionar múltiples feeds RSS/Atom, comprobarlos periódicamente y enviar automáticamente las nuevas publicaciones a los canales de Telegram donde está agregado, entre otras características:
- IA con Groq: Respuestas mediante menciones, respuestas y el comando
/ask. - Formateo automático: Convierte Markdown a HTML compatible con Telegram.
- Monitor RSS/Atom: Detecta y publica novedades automáticamente evitando duplicados.
- Seguridad y acceso: Webhook protegido, control de acceso de canales/grupos y rate limiting.
- Limpieza automática: Elimina mensajes de servicio de Telegram, como entradas, salidas, etc.
Nota: No es necesario configurar todas las características. Puedes activar y utilizar únicamente las que necesites y dejar las demás deshabilitadas.
Arquitectura y tecnologías
- Entorno de ejecución: Cloudflare Workers
- Almacenamiento: Cloudflare KV para canales, feeds y estados de operaciones.
- Motor de IA: Groq Cloud API
- Plataforma: Telegram Bot API mediante Webhooks y Callback Queries
Requisitos previos
- Node.js v18+ y pnpm (o npm).
- Cuenta de Cloudflare con Wrangler autenticado.
- Bot de Telegram creado con @BotFather.
- ID numérico de tu usuario de Telegram para el rol de administrador.
- Clave de API de Groq para las funciones de IA.
Instalación y configuración
Para comenzar, clona el repositorio (o haz un fork) e instala sus dependencias:
git clone https://github.com/zkreations/whale.git mybot
cd mybot
pnpm install
Crea el espacio de nombres (KV Namespace) en Cloudflare para almacenar los datos persistentes:
npx wrangler kv namespace create KV_WHALE_STORAGE
Copia el identificador generado y edita el archivo wrangler.toml con los datos correspondientes:
name = "whale-bot"
main = "src/index.js"
compatibility_date = "2026-01-01"
[vars]
GROQ_MODEL = "openai/gpt-oss-120b"
[[kv_namespaces]]
binding = "KV_WHALE_STORAGE"
id = "TU_NAMESPACE_ID"
[triggers]
crons = [ "*/5 * * * *" ]
[observability.logs]
enabled = true
persist = true
invocation_logs = true
Configura las variables secretas necesarias con Wrangler. Ejecuta cada comando por separado e introduce el valor correspondiente cuando se te solicite:
# Token del bot generado por @BotFather
npx wrangler secret put TELEGRAM_TOKEN
# Clave de API de Groq
npx wrangler secret put GROQ_API_KEY
# Tu ID numérico de Telegram (para autorizar /admin)
npx wrangler secret put ADMIN_CHAT_ID
# Token secreto aleatorio para validar las peticiones del webhook
npx wrangler secret put WEBHOOK_SECRET
Despliega el Worker en la red de Cloudflare:
pnpm run deploy
Por último, registra el Webhook en la API de Telegram apuntando a la URL proporcionada por Cloudflare:
curl -X POST "https://api.telegram.org/bot<TELEGRAM_TOKEN>/setWebhook" \
-H "Content-Type: application/json" \
-d '{
"url": "https://whale-bot.<tu-subdominio>.workers.dev/endpoint",
"secret_token": "<TU_WEBHOOK_SECRET>",
"allowed_updates": ["message", "callback_query", "my_chat_member"]
}'
Variables de entorno y opciones
| Variable secreta | Descripción | Ejemplo |
|---|---|---|
TELEGRAM_TOKEN |
Token oficial de la API de Telegram | 123456789:ABCdefGHI... |
GROQ_API_KEY |
Clave de acceso a Groq Cloud | gsk_... |
ADMIN_CHAT_ID |
ID de usuario con permisos de administrador | 123456789 |
WEBHOOK_SECRET |
Token secreto para autenticar llamadas al webhook | f7a8b9c0d1e2... |
También puedes personalizar el comportamiento y el idioma del bot editando src/config/index.js. A continuación se describen las opciones más importantes:
| Opción | Descripción | Valor por defecto |
|---|---|---|
WEBHOOK_PATH |
Ruta del webhook HTTP | /endpoint |
AUTO_DELETE_SERVICE_MESSAGES |
Elimina mensajes de servicio | true |
SEND_FEED_UPDATES_IN_CHANNELS |
Publica feeds en canales | true |
SEND_FEED_UPDATES_IN_GROUPS |
Publica feeds en grupos | false |
ALLOW_BOT_ADDITION_TO_NEW_CHATS |
Permite añadir el bot a nuevos chats | true |
ALLOW_AI_IN_PRIVATE |
Permite IA en chats privados | false |
ALLOW_AI_IN_GROUPS |
Permite IA en grupos | true |
ADMIN_TIMEOUT_SECONDS |
Expiración de sesiones de /admin |
180 |
GROQ_MAX_TOKENS |
Límite de tokens de IA | 800 |
GROQ_SYSTEM_PROMPT |
Prompt del sistema de IA | — |
THINKING_INTERVAL |
Intervalo de actualización del indicador | 500 ms |
THINKING_FRAMES |
Animación del indicador de espera | 🐋 thinking... |
CUSTOM_COMMANDS |
Comandos personalizados y alias | {} |
Panel de administración
El comando /admin abre un panel de administración interactivo mediante botones inline de Telegram. Desde este menú puedes gestionar las principales funciones del bot sin necesidad de modificar directamente su configuración.
- Enviar a todos: Envía un mensaje a todos los canales y grupos registrados.
- Enviar a un chat: Envía un mensaje a un canal o grupo específico.
- Gestionar feeds: Permite agregar, editar, eliminar y probar feeds RSS/Atom.
El acceso al panel está restringido al usuario configurado mediante ADMIN_CHAT_ID, y las sesiones expiran automáticamente después del tiempo definido en ADMIN_TIMEOUT_SECONDS.
Comandos personalizados
Puedes definir respuestas directas o plantillas en src/config/index.js dentro del objeto CUSTOM_COMMANDS:
export const CUSTOM_COMMANDS = {
// Respuesta simple usando variables de plantilla
greet: 'Hola, {name}! ¿En qué puedo ayudarte hoy?',
// Comando avanzado con alias y respuesta directa
help: {
response: '¡Hola {first_name}! Puedes usar `/ask` para interactuar con la IA.',
aliases: ['start', 'info'],
reply: true,
},
}
Variables disponibles: {first_name}, {last_name}, {name}, {username}, {user_id}, {chat_title} y {args}.
Scripts de utilidad
| Comando | Descripción |
|---|---|
pnpm run dev |
Inicia el entorno de desarrollo local con Wrangler |
pnpm run deploy |
Compila y despliega el Worker en Cloudflare |
pnpm run lint |
Ejecuta la revisión de código con ESLint |
pnpm run lint:fix |
Corrige automáticamente el formato y problemas de estilo |
Conclusion
Whale combina Telegram, Cloudflare Workers y Groq en un bot ligero, modular y fácil de personalizar. Su arquitectura serverless permite mantenerlo operativo con un consumo mínimo de recursos y, aunque comenzó como un proyecto personal, decidí publicarlo como código abierto para que puedas construir tu propia instancia.
Si buscas un punto de partida para crear un bot de Telegram con IA, automatizaciones y monitorización de feeds sin necesidad de mantener un servidor tradicional, Whale puede ser una buena alternativa.