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.

Tiempo de lectura: ~4 minÚltima actualización: 2026-05-09

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ó)

  1. Pull diario al BCE. Un evento WP-Cron bcnr_currency_refresh trae el XML del Banco Central Europeo con los tipos diarios desde https://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 horas bcnr_fx_rates para lecturas rápidas y una opción duradera autoload=false bcnr_fx_rates_fallback que sobrevive a un desalojo de transient.
  2. Filtro pre-dispatch. BCNR_Currency::normalize_event() se engancha en el filtro bcnr_pre_dispatch_event con prioridad 10. Corre una vez por evento, antes del fan-out a los canales, así cada canal ve el mismo valor ya normalizado.
  3. 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).
  4. 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étodo dispatch_* 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 en bcnr_log ante fallos de despacho.
  5. 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_error para 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_get pueda alcanzar www.ecb.europa.eu desde tu servidor (firewall, HTTP saliente).
  • "Elegí una divisa objetivo, el desplegable está ahora bloqueado": BCNR_CURRENCY_TARGET está definido en wp-config.php. La constante gana al ajuste de DB. O editas wp-config.php o 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_event tú mismo con prioridad 9 (antes del 10 de Beaconry) y reescribe value + currency ahí.