Sistema de Notificaciones por Email
Descripción General
El sistema de notificaciones por email envía automáticamente correos electrónicos a los clientes en eventos clave del flujo de trabajo del taller de reparaciones.
Arquitectura del Sistema
Componentes Principales
-
SR_Email_Manager (
includes/notifications/class-email-manager.php)- Clase principal que gestiona el envío de emails
- Carga automáticamente los datos de la tienda
- Procesa plantillas HTML con variables dinámicas
- Envía emails usando la función
wp_mail()de WordPress
-
Plantillas HTML (
includes/notifications/templates/)order-received.php- Email cuando se recibe una ordenorder-completed.php- Email cuando se completa una reparaciónbudget-created.php- Email cuando se crea un presupuestoinvoice-sent.php- Email cuando se envía una factura
-
WordPress Hooks (integrados en los modelos)
sr_order_created- Disparado al crear una ordensr_order_status_changed_to_completed- Disparado al completar una ordensr_budget_created- Disparado al crear un presupuestosr_invoice_status_changed_to_sent- Disparado al enviar una factura
Flujo de Funcionamiento
1. Orden Recibida
Trigger: Se crea una nueva orden de reparación
Hook: sr_order_created
Modelo: SR_Repair_Order::create()
// En class-repair-order.php, línea ~237
do_action( 'sr_order_created', $order_id );
Email enviado a: Cliente Contenido:
- Número de orden
- Dispositivo a reparar
- Problema reportado
- Fecha estimada de finalización
- Enlace para rastrear la orden
2. Orden Completada
Trigger: El estado de una orden cambia a "completed"
Hook: sr_order_status_changed_to_completed
Modelo: SR_Repair_Order::update_status()
// En class-repair-order.php, línea ~363
if ( 'completed' === $new_status ) {
do_action( 'sr_order_status_changed_to_completed', $id );
}
Email enviado a: Cliente Contenido:
- Número de orden
- Dispositivo reparado
- Coste final
- Dirección del taller para recoger el dispositivo
- Recordatorio de traer el recibo
3. Presupuesto Creado
Trigger: Se crea un nuevo presupuesto
Hook: sr_budget_created
Modelo: SR_Budget::create()
// En class-budget.php, línea ~156
do_action( 'sr_budget_created', $budget_id );
Email enviado a: Cliente Contenido:
- Número de presupuesto
- Descripción del trabajo
- Importe total destacado
- Fecha de validez
- Información de contacto
4. Factura Enviada
Trigger: El estado de una factura cambia a "sent"
Hook: sr_invoice_status_changed_to_sent
Modelo: SR_Invoice::update_status()
// En class-invoice.php, línea ~289
if ( 'sent' === $status ) {
do_action( 'sr_invoice_status_changed_to_sent', $id );
}
Email enviado a: Cliente Contenido:
- Número de factura
- Importe total a pagar
- Fecha de vencimiento
- Método de pago
- Recordatorio de plazos
Configuración de Emails
Datos de la Tienda
El sistema carga automáticamente los datos de la tienda desde la base de datos:
$this->shop_data = array(
'name' => $shop->name ?: get_bloginfo('name'),
'address' => $shop->address,
'phone' => $shop->phone,
'email' => $shop->email ?: get_bloginfo('admin_email'),
'logo_url' => $shop->logo_url,
);
Estos datos se usan en:
- Headers de los emails
- Firmas
- Información de contacto en el footer
Configuración de WordPress
Los emails se envían usando wp_mail(), que utiliza la configuración SMTP de WordPress:
Opción 1: Plugin SMTP (Recomendado)
- Instalar "WP Mail SMTP" o "Easy WP SMTP"
- Configurar con credenciales de servidor SMTP
- Ventajas: Más confiable, mejor deliverability
Opción 2: PHP mail() (Por defecto)
- No requiere configuración
- Puede ir a spam fácilmente
- Depende de la configuración del servidor
Diseño de Plantillas
Estructura HTML
Todas las plantillas siguen esta estructura:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
/* Estilos inline CSS */
</style>
</head>
<body>
<div class="email-container">
<div class="header">
<h1>Título del Email</h1>
</div>
<div class="content">
<!-- Contenido dinámico -->
</div>
<div class="footer">
<!-- Información de contacto -->
</div>
</div>
</body>
</html>
Paleta de Colores
- Orden Recibida: Azul
#0073aa - Orden Completada: Verde
#00a32a - Presupuesto: Azul oscuro
#2271b1 - Factura: Rojo
#d63638
Componentes Reutilizables
Info Box:
.info-box {
background: #f9f9f9;
border-left: 4px solid #0073aa;
padding: 15px;
margin: 20px 0;
}
Botón de Acción:
.button {
display: inline-block;
background: #00a32a;
color: #ffffff !important;
padding: 12px 30px;
text-decoration: none;
border-radius: 5px;
margin: 20px 0;
font-weight: bold;
}
Precio Destacado:
.price-highlight {
background: #fff9e6;
border: 2px solid #ffb900;
padding: 15px;
margin: 20px 0;
text-align: center;
border-radius: 5px;
}
Personalización
Modificar Plantillas
Para personalizar el contenido de los emails:
- Editar archivos en
includes/notifications/templates/ - Cambiar textos, estructura HTML o estilos CSS
- Las variables disponibles están documentadas en cada plantilla
Agregar Nuevos Tipos de Notificaciones
- Crear método en SR_Email_Manager:
public function send_custom_notification( $entity_id ) {
// Cargar datos
// Preparar variables
// Cargar plantilla
// Enviar email
}
- Crear plantilla HTML:
// includes/notifications/templates/custom-notification.php
- Registrar hook en SR_Core:
$this->loader->add_action( 'sr_custom_event', $email_manager, 'send_custom_notification', 10, 1 );
- Disparar hook en el modelo:
do_action( 'sr_custom_event', $entity_id );
Testing
Probar Emails Manualmente
Para probar el envío de emails:
// En functions.php o plugin de testing
$email_manager = new SR_Email_Manager();
// Probar orden recibida
$email_manager->send_order_received( 1 ); // ID de orden existente
// Probar orden completada
$email_manager->send_order_completed( 1 );
// Probar presupuesto
$email_manager->send_budget_created( 1 );
// Probar factura
$email_manager->send_invoice_sent( 1 );
Verificar que los Emails se Envían
- Crear una orden nueva
- Verificar que el cliente recibe el email de "Orden Recibida"
- Cambiar el estado a "completed"
- Verificar que el cliente recibe el email de "Orden Completada"
Log de Emails
WordPress registra los emails enviados en el log del servidor. Para debugging:
// Agregar a wp-config.php
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
// Los emails fallidos se registran en wp-content/debug.log
Solución de Problemas
Los emails no se envían
Verificar:
- ¿El cliente tiene email en su registro?
- ¿El hook se está disparando? (agregar
error_log()en el modelo) - ¿WordPress puede enviar emails? (probar con plugin SMTP test)
Los emails van a spam
Soluciones:
- Configurar SPF, DKIM, DMARC en el servidor
- Usar plugin SMTP con servidor confiable (Gmail, SendGrid, etc.)
- Evitar palabras spam en asuntos ("GRATIS", "URGENTE", etc.)
- Asegurar que el remitente es una dirección válida del dominio
Plantillas no se cargan
Verificar:
- Los archivos existen en
includes/notifications/templates/ - Los permisos de lectura son correctos
- No hay errores de PHP en
debug.log
Mejoras Futuras
Funcionalidades Pendientes
- Adjuntar PDF de presupuestos/facturas
- Recordatorios automáticos de facturas vencidas
- Notificaciones de cambio de estado intermedios
- Panel de configuración para activar/desactivar notificaciones
- Plantillas editables desde el admin
- Soporte para múltiples idiomas en plantillas
- Estadísticas de apertura de emails
- Cola de emails con reintentos
- Notificaciones SMS (integración Twilio)
Referencias
Última actualización: Febrero 2026 Versión: 1.0 Estado: Implementado y funcional