WhatsApp CRM v6 - Comprobantes de transferencia y pagos ========================================================= Objetivo -------- Esta versión agrega una gestión administrativa de comprobantes enviados por WhatsApp: - Recepción de imágenes/PDF del comprobante. - Descarga segura del archivo desde Meta Cloud API usando el token configurado en la interfaz. - Vista previa del comprobante desde el panel. - Cola de comprobantes pendientes. - Asociación manual del comprobante a un cliente, aunque el WhatsApp emisor no sea el registrado. - Imputación manual del pago en la tabla payments. - Asociación opcional del pago a una factura. - Rechazo administrativo de comprobantes no válidos. - Pregunta automática al cliente cuando el número no está registrado: pide código de cliente, DNI/CUIT, nombre o domicilio. Archivos incluidos ------------------ _inc/whatsapp/webhook.php _inc/whatsapp/admin/inbox.php _inc/whatsapp/admin/receipts.php _inc/whatsapp/admin/receipt_file.php _inc/whatsapp/admin/api.php _inc/whatsapp/admin/whatsapp_panel_lib.php _inc/whatsapp/sql/whatsapp_crm_panel_v6_payment_receipts.sql Instalación ----------- 1) Hacer backup del webhook actual: cd /var/www/html cp _inc/whatsapp/webhook.php _inc/whatsapp/webhook.php.bak_$(date +%F_%H%M) 2) Descomprimir el ZIP en el DocumentRoot del dominio api.solucionesdc.com.ar: cd /var/www/html unzip -o /root/whatsapp_crm_panel_v6_comprobantes_pagos.zip chown -R www-data:www-data /var/www/html/_inc/whatsapp 3) Ejecutar el SQL v6: mysql -u root -p interlink_crm < /var/www/html/_inc/whatsapp/sql/whatsapp_crm_panel_v6_payment_receipts.sql 4) Validar sintaxis PHP: php -l /var/www/html/_inc/whatsapp/webhook.php php -l /var/www/html/_inc/whatsapp/admin/api.php php -l /var/www/html/_inc/whatsapp/admin/inbox.php php -l /var/www/html/_inc/whatsapp/admin/receipts.php php -l /var/www/html/_inc/whatsapp/admin/receipt_file.php 5) Reiniciar Apache: systemctl restart apache2 URLs ---- Bandeja WhatsApp: https://api.solucionesdc.com.ar/_inc/whatsapp/admin/inbox.php Cola de comprobantes: https://api.solucionesdc.com.ar/_inc/whatsapp/admin/receipts.php Configuración WhatsApp: https://api.solucionesdc.com.ar/_inc/whatsapp/admin/settings.php Flujo operativo recomendado --------------------------- 1) El cliente envía captura o PDF del comprobante por WhatsApp. 2) El webhook guarda el archivo y crea un registro en whatsapp_payment_receipts. 3) Si el número coincide con un cliente, el comprobante queda asociado a ese cliente. 4) Si el número no figura en clientes, el bot pide un dato de rutina: código de cliente, DNI/CUIT, nombre o domicilio. 5) Administración abre la cola de comprobantes. 6) Verifica visualmente el archivo. 7) Asocia el cliente si hace falta. 8) Carga/valida importe, fecha, referencia y factura si corresponde. 9) Presiona “Imputar pago”. 10) El sistema inserta el pago en payments y marca el comprobante como approved. Seguridad y criterio contable ----------------------------- - El sistema NO impacta pagos automáticamente al recibir el comprobante. - La vista previa sirve para verificación humana. - Si el número emisor no es el registrado, se puede asociar el comprobante al cliente correcto sin vincular toda la conversación al cliente. - Esto evita exponer saldo o datos de cuenta a un WhatsApp de terceros. - receipt_file.php sirve archivos mediante ID y no expone rutas absolutas del servidor. Notas técnicas -------------- - El webhook ahora usa el token guardado en whatsapp_settings si existe; si no existe, usa WHATSAPP_TOKEN del config.php como respaldo. - Esto permite cambiar el token desde settings.php y que también lo use la descarga de comprobantes y la respuesta automática. - La imputación crea registros en payments. - Si se selecciona factura, actualiza invoices.status a paid o partial según pagos registrados. Pruebas sugeridas ----------------- Caso A: cliente registrado envía captura. Resultado esperado: aparece en receipts.php asociado al cliente y listo para imputar. Caso B: número no registrado envía captura. Resultado esperado: el bot pregunta código/DNI/nombre/domicilio y el comprobante queda pendiente. Caso C: administración asocia cliente manualmente e imputa. Resultado esperado: se crea payment_id y el comprobante queda approved. Caso D: comprobante inválido. Resultado esperado: se puede rechazar y queda rejected.