Procesador de pagos, sincronizador de contactos CRM con CallBell y notificaciones por WhatsApp
- Implementado soporte multi-servicio para antenas con formato "Servicio X: <pass>". - Añadido sistema de "Lazy Check" para evitar llamadas redundantes a la API de UISP si ya existe una contraseña válida. - Refinado algoritmo de generación de contraseñas: ahora son "Printer-Friendly" (alfanumérico + @, #) y sin caracteres ambiguos. - Mejorada la lógica de detección de antenas: validación por etapas (Servicio -> Sitio -> Dispositivo) para evitar errores en sitios inactivas. - Agregados mensajes informativos de estado en el CRM (⚠️ Sin sitio, ⚠️ Sin antena). - Corregido bucle infinito de webhooks en entornos de prueba mediante validación de idempotencia. - Actualizada documentación (README.md y CHANGELOG.md) a la versión 3.0.0. |
||
|---|---|---|
| .vscode | ||
| comprobantes | ||
| data | ||
| src | ||
| vendor | ||
| .gitignore | ||
| Callbell Public API v1.postman_collection.json | ||
| CHANGELOG.md | ||
| composer-setup.php | ||
| composer.json | ||
| composer.lock | ||
| composer.phar | ||
| credentials.json | ||
| hook_install.php | ||
| html_public.php | ||
| main.php | ||
| manifest.json | ||
| PHP_PermisosArchivos.php | ||
| public.php | ||
| README.md | ||
| StripeWebhook.php | ||
| ucrm.json | ||
| unms-swagger.json | ||
| unms.yaml | ||
| unmscrm.apib | ||
SIIP - WhatsApp Notifications & Stripe Payments for UCRM
Este plugin es una solución integral para automatizar la comunicación con clientes y la gestión de pagos en UISP/UCRM. Actúa como puente entre el CRM, Stripe y la plataforma de mensajería CallBell.
🚀 Funcionalidades Principales
- Notificaciones Dinámicas: Envío automático de mensajes por WhatsApp para facturas, pagos, suspensiones y reactivaciones.
- Gestión de Agenda (Jobs/Tasks): Notificación inteligente a técnicos e instaladores sobre nuevas tareas, reprogramaciones y desasignaciones.
- Pagos con Stripe & OXXO: Generación automatizada de referencias de OXXO con captura de pantalla (Puppeteer) y alojamiento en la nube (WordPress).
- Sincronización CallBell: Mantenimiento de la información del cliente actualizada en la plataforma de chat CallBell.
- Resolución Dinámica: Detección automática de métodos de pago y atributos personalizados para máxima portabilidad.
🏗️ Arquitectura del Sistema
El plugin utiliza un patrón de diseño basado en Facades para desacoplar la lógica de despacho de los servicios externos.
Componentes Clave
- Despachador Central (
Plugin.php): Gestiona tanto los webhooks internos de UCRM como los externos (Stripe). Controla el estado de las notificaciones de tareas mediante prefijos en los títulos ([NOTIFICACION-PENDIENTE]). - Fachada de Mensajería (
AbstractMessageNotifierFacade): Contiene la lógica de negocio para decidir qué notificar, cuándo y a quién. - Interfaz CallBell (
ClientCallBellAPI): Encapsula las llamadas a la API de CallBell, manejando plantillas y mensajes multimedia. - Operaciones OXXO (
AbstractOxxoOperationsFacade): Orquesta el flujo de pago: Stripe (Referencia) -> Puppeteer (Screenshot) -> WordPress (Hosting) -> CallBell (WhatsApp).
🛠️ Requisitos e Integraciones
Para un funcionamiento óptimo, el plugin requiere:
- UISP/UCRM: Versión compatible con el SDK de Ubiquiti.
- Stripe API: Token y Webhooks configurados para transacciones en tiempo real.
- CallBell API: Token de acceso para el envío de mensajes a través de plantillas de WhatsApp.
- Microservicio Puppeteer: Un contenedor Docker con la API de Puppeteer para capturar vouchers.
- Hosting WordPress (FTP): Para alojar temporalmente las imágenes de los vouchers enviadas a los clientes.
🏷️ Configuración de UCRM
Contactos y Etiquetas
El plugin selecciona los números de destino basándose en el Tipo de Contacto definido en UCRM:
WhatsApp: Recibe notificaciones y actualizaciones de datos.WhatsNotifica: Recibe solo notificaciones.WhatsActualiza: Utilizado solo para sincronizar datos con CallBell.
Atributos Personalizados
Es necesario configurar los siguientes atributos en UCRM:
stripeCustomerId: ID del cliente en Stripe.clabeInterbancaria: CLABE personalizada para transferencias.passwordAntenaCliente: Almacena la contraseña del equipo del cliente (sincronizada con la bóveda).
🔄 Flujos de Trabajo Destacados
📅 Gestión de Contraseñas y Visitas Técnicas
Cuando se asigna o reprograma una tarea:
- Detección Multi-Servicio: El plugin identifica todos los servicios del cliente y formatea sus contraseñas como
Servicio 1: <pass> Servicio 2: .... - Validación de Provisionamiento: Antes de actuar, verifica en UISP si el sitio tiene dispositivos vinculados (evitando errores en estados "Location Inactive").
- Lazy Loading: Si el CRM ya tiene una contraseña válida, el plugin omite llamadas redundantes a la API para ahorrar recursos.
- Notificación:
- Envía un mensaje al cliente con el nombre del técnico y la fecha (sin hora).
- Envía un mensaje al técnico con la dirección, ubicación en Google Maps y las contraseñas de las antenas optimizadas para lectura en impresoras térmicas (alfanumérico +
@,#).
💳 Registro de Pagos por Transferencia
- Stripe envía un webhook de saldo aplicado (
customer_cash_balance_transaction.created). - El plugin resuelve dinámicamente el ID del método "Transferencia bancaria".
- Registra el pago automáticamente en UCRM vinculado al
clientIden los metadatos.
📝 Registro de Cambios
Para consultar la evolución del proyecto, ver el archivo CHANGELOG.md.