Inicio / Guías / Cómo integrar PrestaShop con Klaviyo: módulo, API y flujos

Cómo integrar PrestaShop con Klaviyo: módulo, eventos y flujos clave

5,0 · 94 valoraciones
· Actualizado el 29 de octubre de 2025

Conecta PrestaShop con Klaviyo: módulo oficial, sincronización vía API, eventos de carrito abandonado, mapeo de clientes, errores típicos y verificación de entregabilidad.

Cómo integrar PrestaShop con Klaviyo: módulo, API y flujos

PrestaShop sigue siendo el ecommerce open source más usado en el sur de Europa, especialmente en España y Francia. Conectarlo con Klaviyo es menos directo que en Shopify o WooCommerce porque no existe una app oficial mantenida por Klaviyo, pero hay opciones viables: módulos de terceros maduros y, sobre todo, la integración mediante API que da control total sobre eventos y catálogo. Esta guía cubre las dos rutas y los problemas reales que aparecen al sincronizar tiendas medianas.

Para qué sirve la integración PrestaShop ↔ Klaviyo

Una vez conectadas obtienes:

  • Sync de clientes, pedidos y productos con histórico desde la fecha que elijas.
  • Tracking onsite de visitas y eventos del frontend (vista de producto, añadir al carrito, inicio de checkout).
  • Catálogo importado que permite usar imágenes, precios y URLs en bloques dinámicos de email.
  • Disparo de flujos basados en eventos: bienvenida, carrito abandonado, navegación abandonada, post-compra, winback.

A diferencia de plataformas como Shopify, en PrestaShop hay más responsabilidad técnica del lado del integrador: el módulo o el código propio deben asegurar que cada evento llega correctamente.

Requisitos previos

  • PrestaShop 1.7.6 o superior (idealmente 8.x).
  • PHP 7.4+ (8.1 recomendado) y MySQL 5.7+.
  • Acceso al backoffice como Superadministrador.
  • Posibilidad de instalar módulos .zip (algunos hostings restringen esto).
  • Cuenta de Klaviyo con Public API Key y Private API Key con scope events:write, profiles:read-write, catalogs:read-write.
  • Subdominio de envío con configurar SPF y firma DKIM configurados.

Vía A: módulo de terceros

Hay varios módulos en PrestaShop Addons (los más conocidos: Knowband, Idnovate, Common-Services). Características comunes:

  • Inyectan el snippet de tracking en el <head> del frontend.
  • Suscriben hooks (actionValidateOrder, actionCartSave, displayProductActions) y envían eventos a Klaviyo vía API.
  • Sincronizan catálogo (productos y categorías) periódicamente vía cron.

Instalación

  1. Compra y descarga el ZIP del módulo.
  2. Backoffice → Módulos → Subir un módulo → carga el ZIP.
  3. Tras instalar, abre la configuración del módulo.
  4. Pega Public API Key y Private API Key.
  5. Selecciona la lista por defecto (Newsletter PrestaShop).
  6. Activa “Web tracking”, “Order events” y “Catalog sync”.
  7. Guarda y ejecuta el sync inicial.

Verificación del snippet

Inspecciona cualquier página del frontend. En el <head> debe aparecer:

<script async src="https://static.klaviyo.com/onsite/js/XxYyZz/klaviyo.js?company_id=XxYyZz"></script>

Si no aparece, revisa que el módulo está activado y limpia la caché de Smarty (Backoffice → Parámetros avanzados → Rendimiento).

Vía B: integración por API directa

Si no quieres depender de un módulo o necesitas controlar la lógica, puedes implementar tú mismo los hooks y llamar a la API de Klaviyo. Es la ruta más robusta si la tienda crece o usas overrides custom.

Esqueleto de módulo personalizado

class KlaviyoBridge extends Module {
    public function __construct() {
        $this->name = 'klaviyobridge';
        $this->version = '1.0.0';
        $this->author = 'Equipo';
        parent::__construct();
        $this->displayName = 'Klaviyo Bridge';
    }

    public function install() {
        return parent::install()
            && $this->registerHook('actionValidateOrder')
            && $this->registerHook('actionCartSave')
            && $this->registerHook('displayHeader');
    }

    public function hookDisplayHeader() {
        return '<script async src="https://static.klaviyo.com/onsite/js/'
            . Configuration::get('KLAVIYO_PUBLIC_KEY') . '/klaviyo.js"></script>';
    }

    public function hookActionValidateOrder($params) {
        $order = $params['order'];
        $customer = new Customer($order->id_customer);
        $this->sendEvent($customer->email, 'Placed Order', [
            '$value' => $order->total_paid,
            'OrderId' => $order->id,
            'Currency' => Context::getContext()->currency->iso_code,
        ]);
    }

    private function sendEvent($email, $event, $properties) {
        $body = json_encode([
            'data' => [
                'type' => 'event',
                'attributes' => [
                    'profile' => ['email' => $email],
                    'metric'  => ['name' => $event],
                    'properties' => $properties,
                    'time' => gmdate('c'),
                ],
            ],
        ]);
        $ch = curl_init('https://a.klaviyo.com/api/events/');
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST => true,
            CURLOPT_HTTPHEADER => [
                'Authorization: Klaviyo-API-Key ' . Configuration::get('KLAVIYO_PRIVATE_KEY'),
                'Content-Type: application/json',
                'revision: 2024-10-15',
            ],
            CURLOPT_POSTFIELDS => $body,
        ]);
        curl_exec($ch);
        curl_close($ch);
    }
}

Este patrón se replica para actionCartSave (Started Checkout cuando hay email), actionProductCancel (refund), hookActionCustomerAccountAdd (Newsletter signup), etc.

Configuración mínima recomendada

Crea listas dedicadas:

  • Newsletter PS con doble opt-in.
  • Customers PS poblada por sync (no marketing por defecto).

PrestaShop permite checkbox de newsletter en la creación de cuenta y en el checkout. Asegúrate de que está sin marcar por defecto y de que el consent queda registrado en ps_customer.newsletter.

Mapeo de campos

KlaviyoPrestaShop
$emailcustomer.email
$first_namecustomer.firstname
$last_namecustomer.lastname
$phone_numberaddress.phone (E.164)
$countrycountry.iso_code
languagelang.iso_code

Si vendes en varios idiomas, mapea language y filtra los flujos por idioma para enviar solo en la lengua del cliente.

Eventos típicos a sincronizar

Los eventos mínimos que la integración debería cubrir:

Evento KlaviyoHook PrestaShop
Active on Sitesnippet onsite
Viewed ProductdisplayFooterProduct o JS onsite
Added to CartactionCartUpdateQuantityBefore
Started CheckoutactionCartSave con email
Placed OrderactionValidateOrder
Ordered Productiteración de OrderDetail
Cancelled OrderactionOrderStatusUpdate con state Cancelado
Refunded OrderactionProductCancel

Eventos extra útiles: Subscribed to Newsletter, Created Account, Reviewed Product (si usas un módulo de reviews).

Flujos esenciales que activar

  1. Welcome Series. Trigger: alta en Newsletter PS. 3 emails con cupón, marca, top productos.
  2. Abandoned Cart. Trigger: Started Checkout sin Placed Order en 1-2h. 3 emails: 1h, 24h, 72h.
  3. Browse Abandonment. Trigger: Viewed Product repetido sin add to cart.
  4. Post-purchase. Trigger: Placed Order. Confirmación, instrucciones, review request a 14-21 días.
  5. Winback. Trigger: cliente sin compra en 90 o 180 días.

Filtra por idioma o país si tu tienda vende en varios mercados; PrestaShop suele ser multi-idioma y multi-tienda.

Errores comunes y soluciones

”El sync de catálogo manda productos sin imagen”

PrestaShop guarda imágenes con varias versiones (cart, home, large). Si la URL pública del producto no devuelve https://, Klaviyo cachea una URL inválida. Revisa que PS_SSL_ENABLED y PS_SSL_ENABLED_EVERYWHERE estén a 1.

”Eventos llegan con timestamp de hace meses”

Si llamas a la API con un time mal formateado, Klaviyo lo ignora o lo coloca en el pasado. Usa siempre ISO 8601 UTC: gmdate('c') en PHP.

”El módulo no detecta carritos guest”

PrestaShop separa Guest (sesión sin cuenta) y Customer. El email del guest se guarda en ps_guest/ps_customer solo después de pasar la primera fase del checkout. Asegúrate de que tu hook actionCartSave solo dispara Started Checkout cuando hay email.

”Duplicación de eventos en checkout multi-step”

Si usas un módulo de checkout one-page (Quick Checkout), actionCartSave puede dispararse a cada cambio. Limita: dispara Started Checkout solo si han pasado X segundos desde el último envío para ese carrito.

”Customer match falla con cuentas invitadas”

Mismo problema que en Shopify: guests con emails distintos generan perfiles separados. Documenta el flujo y haz merge manual cuando detectes duplicados.

Verificación: ¿la integración funciona?

  1. Pedido de prueba. Compra como guest con tu email. Klaviyo → Profiles debe mostrar tu perfil con Started Checkout y Placed Order.
  2. Catálogo. Klaviyo → Catalogs → Products muestra el número correcto de productos activos.
  3. Email real. Campaña de test. En cabeceras:
Authentication-Results: mx.google.com;
       dkim=pass [email protected] header.s=klaviyo
       spf=pass smtp.mailfrom=bounce.tutienda.com
       dmarc=pass header.from=tutienda.com

Si DMARC header.from no alinea, revisa el From en Klaviyo → Settings → Domains.

Implicaciones de entregabilidad

PrestaShop tiene su propio sistema de mails transaccionales (confirmación de pedido, password reset). Estos NO van por Klaviyo: salen del SMTP configurado en el backoffice. Implicaciones:

  • Si quieres unificar reputación, configura el SMTP de PrestaShop apuntando al mismo proveedor que Klaviyo (Klaviyo no expone SMTP genérico, así que normalmente se usa otro proveedor: SendGrid, Postmark, Amazon SES).
  • Configura un subdominio dedicado para marketing (news.tutienda.com) y otro para transaccional (mail.tutienda.com). No mezcles.
  • Política DMARC en p=none durante 2-4 semanas, después quarantine. Verifica que los reportes RUA muestran SPF y DKIM pasando para Klaviyo en marketing y para tu SMTP en transaccional.
  • Activa List-Unsubscribe one-click. Klaviyo lo añade por defecto.
  • Si la lista lleva tiempo sin enviarse, plan de warming progresivo.

Multi-tienda con PrestaShop

Si tienes varias tiendas en una misma instalación de PrestaShop:

  • Cada tienda debería tener su propia cuenta de Klaviyo (mejor segmentación, mejor reputación independiente).
  • Si vas a una sola cuenta, etiqueta cada perfil con propiedad store_id y filtra los flujos.
  • El catálogo debe importarse por tienda; el módulo lo soporta normalmente.

Recursos relacionados

Si quieres profundizar, prueba estas herramientas gratuitas: Domain Health, mail tester, validador SPF y validador DMARC.

¿Necesitas que alguien lleve tu canal de email entero? Abalola Mail es la agencia de email marketing en España de Abalola para ecommerce: estrategia, producción y operación del stack sobre Klaviyo, Mailchimp o Brevo.

Preguntas frecuentes

¿Klaviyo tiene módulo oficial para PrestaShop?
No existe módulo oficial mantenido por Klaviyo. Hay módulos de terceros razonables y la opción de integración vía Klaviyo Events API que da control total sobre los eventos enviados.
¿Qué eventos puedo enviar a Klaviyo desde PrestaShop?
Los habituales: Viewed Product, Added to Cart, Started Checkout, Placed Order, Ordered Product. Se emiten desde hooks de PrestaShop o desde el frontend con klaviyo.js.
¿Cómo gestiono el doble opt-in en PrestaShop?
Usa formularios de Klaviyo embebidos o la sincronización de listas con doble opt-in activado en Klaviyo. Conecta los hooks de registro de PrestaShop para añadir contactos a la lista correcta.
¿Qué hago si los pedidos no llegan a Klaviyo?
Revisa los logs del módulo o de tu integración API. Causas habituales: tokens caducados, hooks de PrestaShop no registrados o tienda en modo mantenimiento durante la sincronización.
¿Cómo autentico los emails de Klaviyo con mi dominio?
Publica los CNAMEs DKIM y Return-Path indicados por Klaviyo en tu zona DNS y valida que las cabeceras muestran dkim=pass y spf=pass alineados.
¿Puedo seguir usando el mailing nativo de PrestaShop?
Sí, pero entonces tu reputación se reparte entre dos sistemas. Lo razonable: PrestaShop SMTP solo para transaccional crítico, Klaviyo para marketing.
¿Cómo migro de una solución previa (Mailchimp, Sendinblue) sin perder histórico?
Exporta perfiles vía CSV o API, impórtalos a Klaviyo manteniendo el `consent` de marketing solo si está documentado. Mantén la herramienta antigua activa unas semanas hasta cerrar flows en curso.