Saltar al contenido principal

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

  1. 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
  2. Plantillas HTML (includes/notifications/templates/)

    • order-received.php - Email cuando se recibe una orden
    • order-completed.php - Email cuando se completa una reparación
    • budget-created.php - Email cuando se crea un presupuesto
    • invoice-sent.php - Email cuando se envía una factura
  3. WordPress Hooks (integrados en los modelos)

    • sr_order_created - Disparado al crear una orden
    • sr_order_status_changed_to_completed - Disparado al completar una orden
    • sr_budget_created - Disparado al crear un presupuesto
    • sr_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:

  1. Editar archivos en includes/notifications/templates/
  2. Cambiar textos, estructura HTML o estilos CSS
  3. Las variables disponibles están documentadas en cada plantilla

Agregar Nuevos Tipos de Notificaciones

  1. Crear método en SR_Email_Manager:
public function send_custom_notification( $entity_id ) {
// Cargar datos
// Preparar variables
// Cargar plantilla
// Enviar email
}
  1. Crear plantilla HTML:
// includes/notifications/templates/custom-notification.php
  1. Registrar hook en SR_Core:
$this->loader->add_action( 'sr_custom_event', $email_manager, 'send_custom_notification', 10, 1 );
  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

  1. Crear una orden nueva
  2. Verificar que el cliente recibe el email de "Orden Recibida"
  3. Cambiar el estado a "completed"
  4. 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:

  1. ¿El cliente tiene email en su registro?
  2. ¿El hook se está disparando? (agregar error_log() en el modelo)
  3. ¿WordPress puede enviar emails? (probar con plugin SMTP test)

Los emails van a spam

Soluciones:

  1. Configurar SPF, DKIM, DMARC en el servidor
  2. Usar plugin SMTP con servidor confiable (Gmail, SendGrid, etc.)
  3. Evitar palabras spam en asuntos ("GRATIS", "URGENTE", etc.)
  4. Asegurar que el remitente es una dirección válida del dominio

Plantillas no se cargan

Verificar:

  1. Los archivos existen en includes/notifications/templates/
  2. Los permisos de lectura son correctos
  3. 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