Documentación del Proyecto
integration_instructions 1. Resumen Ejecutivo
El proyecto Vuelo consiste en la conceptualización, desarrollo e implementación de una plataforma de comunicación unificada omnicanal. El ecosistema combina un servidor de correo electrónico privado con un servidor de mensajería instantánea en tiempo real (XMPP), consumidos a través de una aplicación móvil nativa (Android).
El objetivo principal alcanzado fue lograr una sincronización perfecta de identidades: con un solo registro, el usuario obtiene su cuenta de correo (@vuelo.email) y su acceso al chat instantáneo, operando ambas bajo el mismo par de credenciales.
architecture 2. Arquitectura de Sistemas y Tecnologías
El stack tecnológico seleccionado garantiza escalabilidad, control total de los datos y alto rendimiento:
sync 3. Desarrollo del Backend y Unificación de Cuentas
Uno de los retos arquitectónicos más complejos fue sincronizar la creación de usuarios entre la base de datos relacional de correo y la base de datos interna del servidor de chat.
- API en Go: Se desarrolló un microservicio en Golang que actúa como intermediario seguro.
- Integración REST con Openfire: Se utilizó el plugin UserService de
Openfire. Se superó un desafío de seguridad impuesto por el parche del CVE-2023-32315 en
Openfire 4.8.x, habilitando el uso de "wildcards"
(
adminConsole.access.allow-wildcards-in-excludes = true) para permitir la autenticación de la API mediante cabeceras autorizadas. - Flujo: Al registrarse un usuario desde la app móvil, la API en Go inscribe al usuario en PostgreSQL (para el correo) y lanza un POST autorizado hacia Openfire, unificando la identidad bajo el dominio @vuelo.email.
support_agent 4. Estabilización del Servidor de Correo (Dovecot)
Durante las pruebas de integración del cliente de correo en Flutter, se detectó un error al intentar acceder a la bandeja de enviados (Mailbox doesn't exist).
Solución: Se intervino la configuración interna del servidor
Linux (/etc/dovecot/conf.d/15-mailboxes.conf).
Se implementó la directiva auto = subscribe en los namespaces de las carpetas
especiales (Drafts, Junk, Trash, Sent). Esto automatizó la creación física de los
directorios en el servidor al momento del primer inicio de sesión del usuario.
forum 5. Implementación de Mensajería Instantánea (XMPP)
El componente de chat en tiempo real exigió una configuración minuciosa tanto a nivel de servidor como de red.
- Configuración Openfire: Se habilitó el HTTP Binding y soporte CORS global (*) para permitir conexiones BOSH y WebSockets desde navegadores web, manteniendo la seguridad.
- Gestión de Redes (Firewalls): Se configuraron múltiples capas de seguridad
para permitir el tráfico TCP:
- Apertura de puertos (7070, 7443, 5222) en el Firewall perimetral de Google Cloud Platform (VPC).
- Reglas de tráfico interno usando el Uncomplicated Firewall (UFW) de Ubuntu.
install_mobile 6. Desarrollo de la Aplicación Móvil (Flutter)
La interfaz móvil evolucionó para alojar la dualidad del servicio (Correo + Chat) de manera intuitiva.
UI/UX
Se reestructuró la navegación implementando un BottomNavigationBar para alternar entre "Bandeja de Entrada" e "Instantáneo", reubicando carpetas secundarias (como Enviados) en un menú lateral (Drawer).
Cliente XMPP
Se migró de la librería whixp (que presentaba incompatibilidades de
compilación FFI) a xmpp_stone, una solución escrita en Dart puro que
garantizó estabilidad multiplataforma.
Blindaje de Conexión (Keep-Alive)
Se solucionó el problema de desconexión silenciosa por el modo "Doze" de Android implementando:
- XMPP Pings (XEP-0199): Temporizador periódico que envía stanzas de ping para mantener vivo el socket TCP.
- AppLifecycleObserver: Resurrección automática del estado y la conexión XMPP cada vez que la app vuelve a primer plano.
Optimización de Rendimiento
Se resolvió un error fatal (ANR - Application Not Responding)
agrupando las notificaciones de estado de la interfaz
(notifyListeners()) para evitar sobrecargar el hilo principal durante
la recepción masiva de contactos (Roster).
Despliegue a Producción
Se configuraron permisos nativos explícitos (INTERNET,
ACCESS_NETWORK_STATE) y tolerancia a tráfico HTTP en texto plano
(usesCleartextTraffic="true") en el AndroidManifest.xml
para pasar satisfactoriamente las revisiones de Google Play Console.
language 7. Despliegue de Landing Page
Para completar el ecosistema omnicanal, se preparó la infraestructura web.
- Landing Page: Se diseñó una página de aterrizaje moderna usando Tailwind CSS orientada a conversión, detallando los beneficios y el stack tecnológico de la plataforma.
- Despliegue Apache2: Se resolvió un conflicto de "DocumentRoot" entre Nginx
y Apache2 en el servidor de Ubuntu. El servicio Nginx fue desactivado en favor de Apache2,
donde la Landing Page se desplegó con éxito asignando los permisos correctos al usuario
www-dataen la ruta correspondiente.