Product Videos
Envía las conversiones de tu tienda a Meta, GA4, Google Ads, TikTok, Microsoft Ads, Pinterest, Snapchat, LinkedIn y OpenAI / ChatGPT Ads desde tu servidor, sin depender solo del navegador. Con deduplicación con el píxel, Consent Mode v2, asistente de configuración, semáforos de salud y conciliación diaria de pedidos.
Compatible con PrestaShop 1.7.8 a 9.2, desde PHP 7.2.
Publicidad y analítica
Los bloqueadores y los navegadores que recortan cookies hacen que las plataformas no reciban parte de las compras que generan tus campañas, y optimizan con datos incompletos. RKR API Conversions Pro envía las conversiones desde tu servidor, con el mismo identificador que el navegador para que no se cuenten dos veces.
El asistente examina tu tienda (tema, banner de consentimiento, etiquetas que ya imprimen otros módulos, módulos de pago y cron) y te guía plataforma a plataforma. Cada paso comprueba el formato de lo que pegas y tiene un botón Guardar y probar que envía un evento de prueba real y, si falla, te explica el error con palabras normales en lugar de un código de la API.
Para cada etiqueta del navegador (Meta Pixel, GA4, Google Ads, TikTok y las nuevas de Microsoft, Pinterest, Snapchat y LinkedIn) eliges quién la carga: el módulo, otro módulo o Google Tag Manager, o nadie y solo servidor. Con las dos primeras opciones, navegador y servidor envían el mismo event_id y la plataforma deduplica. En GA4, además, un evento nunca llega dos veces.
Las compras se pueden enviar al cobrar el pedido (lo recomendado y lo que traen por defecto las instalaciones nuevas) o al crearlo. También viajan los reembolsos parciales por abono, las cancelaciones, los pedidos creados desde el back-office y los ajustes de conversión de Google Ads.
user_id de GA4 (en claro o con hash).Consent Mode v2 con el consentimiento guardado restaurado antes de cargar las etiquetas, ads_data_redaction, url_passthrough y adaptadores para Cookiebot, CookieYes, Complianz y OneTrust, además del consent update de gtag. Un país desconocido no concede el consentimiento cuando has definido regiones, y una denegación explícita de tu banner nunca se sobrescribe.
En modo cola, el módulo no hace ninguna llamada de red mientras se genera la página o se paga: los eventos esperan en una cola que procesa el cron cada 5 minutos. Si el cron deja de pasar, la cola la procesan las propias visitas una vez enviada la página, así que no se pierde nada. Y si tu alojamiento no permite cron, el modo de envío Híbrido o Inmediato manda los eventos durante la confirmación del pedido (el pago es algo más lento). Lo que hace el módulo en los hooks está protegido para que un fallo suyo no pueda romper el pedido.
Una conciliación diaria compara los pedidos con las entregas de cada plataforma, dentro de su ventana, y deja el informe en la configuración.
El módulo puede entregar los eventos a un relay del lado del servidor que te facilite tu agencia: pegas su URL (HTTPS) y el token de la suscripción, pulsas Probar y el relay se encarga de los reintentos. Cada llamada va firmada, y al relay solo viajan identificadores con hash: del cliente, únicamente ciudad, provincia, código postal y país.
La versión 1.3.0 sustituye a la 1.2.0: subes el ZIP y el módulo migra solo. Añade Microsoft Ads, Pinterest, Snapchat y LinkedIn, las etiquetas de navegador de las cuatro, el embudo de comercio electrónico completo de GA4, la conciliación diaria y los semáforos de salud. Quien actualiza conserva su momento de envío de la compra («al crear»); las instalaciones nuevas lo envían al cobrar.
Corrige además un fallo de la cookie del visitante, que podía hacer que el cliente perdiera el carrito, y dos casos en los que GA4 recibía artículos o número de artículos vacíos.
Compatible con PrestaShop 1.7.8 a 9.2, desde PHP 7.2
Desarrollado y mantenido por REKIRE
v1.3.10
Two exceptions to consent (both off by default)
delivery_mode of the channel log).tests/consentimiento-excepciones.php (against the fake relay).v1.3.9
Event log
rkra_acp_order, not the utm of the event row, which is empty when the purchase is confirmed later or by a payment notification. Google Ads campaigns without utm_campaign show their name from the setting "Google Ads campaign names" or their gad_campaignid (the id is in the tooltip).tests/tools/events-export.js (screen and both downloads): green on 1.7.6.5 and 9.2.0.v1.3.8
Google Ads campaigns without utm_campaign
gad_campaignid (and gad_source) to the landing URL, but most campaigns carry no utm_campaign: the column "Campaign" showed "-". The id is now kept as the campaign id of the touch (utm_id, sent to GA4 as campaign_id in campaign_details), and gad_source is kept too.utm_campaign, the campaign is named with the new setting "Google Ads campaign names" (one per line, 21888563683 = Shopping socks; =, ;, :, , or a tab), or shows the id itself. It applies to the order panel, the event log, the statistics and GA4/Meta. A utm_campaign always wins.gad_campaignid inside their landing URL: the id is read from there, so the orders of before also show it.Landing page
url_passthrough (Consent Mode) the click ids travel to the internal links, and the first beacon can arrive on the second page. When the referrer is a page of the shop with the same click ids, that page is taken as the landing page (closer to the real entry) and no internal referrer is stored.tests/atribucion-gad.php.v1.3.7
Panel of the order page
panel) the table "Campaign of the order" grew with the landing page and referrer URLs (gclid, _gl, gbraid…) and covered the next blocks (nacex: the staff could not change the state of the order). The panel now never makes the page wider: markup valid for panel and card, the tables scroll inside their own box with table-layout: fixed, and the URLs show host and path only (cut to 60 characters, full URL in the title).views/css/order-panel.css, loaded only on the order page, instead of the whole admin.css.tests/tools/order-panel.js (widths, overlap with another block, screenshot): green on 1.7.6.5 with nacex and on 9.2.0.Reconciliation and consent of older orders
id_order of its own table): orders placed before the module was active are never sent, whoever runs it.findByCustomer() has a date limit, measured with the same clock as the visits.v1.3.6
Orders of payment notifications taken for back office orders (urgent)
defined('_PS_ADMIN_DIR_'). The modules cronjobs and autoupgrade define that constant at the top of their main file, so with them installed every order created by a payment notification (Redsys, Bizum…) was stored as bo: its purchase was filtered as a back office order, never sent, and it lost its campaign.RkraRuntime::isBackOffice(): an admin controller (or controller_type "admin"), or an employee in the context without a front controller (the Symfony pages of the back office). The constant is no longer used to decide anything about the visitor or the order (isFrontVisitor() drops it too).bo without the note "Manual order -- Employee: …" (any language) in ps_message becomes other, gets the campaign of the beacon of its cart and the time of its first paid state. When the reconciliation is enabled, the next run of the cron runs it at once, and the purchases that are still inside the window of each platform (GA4 72 h, Meta 7 days) are queued with their campaign. To do it right away: cron?task=reconcile.tests/origen-bo.php (cronjobs loaded in a notification, employee in the back office, repair, manual order untouched, reconciliation).v1.3.5
Consent Mode with a consent platform that writes its default first
gtag('consent', 'default', …) right after <head>, already with the choice of a returning visitor, and send an update only when the banner is used. The module then wrote its own default (all denied) and, at start-up, an update with its own state: a visitor who had accepted ended up denied in GTM, and the module did not send anything to Meta for him.head.tpl looks at the dataLayer first: if another default without region is there, the module writes neither its default nor the update of its own cookie, and takes those values as the initial state (window.rkraAcpCmpDefault).consent.readFromDataLayer() reads that default as the base when there is one, always below any update. The default of the module itself is never read. Without a consent platform nothing changes.tests/tools/consent-cmp.js (new visitor, accepts, reload, returning visitor without the cookie of the module, rejects; state seen by GTM): all green on 1.7.6.5 with cookiesplus 1.7.1 and on 9.1.5 without a CMP.v1.3.4
GA4 with Google Tag Manager
purchase and refund through the Measurement Protocol, with the client_id and session_id of the _ga cookies so they join the session of GTM. The other platforms keep their browsing events. In GTM only the purchase and refund tags are paused.ga4_transaction_id), so the relay that builds the request uses the same one (the relay needs the RkraGa4Sender of this version in its lib/).v1.3.3
Includes everything in 1.3.2, which was not published on its own.
PrestaShop 1.7.6 and 1.7.7
translations/<locale>/*.xlf of a module, and the module came out in English. The catalogues of the module are now added, in memory, to the translator of the request (also used by $this->trans() and by {l s='' d=''} in the templates). Nothing is written to the database or the cache, and 1.7.8+ is not touched.Subscription renewals
skipped with the reason subscription_renewal. New setting "Subscription renewals" (Events): only to GA4, to no platform or to all of them.other and the IP and browser of the server are never attached to the customer. Front controllers named cron, webhook(s), notification, ipn or callback are machine calls.v1.3.2
Expected refusals are "skipped", not "failed"
skipped with their reason, do not count as errors and are not written to the error log of PrestaShop: no consent of the visitor (consent:...), no identifier the platform can match, usually a bot or a visitor without cookies (no_identifiers), a free order (zero_value) and an event older than the platform accepts (out_of_window). Until 1.3.1 they were failed + invalid_event, and filled the log (71 ViewContent in one night).failed with their reason.Reconciliation
out_of_window is counted as out of the window in the report, not as delivered.Status changes without a currency in the context
trackOrder, trackRefunds and trackCancellation load the currency of the order (and its language and shop when missing) in Context while they compute the event, and restore what was there afterwards. A status change from the console, an ERP or a cron failed with ComputingPrecision::getPrecision(): Argument #1 must be of type int, null given and the purchase was lost until the reconciliation.Orders placed before the module
consent:ad_user_data_denied). This is deliberate and now explained in the Guide (Consent Mode v2 & privacy → Orders placed before the module).v1.3.1
Campaign attribution (utm)
utm_* or an ad click id replaces the campaign; a direct return (no utm_*, no click id) keeps it for the lifetime of the visitor cookie (90 days by default). The first touch is also kept and never replaced.campaign_details event (campaign_id, campaign, source, medium, term, content) sent with the purchase only when it cannot join the browser session (no _ga_<stream> cookie: consent denied, blocker). With a session_id GA4 already attributes the purchase to the campaign of that session. New setting "Send the campaign to GA4 and Meta" (on).custom_data.AI channel
RkraAttribution::AI_PLATFORMS.oppref / obref, gclid, msclkid...) is paid, never organic AI; ChatGPT Ads without utm shows as chatgpt / cpc.ai_platform), and "Sales from AI assistants" in the statistics (orders and revenue per platform).Fixed
utm_* replaced the campaign the visitor came from.Checked (no change needed)
utm_*, gclid or fbclid: no history.replaceState, no redirect, no canonical of its own.gtag('config') and no page_view; with its own tag, exactly one config.rkra_vid, rkra_consent); _ga, _ga_<stream>, _gcl_aw, _fbp, _fbc and the cookies of other tags are only read.v1.3.0
New platforms
msclkid, _epik, ScCid / _scid, li_fat_id).Relay (contract v1.2)
Data collection
event_id, so the platforms deduplicate. GA4 never receives an event twice: navigation goes through gtag, purchases and refunds through the Measurement Protocol (everything through it in server-only mode).ads_data_redaction, url_passthrough and adapters for Cookiebot, CookieYes, Complianz and OneTrust besides the gtag consent update.view_item_list, select_item, view_promotion, select_promotion, view_item, add_to_cart, remove_from_cart, view_cart, begin_checkout, add_shipping_info, add_payment_info, purchase, search, login, sign_up, generate_lead, add_to_wishlist.gclid, gbraid, wbraid, fbclid, ttclid, msclkid...) and UTM parameters kept 90 days in a signed first-party cookie set by the server, with the first-seen time (Meta fbc).user_id (plain or hashed), _ga session id.phone_call), partial refunds per credit slip, cancellations, and Google Ads conversion adjustments (RETRACTION / RESTATEMENT).Setup and health
Delivery
action_source.reconcile.Fixes
Cookie class: creating one with another key replaced the encryption engine of the session cookie and the visitor lost the cart.num_items and server items of browser events were empty.
Todavía nadie ha preguntado nada sobre este producto.
🔔 Las ofertas de Rekire vuelan
Activa los avisos y recibe al momento cada descuento, módulo nuevo o actualización de seguridad para tu tienda. Sin spam: máximo 2 al día y nunca de noche.
Añade esta tienda a tu pantalla de inicio
Se abre como una aplicación, funciona sin conexión y carga antes.
📲 Lleva Rekire en tu iPhone y no te pierdas ninguna oferta