Una plataforma de operaciones de recompensas B2B completa, construida como WordPress MU-plugins — 78 módulos PHP que se cargan en una única secuencia de arranque orquestada en GCP. Cubre el ciclo de vida completo de un programa de recompensas corporativo: gestión de campañas en una jerarquía cliente→cuenta→campaña, pipeline de presupuestos y pedidos, aprobación de diseño con validez legal, seguimiento de envíos en tiempo real por posición de buque, soporte en seis idiomas y gestión de consultas asistida por IA a través de la Claude API. En producción desde mediados de 2026 con 96 tablas de base de datos personalizadas kh_ en GCP Cloud SQL.
96
Tablas de Base de Datos
78
Módulos PHP
5
Monedas Compatibles
6
Idiomas Compatibles
El Reto
El encargo comenzó con la gestión de campañas en una jerarquía multicliente. Creció hasta convertirse en algo significativamente mayor: una plataforma de operaciones de recompensas B2B completa. A mediados de 2026, la plataforma gestiona el ciclo de vida completo de un programa de recompensas corporativo — desde el briefing al proveedor y el cumplimiento normativo de fábrica hasta la firma de diseño con validez legal, el seguimiento de envíos por posición de buque y la gestión de consultas asistida por IA. Con 78 módulos PHP, 96 tablas de base de datos y seis idiomas, es una de las plataformas de fidelización a medida más completas operativamente, construida sobre una arquitectura personalizada de WordPress MU-plugin.
WordPress proporciona únicamente autenticación, enrutamiento y la capa de páginas de shortcode — todos los datos de negocio residen en un espacio de nombres de tablas kh_ separado en GCP Cloud SQL, diseñado específicamente para el flujo de trabajo exacto de la agencia. Cada consulta utiliza $wpdb->prepare() y GUIDs en las URLs en lugar de IDs enteros secuenciales. La plataforma migró de Azure a Google Cloud Platform en mayo de 2026, y ahora funciona en VMs de GCP con Memorystore (Redis) para caché.
Lo Que Se Entregó
Pila Tecnológica
WordPress proporciona autenticación, enrutamiento y shortcodes. Toda la lógica de negocio, los datos y la interfaz viven en el conjunto de MU-plugins.
Carcasa CMS
Lenguaje
Base de Datos
Alojamiento
Imágenes
Frontend
Seguridad
Caché
Generación de PDF
IA
Envío y Seguimiento
Características Clave
Una cuadrícula responsiva de tarjetas de 4 columnas que muestra todas las campañas a las que el usuario tiene acceso. Cada tarjeta muestra el logotipo de la campaña (o un marcador de posición de letra), la insignia de estado (Activo / Pausado / Completado / Borrador) y una insignia de conteo de mensajes no leídos de color rojo pulsante — actualizada por usuario según su marca de tiempo last_read_at. Los administradores ven todas las campañas; todos los demás roles solo ven sus campañas asignadas. El panel es el centro operativo de toda la agencia: un vistazo muestra qué campañas tienen mensajes de clientes sin leer que necesitan respuesta.
Tres sistemas de mensajería en tiempo real independientes sirven a diferentes audiencias. El chat de campaña gestiona la mensajería entre personal y cliente por campaña con adjuntos de archivos (imágenes, PDFs, documentos), confirmaciones de lectura (last_read_at por usuario) y exportación de transcripción de chat en PDF. Un panel de presencia del personal se inyecta en todas las páginas de administración, mostrando qué miembros del personal están en línea y permitiendo mensajería interna 1:1. El chat de portal cliente-a-cliente ofrece mensajería por cliente con ámbito por campaña, con adjuntos de archivos y descarga de transcripción — activado por cliente desde el personal. Cada sistema tiene sus propias tablas de mensajes, endpoint de sondeo y flujo de notificaciones.
El personal define las regiones de precios y los puntos de corte de cantidad a través de una interfaz de administración — el sistema es completamente flexible. Una campaña puede tener niveles UK, US, APAC con puntos de corte en 50, 100, 500 unidades; otra puede tener regiones completamente diferentes. Sin columnas codificadas en el esquema de base de datos ni en la interfaz: la cuadrícula se renderiza dinámicamente a partir de las regiones y puntos de corte que se hayan definido.
La tarifa se renderiza como una cuadrícula interactiva estilo hoja de cálculo. El personal hace clic en cualquier celda para editar el precio en línea, con retroalimentación visual al guardar. Admite el modo de precio fijo (un precio por región) y el modo escalonado (el precio baja en cada punto de corte de cantidad). Los cambios se persisten mediante AJAX sin recargar la página, y la celda se resalta brevemente al guardar correctamente.
Los usuarios se asignan en tres niveles: acceso al cliente, acceso al proyecto (cuenta) o acceso a la campaña. El personal interno tiene roles super_admin / manager / staff; los usuarios clientes externos tienen roles admin / user / viewer. Los menús desplegables en cascada AJAX dinámicos rellenan cuentas y campañas al asignar usuarios — seleccione un cliente y las cuentas cargan al instante; seleccione una cuenta y cargan las campañas.
El catálogo de productos de recompensa admite GBP, EUR, USD, AUD y CAD con almacenamiento de símbolo. Cada producto tiene un PVP más precios escalonados configurables. Los productos se asignan a campañas y los precios pueden personalizarse por campaña sin afectar al catálogo principal — así el mismo artículo de recompensa puede tener diferentes precios para una campaña UK frente a una campaña US frente a una campaña APAC, gestionados de forma independiente por la agencia para cada compromiso con el cliente.
El personal elabora presupuestos detallados con niveles de precios configurables, genera PDFs con marca vía mPDF y los envía a los clientes por correo electrónico directamente desde la plataforma. Los clientes aprueban o solicitan revisiones; los presupuestos confirmados se convierten en pedidos con un historial completo de seguimiento de estado. Los albaranes de recepción se registran contra los pedidos. Un informe de pedidos de presupuesto agrega datos de conversión en todas las campañas.
Un asistente de aprobación orientado al cliente en cinco pasos con validez legal. El personal elabora pruebas de producto a través de un constructor de pruebas dedicado. Los clientes revisan cada elemento, solicitan revisiones con notas y luego dan su aprobación mediante una firma dibujada o escrita capturada en un lienzo a prueba de manipulaciones. El sistema genera un hash de auditoría SHA-256 del estado de aprobación y produce un certificado de aprobación PDF descargable. Las notificaciones por correo electrónico se activan en cada transición de etapa — prueba enviada, revisión solicitada, aprobada. El registro de aprobación es inmutable una vez firmado.
La plataforma se integra con AISStream.io para el posicionamiento de buques en tiempo real. Un panel de envíos de administración renderiza rutas de envío en tiempo real en un mapa interactivo Leaflet con un icono de barco animado, marcadores de puertos y tiempo de llegada estimado. Las fechas de salida y entrega confirmada se sincronizan automáticamente mediante un cron diario. El personal puede ver el historial de envíos, detalles del transportista y metadatos del buque por pedido.
Gestión completa de auditorías de fábrica y ética con controles de visibilidad por cliente. El personal mantiene una lista de fábricas y asigna auditorías específicas a los clientes; los clientes ven únicamente sus propios registros de auditoría. Las entradas de auditoría incluyen campos de hallazgos estructurados, estado de cumplimiento y almacenamiento de documentos. El sistema admite múltiples tipos de auditoría y almacena un historial completo por fábrica.
Un sistema multilingüe personalizado resuelve cada cadena visible para el usuario a través de una cadena de dos capas: un archivo JSON por idioma (la base) y una tabla de anulación de base de datos (kh_language_strings) editable a través de la interfaz de administración sin tocar el código. La misma función kh_t('key') se utiliza en los 78 módulos PHP. Idiomas compatibles: inglés, francés, alemán, español, neerlandés, árabe. El idioma se resuelve por sesión desde el perfil del usuario.
Bloqueo de inicio de sesión por país con una lista de permitidos y bloqueados configurable — aplicado antes de que se ejecute la autenticación de WordPress. Cada inicio de sesión, cierre de sesión e intento fallido se escribe en un registro de auditoría de sesión con dirección IP y geolocalización. Un registrador centralizado de errores PHP captura los fallos a nivel de módulo en una tabla de base de datos con notificación al administrador. Un inicio de sesión unificado en /login/ dirige al personal, clientes y administradores a sus respectivos paneles según su rol.
Tres sistemas de IA construidos sobre la Claude API (Anthropic). El agente de IA de administración permite al personal hacer preguntas en lenguaje natural sobre la base de datos en tiempo real y recibir respuestas estructuradas sin escribir SQL — el agente resuelve las relaciones entre tablas y da formato a los resultados. El agente de correo electrónico con IA procesa correos entrantes según un calendario, resuelve consultas de campaña o pedido automáticamente y escala a un humano cuando la confianza es baja. El ingestor de correos de briefing lee hilos de correo entrante y los analiza en briefings de campaña, incluyendo la ingesta de adjuntos en el almacén interno de documentos.
Un receptor de webhooks ingesta cada evento de entrega de SendGrid — apertura, clic, rebote, informe de spam, cancelación de suscripción, aplazamiento, eliminación — y los almacena en una tabla personalizada kh_email_events con el tipo de correo electrónico de origen, referencia de campaña y destinatario. Dos paneles de administración muestran métricas de interacción y estado de entregabilidad con desglose por tipo de correo electrónico y filtrado por rango de fechas.
Cada pedido confirmado tiene una huella de CO₂ calculada mediante factores de emisión configurables y precios del proveedor. Un panel de configuración permite al personal configurar el proveedor de carbono, el precio por tonelada y los factores de emisión a nivel de categoría de forma independiente. Los datos de carbono se almacenan por pedido en kh_order_carbon. La fase 2 — integración de la API del proveedor y un resumen de CO₂ orientado al cliente — está en la hoja de ruta.
Un cron diario sincroniza las reseñas de Google Business Profile en la base de datos de la plataforma a través de kh_google_reviews. Un informe de sentimiento de administración muestra calificaciones de estrellas, texto de reseñas y tendencias de sentimiento por cliente y rango de fechas. El personal puede filtrar por banda de calificación y exportar datos de reseñas. La ingesta está completamente automatizada una vez configurada con las credenciales de la API de Google Business Profile.
Una capa completa de operaciones minoristas para la subplataforma de recompensas Drops & Codes: seguimiento de movimientos de stock y panel de inventario, gestión de tasas impositivas, reglas de envío configurables por región, órdenes de compra con flujo de recepción de mercancías y cola de preparación y empaque. El personal gestiona el cumplimiento desde la creación del pedido hasta el despacho de envío dentro de la misma plataforma.
Un panel de analítica para el personal agrega KPIs a través de los datos de campaña: tiempos de respuesta de aprobación de diseño, tasas de conversión de presupuesto a pedido, tasas de finalización de control de calidad y rendimiento de envíos a tiempo. Los informes de progreso se almacenan en la base de datos y se presentan como una página de resumen semanal orientada a la dirección. Una página de estado de la plataforma muestra una cuadrícula de disponibilidad de 90 días e historial de incidentes para transparencia con los clientes.
Arquitectura del Sistema
WordPress (MU-plugins, GCP VM)
│ kehemi-loader.php — 78 PHP modules in single boot sequence
│ WordPress used only for: auth, routing, shortcodes
│
▼
Data Hierarchy (96 kh_-prefixed tables on GCP Cloud SQL + Redis)
kh_clients
└── kh_projects (accounts / sub-brands)
└── kh_campaigns
├── kh_campaign_users (access control)
├── kh_campaign_messages (campaign chat)
├── kh_quotes / kh_orders / kh_receipts
├── kh_da_proofs / kh_da_approvals (design sign-off)
└── kh_reward_items (products)
└── kh_reward_item_pricing (tiered)
Extended Platform Modules:
├── Shipment tracking → AISStream.io live vessel / Leaflet map
├── Factory audits → kh_audits / kh_factories / findings
├── Language system → kh_t() → JSON base → kh_language_strings
├── AI layer → Claude API — query / email / brief agents
├── SendGrid webhooks → kh_email_events (delivery tracking)
├── Carbon reporting → kh_carbon_factors / kh_order_carbon
├── Google Reviews → kh_google_reviews / daily cron
└── Retail ops → kh_stock / kh_drops_codes / kh_fulfilment
User Access Layers:
WordPress user account
└── kh_users (linked by wp_user_id)
├── kh_client_users → client-level access
├── kh_project_users → account-level access
└── kh_campaign_users → campaign-level access
Espacio de Nombres de Tabla Personalizado
Todos los datos de negocio residen en tablas con prefijo kh_ en GCP Cloud SQL — completamente separadas de las tablas principales de WordPress. 96 tablas en producción a mediados de 2026. El conjunto de MU-plugins crea y migra estas tablas al cargar — sin necesidad de paso de activación.
Seguridad por Diseño
Cada consulta de base de datos utiliza $wpdb->prepare() — sin interpolación directa en ninguna parte del código. Las URLs usan GUIDs en lugar de IDs enteros secuenciales para evitar la enumeración. Todos los manejadores AJAX están protegidos con nonces de WordPress.
Arquitectura MU-Plugin
La plataforma está estructurada como 78 módulos PHP cargados automáticamente en una única secuencia de arranque por kehemi-loader.php. Sin dependencia de tema, sin activación de plugins, sin interfaz de administración de WordPress para el portal del cliente — solo páginas de shortcode mapeadas a slugs de URL personalizados, ejecutándose en VMs de GCP con caché Redis.
Tiempo Real Sin WebSockets
La interfaz de chat sondea cada 10 segundos mediante un endpoint AJAX ligero que devuelve solo los nuevos mensajes desde el último ID de mensaje conocido. El enfoque evita la complejidad de infraestructura de WebSocket al tiempo que ofrece una experiencia de usuario casi en tiempo real aceptable para la comunicación de campañas B2B.
En Números
96
Tablas de Base de Datos Personalizadas
78
Módulos PHP
6
Idiomas Compatibles
5
Monedas Compatibles
Construimos portales a medida para agencias y empresas B2B — desde la gestión de campañas y el acceso basado en roles hasta operaciones asistidas por IA, flujos de aprobación de diseño y seguimiento de envíos en tiempo real. 78 módulos, 96 tablas, seis idiomas, todos en producción. Hablemos de lo que necesita.