Integración con Bots de Telegram
Despliega asistentes de IA multi-agente en Telegram con python-telegram-bot, memoria de sesión, división de mensajes y controles de administración para grupos.
TelegramChannel conecta enjambres de chatflow-agent con bots de Telegram. Impulsado por la biblioteca asíncrona python-telegram-bot, gestiona polling, aislamiento de sesiones por ID de chat, fragmentación automática de mensajes y políticas de seguridad para chats grupales.
Instalación
Instala chatflow-agent con el extra telegram para incluir las dependencias requeridas (python-telegram-bot>=21.0):
pip install "chatflow-agent[telegram]"Configuración Rápida del Bot
Crear un Bot vía BotFather
- Abre Telegram y busca @BotFather.
- Envía
/newboty sigue las indicaciones para elegir un nombre público y un nombre de usuario. - Copia el token de API HTTP del bot generado.
Implementar el Script del Canal
Crea un script vinculando un Runner a TelegramChannel:
import os
from chatflow_agent import Agent, Runner
from chatflow_agent.channels import TelegramChannel
from chatflow_agent.core.memory import SQLiteSessionStore
# Definir tu agente
support_agent = Agent(
name="SupportBot",
instructions="You are a helpful customer support representative.",
)
# Configurar almacenamiento persistente de sesiones
store = SQLiteSessionStore("telegram_sessions.db")
runner = Runner(starting_agent=support_agent, session_store=store)
# Inicializar canal de Telegram
telegram = TelegramChannel(
token=os.environ.get("TELEGRAM_BOT_TOKEN", "your-bot-token"),
start_message="Welcome! How can I assist you today?",
)
# Vincular runner y ejecutar bucle de polling
telegram.attach(runner)
if __name__ == "__main__":
print("Starting Telegram bot polling...")
telegram.run()Parámetros de Configuración del Canal
El constructor de TelegramChannel acepta las siguientes opciones:
| Parámetro | Tipo | Predeterminado | Descripción |
|---|---|---|---|
token | str | Obligatorio | Token de la API de Telegram emitido por @BotFather. |
start_message | str | "Hello! I am your AI..." | Mensaje de bienvenida enviado cuando un usuario ejecuta /start. |
fallback_message | str | "Disculpa, ocurrió un..." | Mensaje enviado al usuario si la ejecución del modelo falla. |
allowed_updates | list[str] | None | None | Restringe tipos de actualizaciones (ej. ["message"]). Por defecto admite todas. |
Comandos Integrados y Seguridad en Chats Grupales
TelegramChannel incluye manejadores preconfigurados para comandos esenciales:
Comando /start
Responde con start_message para dar la bienvenida a nuevos usuarios.
Comando /reset
Limpia el historial de la sesión en runner.session_store para el ID de chat activo, permitiendo a los usuarios reiniciar su conversación limpiamente.
Seguridad en Chats Grupales y Supergrupos
En chats grupales y supergrupos, permitir que cualquier miembro borre la conversación podría afectar a otros usuarios. TelegramChannel aplica verificación de roles:
- Creadores y Administradores: Autorizados a ejecutar
/reset. - Miembros Estándar: Ejecución denegada con la respuesta:
"Only group admins can reset the conversation.".
# Lógica de seguridad aplicada internamente por TelegramChannel._handle_reset:
# member = await context.bot.get_chat_member(chat_id=chat.id, user_id=user.id)
# if member.status not in ("creator", "administrator"):
# await update.message.reply_text("Only group admins can reset the conversation.")
# returnFragmentación de Mensajes Salientes (split_message)
Telegram impone un límite estricto de 4096 caracteres por mensaje de texto. Cuando un agente genera análisis extensos, bloques de código o tablas, enviar el texto completo de forma directa hace que la API de Telegram responda con error HTTP 400.
TelegramChannel canaliza automáticamente las respuestas a través de split_message:
# [min-version: 0.3.2]
# [executable]
from chatflow_agent.channels import split_message
long_text = "Detailed agent analysis..." * 200
chunks = split_message(long_text, max_len=4096)
# Divide progresivamente por \n\n, \n, puntos o espacios para preservar legibilidadEl canal entrega los fragmentos secuencialmente, asegurando que párrafos, oraciones y listas nunca queden truncados a mitad de palabra.
Indicadores de Escritura y Experiencia de Usuario
Mientras el turno del modelo se ejecuta (incluyendo invocaciones de herramientas y transferencias), TelegramChannel emite periódicamente indicadores ChatAction.TYPING cada 4 segundos. Los usuarios visualizan el estado nativo "Escribiendo..." en su cliente de Telegram hasta que la respuesta completa sea entregada.
Ejecución en Bucles de Eventos Existentes
Si estás integrando el bot dentro de un servicio asyncio existente o una aplicación FastAPI, pasa close_loop=False a run():
telegram.run(drop_pending_updates=True, close_loop=False)Modelos Locales con Ollama
Ejecuta modelos de pesos abiertos como Google Gemma 2, Llama 3 y Mistral en hardware local sin costos de nube.
WhatsApp Business Cloud API
Integración de WhatsApp para producción usando Meta Cloud API, webhooks de FastAPI, verificación de firmas HMAC y gestión de ventana de 24 horas.