Automation Rules
El módulo Automation Rules ejecuta acciones (correo, SMS, cambio de estado, nota, etiqueta de cliente, webhook) según eventos de la tienda. Las reglas se definen en el panel WooCommerce > Automation Rules mediante una SPA de React, y el motor las ejecuta en respuesta a un trigger.
Arquitectura
Section titled “Arquitectura”| Elemento | Descripción |
|---|---|
| Trigger | Un evento de WooCommerce que ejecuta la regla (new_order, order_status_changed, …) |
| Filter | Una condición lógica (order_total > 100, geo_scope in eu, …) |
| Action | Una operación a realizar (send_email, add_order_note, webhook, …) |
| Match mode | all - todos los filtros cumplidos, any - basta con uno |
| Priority | Orden de ejecución (menor = antes) |
Las reglas se almacenan en la tabla wp_polski_pro_automation_rules. Las ejecuciones (matched/skipped, ejecución en seco, resultado de la acción, error) van a wp_polski_pro_automation_logs.
Triggers
Section titled “Triggers”| Valor | Cuándo se dispara |
|---|---|
new_order | woocommerce_new_order |
order_status_changed | woocommerce_order_status_changed |
new_customer | user_register |
cart_abandoned | (reservado - integración con AbandonedCartService) |
product_saved | save_post_product |
Filtros
Section titled “Filtros”Campos disponibles en los filtros (FilterField):
| Campo | Origen | Operadores |
|---|---|---|
order_total | WC_Order::get_total() | equals, gt, lt, not_equals |
order_status | WC_Order::get_status() | equals, in, not_in |
item_count | WC_Order::get_item_count() | gt, lt, equals |
billing_country | ISO 3166-1 alpha-2 | equals, in, not_in |
shipping_country | ISO 3166-1 alpha-2 (con reserva a billing) | equals, in, not_in |
geo_scope | pl, eu, eea, non_eu | equals |
customer_email | WC_Order::get_billing_email() | equals, contains |
payment_method | WC_Order::get_payment_method() | equals, in |
shipping_method | Lista de métodos de la línea de envío | in, not_in |
product_id | Lista de IDs de productos del pedido | in, not_in |
category | Lista de IDs product_cat de las líneas del pedido | in, not_in |
El operador in / not_in acepta una lista separada por comas (PL,DE,FR).
Filtros geográficos
Section titled “Filtros geográficos”El campo geo_scope devuelve uno de cuatro valores para un pedido/usuario:
| Valor | Alcance |
|---|---|
pl | Polonia (PL) |
eu | Países de la UE (27 estados miembros) |
eea | EEE = UE + Noruega, Islandia, Liechtenstein |
non_eu | El resto del mundo |
Ejemplo de uso: una regla envía una plantilla de correo de marketing distinta a los clientes de la UE (con una nota RGPD) que a los de fuera de la UE.
Acciones
Section titled “Acciones”| Tipo | Parámetros |
|---|---|
send_email | to (opcional), subject, body, marketing (booleano que exige consentimiento) |
send_sms | Delegado a polski_pro/automation/send_sms (requiere SmsNotificationService) |
change_order_status | status, note |
add_order_note | note, customer_note (booleano) |
add_customer_tag | tag (guarda en el user_meta polski_customer_tags) |
webhook | url - un POST con {subject_type, subject_id} |
Consentimiento de marketing
Section titled “Consentimiento de marketing”Las acciones con params.marketing = true se omiten si el cliente no tiene un consentimiento de marketing válido en polski_consent_log. El filtro polski_pro/automation/has_marketing_consent permite reemplazar la lógica predeterminada de comprobación del consentimiento.
Ampliar acciones
Section titled “Ampliar acciones”Para añadir una acción personalizada (p. ej. integración con FreshMail/GetResponse), use el filtro:
add_filter('polski_pro/automation/action', function ($override, $action, $subject, $dryRun) { if ($action->type->value === 'send_email' && ($action->params['provider'] ?? '') === 'freshmail') { if ($dryRun) { return ['dry_run' => true, 'provider' => 'freshmail']; } // ... llamada a la API de FreshMail ... return ['provider' => 'freshmail', 'sent' => true]; }
return $override;}, 10, 4);API REST
Section titled “API REST”Todos los endpoints requieren manage_woocommerce + la cabecera X-WP-Nonce.
| Método | Ruta | Descripción |
|---|---|---|
| GET | /polski-pro/v1/automation/rules | Lista de reglas |
| POST | /polski-pro/v1/automation/rules | Crear una regla |
| GET | /polski-pro/v1/automation/rules/{id} | Obtener una sola regla |
| PUT | /polski-pro/v1/automation/rules/{id} | Actualizar una regla |
| DELETE | /polski-pro/v1/automation/rules/{id} | Eliminar + limpiar registros |
| POST | /polski-pro/v1/automation/rules/{id}/dry-run | Simular sobre un pedido/usuario (order_id o user_id) |
| GET | /polski-pro/v1/automation/logs?limit=200 | Registro de auditoría (máx. 500) |
| GET | /polski-pro/v1/automation/schema | Esquema de triggers/filtros/acciones |
Ejecución en seco
Section titled “Ejecución en seco”En el editor de reglas, indique un Order ID y haga clic en Run dry run. El motor:
- Evalúa los filtros contra el pedido indicado.
- Comprueba el consentimiento de marketing.
- Ejecuta las acciones en modo de ejecución en seco (no modifica el estado) y devuelve el resultado previsto.
- Escribe una entrada en el registro de auditoría con la marca
dry_run = 1.
Límites y rendimiento
Section titled “Límites y rendimiento”- Índices en
enabled,trigger_type,priority,group_label- el motor obtiene solo las reglas que coinciden con el trigger. recent($limit)enAutomationLogRepositoryestá limitado a 500 registros por consulta.- Los webhooks tienen un timeout de 10s.