Un agente conversacional inteligente construido con Bun.js, Elysia y LangGraph para integración con WhatsApp Business API.
El proyecto sigue una arquitectura modular con los siguientes componentes principales:
- Elysia: Framework web para manejar rutas y middlewares
- LangGraph: Para la lógica de agentes conversacionales
- PostgreSQL: Base de datos para persistencia de datos
- WhatsApp Business API: Integración con Meta para mensajería
- Pino: Sistema de logging estructurado
src/
├── agents/ # Lógica de agentes con LangGraph
├── services/ # Servicios de negocio (WhatsApp, DB, etc.)
├── database/ # Configuración y migraciones de BD
├── types/ # Definiciones de tipos TypeScript
├── utils/ # Utilidades y helpers
└── index.js # Punto de entrada de la aplicación
- Bun.js instalado
- PostgreSQL corriendo
- Cuenta de WhatsApp Business API configurada
-
Clona el repositorio:
git clone <url-del-repo> cd bun-elysya
-
Instala las dependencias:
bun install
-
Configura las variables de entorno:
cp .env.example .env # Edita .env con tus valores reales -
Configura la base de datos:
# Asegúrate de que PostgreSQL esté corriendo # Crea la base de datos especificada en DATABASE_URL
Copia .env.example a .env y configura:
META_TOKEN: Token de acceso de WhatsApp Business APIMETA_VERIFY_TOKEN: Token de verificación para webhooksWHATSAPP_PHONE_NUMBER_ID: ID del número de teléfono de WhatsAppDATABASE_URL: URL de conexión a PostgreSQLPORT: Puerto donde correrá el servidor (default: 4000)
-
En tu aplicación de Meta for Developers, configura el webhook URL:
https://tu-dominio.com/webhook -
El
META_VERIFY_TOKENdebe coincidir con el configurado en Meta.
bun run devbun run build
bun run startEl webhook maneja mensajes entrantes de WhatsApp. Los endpoints principales son:
GET /webhook: Verificación inicial de MetaPOST /webhook: Procesamiento de mensajes entrantes
- Texto: Procesados por el agente LangGraph para generar respuestas
- Voz: Convertidos a texto usando servicios de STT (por implementar)
- Multimedia: Soportados pero procesados como texto descriptivo
- Usuario envía mensaje a WhatsApp
- Webhook recibe el mensaje
- Se valida y procesa el contenido
- LangGraph ejecuta la lógica del agente
- Se genera respuesta basada en el contexto
- Respuesta se envía de vuelta vía WhatsApp API
Usuario: Hola, ¿cómo estás?
Agente: ¡Hola! Estoy bien, gracias. ¿En qué puedo ayudarte hoy?
Usuario: Quiero información sobre productos
Agente: Claro, tenemos varios productos disponibles. ¿Qué tipo de producto te interesa?
Usuario: Electrónicos
Agente: Excelente elección. Ofrecemos laptops, teléfonos y tablets. ¿Cuál te gustaría conocer mejor?
- Vercel/Netlify: Para despliegue serverless
- Railway/Render: Para aplicaciones full-stack
- VPS propio: Para mayor control
- Configurar variables de entorno correctamente
- Usar HTTPS obligatorio para webhooks de WhatsApp
- Monitorear logs y métricas
- Configurar backups de base de datos
- Nunca commitear el archivo
.env - Usar HTTPS en producción
- Validar todos los inputs de usuario
- Implementar rate limiting
- Usar Pino para logging estructurado
- Configurar diferentes niveles de log por entorno
- Monitorear errores y excepciones
- Usar migraciones para cambios de esquema
- Implementar conexiones pool
- Manejar transacciones apropiadamente
- Escribir tests unitarios para lógica de negocio
- Tests de integración para endpoints
- Tests end-to-end para flujos completos
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -am 'Agrega nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
Para soporte técnico o preguntas:
- Abre un issue en GitHub
- Revisa la documentación de WhatsApp Business API
- Consulta la documentación de Elysia y LangGraph