Arquitectura

Visión General de la Arquitectura

Construido para la Fiabilidad. Diseñado para el Control

Nuestro equipo técnico está disponible para responder a todas tus preguntas sobre infraestructura, seguridad de datos, etc. Contacta para más información.

WCR no es un proxy middleware ni una capa de integración compartida. Cada despliegue — desde una única cuenta de Zendesk hasta una empresa regulada — funciona sobre el mismo stack de producción: un frontend Vue.js compilado, una API PHP y una o varias bases de datos MariaDB dedicadas, todas comunicándose por HTTPS con aislamiento de credenciales de extremo a extremo.

El Stack Principal

┌─────────────────────────────────────────────────────────────┐
│                        NAVEGADOR / ZENDESK                  │
│                    Vue.js SPA  ·  App Barra Lateral         │
└───────────────────┬─────────────────────┬───────────────────┘
                    │ HTTPS               │ HTTPS
        ┌───────────▼──────────┐  ┌───────▼────────────────┐
        │     PHP + Apache     │  │   Capa Webhook Sunco   │
        │      /app/api/       │  │       /sunco/          │
        └───────────┬──────────┘  └────────────────────────┘
                    │ TCP (red interna)
        ┌───────────▼──────────┐
        │      MariaDB         │
        │   (servidor aislado) │
        └──────────────────────┘
Capa Tecnología Notas
Frontend Vue.js, SPA compilada URLs definidas en tiempo de compilación por cliente
API PHP + Apache Servida en /app/api/, aislada del web root
Base de Datos MariaDB Servidor separado, usuario restringido por IP
Transporte HTTPS (TLS) HTTP redirigido permanentemente a HTTPS

Estructura de URLs

Cada despliegue del WCR expone tres áreas de superficie distintas bajo un único dominio:

https://tu-dominio.com/
│
├── /app/              ← Vue.js SPA (frontend compilado)
│   └── /app/api/v2/   ← PHP REST API
│
└── /sunco/            ← Receptor de webhooks de WhatsApp

Esta estructura garantiza que no hay conflictos de enrutamiento entre la SPA, la API y la capa de webhooks. Cada ruta está controlada de forma independiente por Apache y puede protegerse, limitarse en velocidad o versionarse sin afectar a las demás.

Arquitectura de Seguridad

Las credenciales nunca tocan el web root. Los ficheros de entorno se almacenan por encima del DocumentRoot de Apache y nunca son accesibles vía HTTP.

[sistema de ficheros del servidor]
│
├── [por encima del web root]          ← credenciales nunca servidas por Apache
│   ├── .env                           ← credenciales base (BD, email, claves API)
│   ├── .env.enterprise                ← flags de funcionalidades enterprise
│   └── .env.enterprise.customer       ← anulaciones específicas del cliente
│
└── [web root]                         ← Apache DocumentRoot (accesible por web)
    └── app/
        ├── index.html                 ← punto de entrada de la Vue SPA
        ├── js/ css/ img/              ← assets compilados
        ├── api/                       ← PHP API (sin listado de directorios)
        └── sunco/                     ← receptor de webhooks

PHP localiza el fichero .env correcto en tiempo de ejecución recorriendo el árbol de directorios hacia arriba — el servidor web nunca tiene una ruta para servirlos.

Tipo de credencial Almacenamiento ¿Accesible vía HTTP?
Contraseñas de base de datos Ficheros de entorno por encima del web root No
Claves de API Ficheros de entorno por encima del web root No
Clave privada SSL Fuera del contenedor, montada de solo lectura No
Frontend compilado Web root Sí (intencional)

Despliegue Enterprise: Modelo Multi-Servidor

Los clientes Enterprise funcionan en una configuración completamente aislada, que puede constar de uno o varios servidores. El tráfico de la base de datos nunca atraviesa la Internet pública.

                      ┌──────────────────────────────┐
                      │      VPN del Cliente /       │
                      │      Workspace Seguro        │
                      └──────────┬───────────────────┘
                                 │ HTTPS
                      ┌──────────▼───────────────────┐
                      │       SERVIDOR API           │
                      │   Linux · Docker             │
                      │                              │
                      │  ┌─────────────────────────┐ │
                      │  │   PHP + Apache          │ │
                      │  │   contenedor            │ │
                      │  └────────────┬────────────┘ │
                      │               │ BD (interna) │
                      │  ┌────────────▼────────────┐ │
                      │  │  UI admin BD opcional   │ │
                      │  │  (solo acceso interno)  │ │
                      │  └─────────────────────────┘ │
                      └────────────┬─────────────────┘
                                   │ red privada
                      ┌────────────▼─────────────────┐
                      │       SERVIDOR BD            │
                      │   Linux · Docker             │
                      │                              │
                      │  ┌─────────────────────────┐ │
                      │  │   Contenedor MariaDB    │ │
                      │  │   volumen persistido    │ │
                      │  └─────────────────────────┘ │
                      └──────────────────────────────┘

Ambos contenedores usan políticas de reinicio automático — sobreviven a reinicios sin intervención manual. El volumen de la base de datos persiste en el sistema de ficheros del host, independientemente del ciclo de vida del contenedor.

¿Por qué Docker? Los entornos enterprise suelen tener configuraciones de SO endurecidas con repositorios de paquetes bloqueados. Docker evita completamente los problemas de dependencias a nivel del host, proporcionando un runtime reproducible y con versiones fijadas que se instala en minutos independientemente de la configuración del SO subyacente.

Transferencia de Ficheros: Despliegue Air-Gapped

Algunos entornos enterprise restringen el acceso SSH entrante a los servidores de producción. El pipeline de despliegue del WCR gestiona esto a través de un relay intermedio:

Máquina Dev  ──►     Relay seguro     ◄──  Servidor de producción
                     (intermedio)          (descarga, no recibe)

El servidor de producción inicia todas las conexiones salientes — no es necesario abrir reglas de firewall entrantes. Las credenciales del relay nunca se almacenan en scripts.

Integración con la Plataforma: Zendesk y Meta

WCR se integra con dos superficies de API de Zendesk distintas para cerrar el ciclo entre la entrega del mensaje y tu flujo de trabajo de soporte. De forma crucial, WCR nunca se comunica directamente con la Meta Cloud API — toda la conectividad de WhatsApp está mediada a través de uno o más Canales de WhatsApp de Zendesk configurados por conexión en el WCR.

┌──────────────────────────────────────────────────────────────┐
│                        BACKEND WCR                           │
│  ┌──────────────────────────┐  ┌──────────────────────────┐  │
│  │  App API / PHP           │  │  Receptor Webhook Sunco  │  │
│  └──────────────────────────┘  └──────────────────────────┘  │
└──────────────┬────────────────────────────────┬──────────────┘
               │ Support API (escritura)        ▲ Conversations API
               │ tickets y notas privadas       │ eventos y msgs entrantes
┌──────────────▼────────────────────────────────┴──────────────┐
│                     PLATAFORMA ZENDESK                       │
│  ┌────────────────────┐   ┌──────────────────────────────┐   │
│  │  Zendesk Support   │   │  Conversations API (Sunco)   │   │
│  │  Tickets · Agentes │   │  Canal(es) de WhatsApp       │   │
│  └────────────────────┘   └───────────────┬──────────────┘   │
└───────────────────────────────────────────┼──────────────────┘
                                            │
                                 ┌──────────▼───────────┐
                                 │    Meta Cloud API    │
                                 └──────────────────────┘
Superficie Propósito Consumidores
App API Operaciones internas del frontend, gestión de sesiones, barra lateral del agente Vue.js SPA, App Barra Lateral de Zendesk
API de Envío de WhatsApp Enviar y rastrear mensajes de WhatsApp salientes Sistemas externos mediante autenticación por token
Sunco API Lanzar algunas tareas programáticamente Sistemas internos mediante autenticación usuario/contraseña
Webhooks de la API Recibir eventos de la Zendesk Conversations API, como errores de entrega Sistemas internos
Meta Cloud API WCR nunca accede a ella; siempre se conecta a través de un Canal de WhatsApp de Zendesk configurado ---

Cada conexión en el WCR requiere al menos un Canal de WhatsApp de Zendesk configurado. Este canal es el puente autorizado entre la plataforma Conversations de Zendesk y la infraestructura de Meta. WCR envía y recibe mensajes de WhatsApp a través de Zendesk — nunca posee ni usa directamente un token de la API de Meta.

¿Listo para ver la Enterprise Edition en acción?

Nuestro equipo técnico está disponible para responder a todas tus preguntas sobre infraestructura, seguridad de datos, etc.

Agenda una Videollamada con nuestro Tech Lead

Ver Opciones de Despliegue

Contáctanos para más información