Conversión automática multi-divisa
Vende en EUR, USD y GBP, reporta todo en una sola divisa. Beaconry se engancha en la pipeline de despacho y reescribe value + cada items[].price a tu divisa objetivo antes de que el evento salga del servidor, usando los tipos diarios del BCE refrescados una vez al día.
Qué hace
Si tu tienda acepta varias divisas (WooCommerce Multi-Currency, Aelia, switcher manual, geo-routing) te enfrentas al mismo problema de reporte en cada plataforma de ads: Meta quiere una divisa de reporte, Google Ads quiere una divisa de reporte, tu CFO quiere una divisa de reporte. Sin normalización obtienes totales de conversión repartidos en tres cubos que luego sumas en una hoja de cálculo, con tipos de cambio del momento que Meta haya elegido.
Multi-divisa normaliza cada transacción al vuelo. La divisa original se queda en el evento como anotación interna, así tus debug logs y el live dashboard pueden seguir mostrando "92,59 EUR (USD)" si quieres saber qué se cobró realmente.
Cómo activar
wp-admin, Beaconry, pestaña Advanced, tarjeta Multi-Currency reporting. Elige una divisa objetivo del desplegable (cualquiera de los ~30 códigos publicados por el BCE). Guarda. El valor por defecto es "Disabled", que pasa los eventos sin tocar.
Override para power-users: define BCNR_CURRENCY_TARGET en wp-config.php para fijar el objetivo a través de despliegues, ver "Constantes para power-users" abajo.
Cómo funciona (bajo el capó)
- Pull diario al BCE. Un evento WP-Cron
bcnr_currency_refreshtrae el XML del Banco Central Europeo con los tipos diarios desdehttps://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml(timeout 5 segundos, fuente oficial confiable). La tabla parseada[code => rate]se cachea en dos sitios: un transient de 24 horasbcnr_fx_ratespara lecturas rápidas y una opción duraderaautoload=falsebcnr_fx_rates_fallbackque sobrevive a un desalojo de transient. - Filtro pre-dispatch.
BCNR_Currency::normalize_event()se engancha en el filtrobcnr_pre_dispatch_eventcon prioridad 10. Corre una vez por evento, antes del fan-out a los canales, así cada canal ve el mismo valor ya normalizado. - Cálculo cross-divisa vía puente EUR. El BCE solo publica tipos EUR-a-X. Para convertir USD → GBP, Beaconry va USD → EUR (1 / rate[USD]) → GBP (× rate[GBP]). Eventos de la misma divisa son no-op pass-through, eventos con divisa desconocida son no-op pass-through (sin adivinar en silencio ante un typo).
- Anotación en el evento. Tras la conversión, se añaden
_bcnr_fx_source(código ISO original) y_bcnr_fx_rate(tipo aplicado) al payload del evento. Campos internos, eliminados antes del envío HTTP por cada métododispatch_*de canal (solo claves Meta / GA4 / TikTok / LinkedIn / Google-Ads documentadas van por el cable). Visibles en la tabla de eventos recientes del live dashboard y enbcnr_logante fallos de despacho. - Manejo de caídas. El BCE de vez en cuando hipa hacia las 16:00 CET (su propia ventana diaria de publicación). Si el pull falla, Beaconry cae al cache duradero (último pull exitoso, a menudo de hace horas, los tipos de cambio cambian como mucho fracciones de un porcentaje al día). Si el cache duradero también está vacío (instalación nueva durante una caída del BCE), el filtro pasa los eventos sin tocar con la divisa original, y se levanta una bandera de aviso admin
bcnr_fx_last_errorpara que la siguiente carga de página le muestre al operador qué pasó. El despacho nunca se cae.
Constantes para power-users
BCNR_CURRENCY_TARGET en wp-config.php, valor es un código ISO-4217 de 3 letras (mayúsculas). Cuando se define, la constante gana al ajuste de DB en tiempo de lectura, el desplegable en la UI se muestra bloqueado con una pista que apunta de vuelta a wp-config.php. Útil para paridad staging-vs-production, despliegues infra-as-code, y para el caso raro de querer una divisa no listada que no esté en el feed del BCE (la constante acepta cualquier código ISO, la conversión sigue requiriendo que origen y destino sean conocidos por el BCE).
Troubleshooting
- "Mis valores se ven sin cambiar": lo más probable es que la divisa origen esté vacía en el evento (evento no monetario como
page_view) o coincida con el destino. Ambos son casos no-op por diseño. Mira la tabla de eventos recientes del live dashboard, el evento convertido mostraría las anotaciones_bcnr_fx_source+_bcnr_fx_rate. - "El aviso admin dice BCE no alcanzable": caída del BCE. Beaconry reintentará en el siguiente tick de cron y se autorrecupera. Los eventos existentes mantienen su divisa original mientras tanto, no se perdió nada. Si el aviso persiste más de un día, revisa que
wp_remote_getpueda alcanzarwww.ecb.europa.eudesde tu servidor (firewall, HTTP saliente). - "Elegí una divisa objetivo, el desplegable está ahora bloqueado":
BCNR_CURRENCY_TARGETestá definido enwp-config.php. La constante gana al ajuste de DB. O editaswp-config.phpo borras la constante si quieres que la UI lo controle. - "¿Puedo usar un tipo personalizado?": actualmente no se expone. La intención de multi-divisa es "una fuente pública confiable, sin sorpresas para el operador". Si necesitas un tipo hecho a mano por mercado, engancha
bcnr_pre_dispatch_eventtú mismo con prioridad 9 (antes del 10 de Beaconry) y reescribevalue+currencyahí.