Bots de Telegram Programados con FastFN¶
Estado verificado al 28 de marzo de 2026. Nota de runtime: FastFN auto-instala dependencias locales por función desde
requirements.txt/package.json; enfastfn dev --nativenecesitas runtimes instalados en host, mientras quefastfn devdepende de Docker daemon activo.
Por qué existe este artículo¶
Usá una función programada de Telegram cuando el trabajo tenga que correr por intervalo: hacer polling, enviar digests o generar resúmenes para un chat. El repo ya incluye telegram-ai-digest, un ejemplo funcional que lee mensajes recientes, le pide un resumen a OpenAI y publica el resultado en Telegram.
Si necesitás una respuesta inmediata por cada mensaje entrante, mirá Cómo funciona telegram-ai-reply.
Mapa rápido de documentación¶
- Arranque de plataforma: Ejecutar y probar
- Configuración completa Telegram: Telegram E2E
- Formato de función: Especificación de funciones
- Endpoints internos (
/_fn/reload,/_fn/schedules): API HTTP - Contrato runtime y payload: Contrato runtime
- Ciclo completo de invocación: Flujo de invocación
Arquitectura¶
Chat de Telegram
-> Telegram Bot API (getUpdates)
-> schedule de FastFN
-> telegram-ai-digest
-> OpenAI
-> Telegram Bot API (sendMessage)
-> Chat de Telegram
Prerrequisitos¶
- Docker Desktop activo
- token de bot creado con
@BotFather - chat ID del chat de destino
- API key de OpenAI
Opcional recomendado:
- consola habilitada localmente (FN_UI_ENABLED=1, FN_CONSOLE_LOCAL_ONLY=1)
Paso 1: Levantar FastFN¶
Esperado:
- runtimes node y python en estado up.
Paso 2: Configurar secretos¶
Editar <FN_FUNCTIONS_ROOT>/telegram-ai-digest/fn.env.json:
{
"TELEGRAM_BOT_TOKEN": { "value": "<set-me>", "is_secret": true },
"TELEGRAM_CHAT_ID": { "value": "<set-me>", "is_secret": false },
"OPENAI_API_KEY": { "value": "<set-me>", "is_secret": true }
}
Notas:
- mantené secretos reales con is_secret: true
- valores de función se exponen como event.env
Paso 3: Revisar el schedule¶
El ejemplo corre por intervalo desde telegram-ai-digest/fn.config.json:
Ajustá el intervalo según tu caso y luego recargá.
Paso 4: Ejecutar la función una vez a mano¶
Ejemplo de respuesta:
Paso 5: Hot reload en vez de reiniciar¶
Para cambios de función/config/env normalmente no hace falta reiniciar contenedor.
Paso 6: Verificar estado del scheduler¶
Checklist operativo¶
/_fn/healthcon runtimes activos.- secretos en
fn.env.jsonconis_secret=true. - un solo origen de polling activo para el mismo bot token.
- si necesitás memoria entre corridas, guardala fuera de la request en base de datos, archivo u otro storage durable.
Documentación relacionada¶
Idea clave¶
El trabajo programado en Telegram tiene una forma distinta a la de los webhooks. Usalo cuando el bot tenga que despertarse por intervalo, leer actividad reciente y publicar un resultado sin esperar una request entrante.
Qué conviene tener en cuenta¶
- Los jobs programados sirven bien para digests, polling, limpieza y otras tareas en segundo plano.
- Conviene dejar explícitos el polling, la deduplicación y el almacenamiento, en vez de esconderlos dentro de un handler de webhook.
- Si el bot tiene que recordar algo entre corridas, guardá ese estado fuera de la request.
Cuándo conviene el camino de webhook¶
- Usá la guía de webhook cuando cada mensaje entrante tenga que disparar una respuesta inmediata.
- Usá el camino programado cuando el trabajo sea periódico o cuando polling sea más simple que exponer un webhook público.
- Combiná ambos solo si cada uno tiene una responsabilidad bien separada.