Cómo integrar PrestaShop con Klaviyo: módulo, eventos y flujos clave
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.
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
- Compra y descarga el ZIP del módulo.
- Backoffice → Módulos → Subir un módulo → carga el ZIP.
- Tras instalar, abre la configuración del módulo.
- Pega Public API Key y Private API Key.
- Selecciona la lista por defecto (
Newsletter PrestaShop). - Activa “Web tracking”, “Order events” y “Catalog sync”.
- 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
Listas y consent
Crea listas dedicadas:
Newsletter PScon doble opt-in.Customers PSpoblada 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
| Klaviyo | PrestaShop |
|---|---|
$email | customer.email |
$first_name | customer.firstname |
$last_name | customer.lastname |
$phone_number | address.phone (E.164) |
$country | country.iso_code |
language | lang.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 Klaviyo | Hook PrestaShop |
|---|---|
Active on Site | snippet onsite |
Viewed Product | displayFooterProduct o JS onsite |
Added to Cart | actionCartUpdateQuantityBefore |
Started Checkout | actionCartSave con email |
Placed Order | actionValidateOrder |
Ordered Product | iteración de OrderDetail |
Cancelled Order | actionOrderStatusUpdate con state Cancelado |
Refunded Order | actionProductCancel |
Eventos extra útiles: Subscribed to Newsletter, Created Account, Reviewed Product (si usas un módulo de reviews).
Flujos esenciales que activar
- Welcome Series. Trigger: alta en
Newsletter PS. 3 emails con cupón, marca, top productos. - Abandoned Cart. Trigger:
Started CheckoutsinPlaced Orderen 1-2h. 3 emails: 1h, 24h, 72h. - Browse Abandonment. Trigger:
Viewed Productrepetido sin add to cart. - Post-purchase. Trigger:
Placed Order. Confirmación, instrucciones, review request a 14-21 días. - 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?
- Pedido de prueba. Compra como guest con tu email. Klaviyo → Profiles debe mostrar tu perfil con
Started CheckoutyPlaced Order. - Catálogo. Klaviyo → Catalogs → Products muestra el número correcto de productos activos.
- 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=nonedurante 2-4 semanas, despuésquarantine. 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_idy 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.