Recupera ventas perdidas: carritos abandonados de Shopify por WhatsApp
Recupera a quien se va sin pagar con un recordatorio automático de WhatsApp por cada carrito abandonado de Shopify. Sin código, se configura en una tarde.

Unos 7 de cada 10 clientes que añaden algo al carrito se van sin pagar. La mayoría de tiendas intenta recuperarlos por email. Casi nadie abre esos correos. WhatsApp es distinto: casi todos los mensajes se leen, normalmente en minutos. Así que un recordatorio corto y cercano del estilo "¡Hola Alex! Te dejaste la Chaqueta de Lana Merino. Aquí tienes tu enlace para terminar." hace que vuelva una parte real de esos clientes.
Lo mejor: puedes montarlo tú mismo. Sin código, sin programador, sin conocimientos técnicos. Wali es la forma más fácil de automatizar WhatsApp en tu negocio, y esta guía te lleva por el camino exacto, desde el principio hasta tu primera venta recuperada.
Qué vas a montar
Cuando alguien deja tu tienda de Shopify a mitad de la compra, recibe automáticamente un mensaje de WhatsApp con su nombre, el producto que dejó y un enlace directo para volver al checkout. ¿Sigue sin comprar? Un mensaje opcional al día siguiente añade un pequeño cupón. Eso es todo. Una vez activado, funciona solo.
Conectas tres cosas, una sola vez:
- Shopify, que ya registra por su cuenta los carritos abandonados en cualquier plan.
- Wali, la forma más fácil de automatizar WhatsApp y enviar tus mensajes sin escribir código.
- Tu número de WhatsApp, dado de alta en la API oficial de WhatsApp Business.
Vamos paso a paso.
Wali es quien recupera la venta. Envía el recordatorio, espera, hace el seguimiento y cierra la venta. Shopify no sabe enviar WhatsApp por su cuenta y se limita a avisar a Wali en cuanto alguien abandona un carrito. Hace de timbre, y quien vende es Wali.
Paso 1 · Crea tu cuenta de Wali
Entra en app.wali.chat/register y regístrate. Es cuestión de un minuto.
Paso 2 · Conecta tu número de WhatsApp
Dentro de Wali, conecta tu número en la API oficial de WhatsApp Business (de Meta). Wali te guía para registrar el número con Meta. Puedes usar un número nuevo o tu número de empresa de siempre.
Paso 3 · Crea tu mensaje recordatorio
WhatsApp pide a los negocios usar una plantilla de mensaje aprobada para recordatorios como este, una norma de Meta que mantiene la plataforma libre de spam. En Wali, crea una plantilla sencilla con tres huecos para el nombre del cliente, el producto y el enlace de recuperación, y envíala. La aprobación suele tardar hasta 24 horas. ¿Ya tienes una? Salta al siguiente paso.
Dos reglas sencillas para ir sobre seguro:
- Mensajea solo a quien te dio permiso (añade un opt-in de WhatsApp en el checkout).
- Deja de mensajear a quien responda STOP.
Paso 4 · Crea tu flujo de recuperación en Wali
En Wali, abre Flows y crea tu flujo de recuperación (está incluido desde el plan Business). El flujo funciona así: comprueba que el cliente dejó un teléfono, envía el recordatorio, espera un día y manda un seguimiento con un cupón.
No hace falta construirlo desde cero. El editor te deja colocar estos pasos en unos clics.
¿Quieres adelantar? Importa este flujo ya hecho en el editor y luego pon tu API key, tu dispositivo y los nombres de plantilla:
{
"name": "WhatsApp abandoned-cart recovery",
"nodes": [
{ "parameters": { "httpMethod": "POST", "path": "abandoned-cart", "responseMode": "onReceived", "options": {} },
"id": "a1", "name": "Abandoned cart", "type": "n8n-nodes-base.webhook", "typeVersion": 2, "position": [260, 300], "webhookId": "abandoned-cart" },
{ "parameters": { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "loose", "version": 2 }, "conditions": [ { "id": "c1a2b3", "leftValue": "={{ $json.body.phone }}", "rightValue": "", "operator": { "type": "string", "operation": "notEmpty", "singleValue": true } } ], "combinator": "and" }, "options": {} },
"id": "a2", "name": "Has phone?", "type": "n8n-nodes-base.if", "typeVersion": 2.2, "position": [480, 300] },
{ "parameters": { "method": "POST", "url": "https://api.your-domain.com/v1/messages", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "Token", "value": "YOUR_API_KEY" }, { "name": "Content-Type", "value": "application/json" } ] }, "sendBody": true, "specifyBody": "json", "jsonBody": "={ \"device\": \"YOUR_DEVICE_ID\", \"phone\": \"{{ $('Abandoned cart').item.json.body.phone }}\", \"template\": { \"name\": \"abandoned_checkout_reminder\", \"language\": \"en\", \"components\": [ { \"type\": \"body\", \"parameters\": [ { \"type\": \"text\", \"text\": \"{{ $('Abandoned cart').item.json.body.first_name }}\" }, { \"type\": \"text\", \"text\": \"{{ $('Abandoned cart').item.json.body.product }}\" }, { \"type\": \"text\", \"text\": \"{{ $('Abandoned cart').item.json.body.recovery_url }}\" } ] } ] } }", "options": {} },
"id": "a3", "name": "Send reminder", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [720, 300] },
{ "parameters": { "amount": 24, "unit": "hours", "resume": "timeInterval" },
"id": "a4", "name": "Wait 24 hours", "type": "n8n-nodes-base.wait", "typeVersion": 1, "position": [940, 300], "webhookId": "wait-24h" },
{ "parameters": { "method": "POST", "url": "https://api.your-domain.com/v1/messages", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "Token", "value": "YOUR_API_KEY" }, { "name": "Content-Type", "value": "application/json" } ] }, "sendBody": true, "specifyBody": "json", "jsonBody": "={ \"device\": \"YOUR_DEVICE_ID\", \"phone\": \"{{ $('Abandoned cart').item.json.body.phone }}\", \"template\": { \"name\": \"abandoned_checkout_reminder_coupon\", \"language\": \"en\", \"components\": [ { \"type\": \"body\", \"parameters\": [ { \"type\": \"text\", \"text\": \"{{ $('Abandoned cart').item.json.body.first_name }}\" }, { \"type\": \"text\", \"text\": \"{{ $('Abandoned cart').item.json.body.product }}\" }, { \"type\": \"text\", \"text\": \"{{ $('Abandoned cart').item.json.body.recovery_url }}\" } ] } ] } }", "options": {} },
"id": "a5", "name": "Send reminder + coupon", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [1160, 300] }
],
"connections": {
"Abandoned cart": { "main": [[{ "node": "Has phone?", "type": "main", "index": 0 }]] },
"Has phone?": { "main": [[{ "node": "Send reminder", "type": "main", "index": 0 }], []] },
"Send reminder": { "main": [[{ "node": "Wait 24 hours", "type": "main", "index": 0 }]] },
"Wait 24 hours": { "main": [[{ "node": "Send reminder + coupon", "type": "main", "index": 0 }]] }
},
"active": false, "settings": { "executionOrder": "v1" }, "pinData": {}
}Ahora copia la URL de tu webhook, porque Shopify y Wali no se conectan por ningún otro sitio:
- Abre el primer nodo del flujo, Abandoned cart (es un webhook).
- Copia su URL, que es la dirección a la que Shopify enviará cada carrito abandonado.
- Guárdala para el siguiente paso, donde la pegarás en Shopify.
Paso 5 · Conecta Shopify (esto solo avisa a Wali)
Lo único que hace Shopify Flow es avisar a Wali en cuanto un cliente abandona el carrito, porque enviar WhatsApp no está a su alcance. El enlace entre ambos es una sola URL: Shopify Flow → (envía los datos del carrito) → tu webhook de Wali → Wali envía el WhatsApp. Se configura una sola vez:
En tu panel de Shopify, abre la App Store e instala Shopify Flow, la app gratuita de Shopify que avisa a Wali en cuanto se abandona un carrito.

Busca Shopify Flow y haz clic en Install.

Ahora dile a Shopify que dispare ese flujo cada vez que alguien abandona un carrito. Abre la app Shopify Flow y:
1. Haz clic en Create workflow.

2. Haz clic en Add trigger, busca abandons y elige Customer abandons checkout. Luego haz clic en el + de abajo.

3. Elige Action.

4. Busca Send HTTP request y selecciónalo.

5. El formulario de la solicitud se abre vacío.

6. Rellena la solicitud exactamente como en la imagen de abajo, campo por campo:
- Método:
POST - URL: la URL del webhook de tu flujo de Wali (el nodo Abandoned cart que copiaste antes)
- Cabecera
Content-Type→application/json - Cabecera
Token→ tu API key de Wali - Body: pega el bloque de abajo y usa el botón Add variable de Flow para rellenar cada valor. No hace falta que entiendas el JSON mientras los nombres de los campos coincidan:
{
"event": "abandoned_checkout",
"checkout": {
"recovery_url": "{{ abandonedCheckout.abandonedCheckoutUrl }}",
"total": "{{ abandonedCheckout.totalPriceSet.presentmentMoney.amount }}",
"currency": "{{ abandonedCheckout.totalPriceSet.presentmentMoney.currencyCode }}"
},
"customer": {
"first_name": "{{ abandonedCheckout.customer.firstName }}",
"email": "{{ abandonedCheckout.customer.email }}",
"phone": "{{ abandonedCheckout.customer.phone }}"
},
"line_items": [
{% for lineItem in abandonedCheckout.lineItems %}
{ "title": "{{ lineItem.title }}", "quantity": {{ lineItem.quantity }} }{% unless forloop.last %},{% endunless %}
{% endfor %}
]
}
Nota: la acción Send HTTP request de Shopify está disponible a partir del plan Grow.
Paso 6 · Actívalo
Haz clic en Turn on workflow. Ya está. Cada carrito abandonado dispara ahora un recordatorio automático de WhatsApp. Esto es lo que ve tu cliente:

¿Aún no tienes tienda en Shopify? Empieza una prueba gratuita de Shopify y monta tu tienda para probar todo este flujo antes de pasar a un plan de pago.
Una secuencia de recordatorios
Un mensaje recupera algunos carritos; una secuencia corta y respetuosa recupera más. El flujo de arriba ya la incluye. Detente en el momento en que el cliente compra o responde STOP.
| Cuándo | Mensaje |
|---|---|
| 1 hora después | Recordatorio cercano + enlace al checkout |
| 24 horas después | Seguimiento + un pequeño cupón |
Preguntas frecuentes
¿Necesito un plugin para detectar carritos abandonados?
No. Shopify registra los checkouts abandonados de forma nativa en todos los planes. Tú solo añades WhatsApp encima.
¿Necesito saber programar?
No. Todo el montaje es hacer clic por Shopify Flow y Wali.
¿Qué planes necesito?
Wali plan Business o superior (para los flujos). En Shopify, el paso Send HTTP request necesita el plan Grow o superior.
¿Y si el cliente no dejó un teléfono?
Shopify solo captura el teléfono si el cliente lo escribió, así que en ese caso WhatsApp no puede alcanzarle. A esos los sigue cubriendo el email de recuperación de Shopify.
Recursos
¿List@ para recuperar más ventas?
Móntalo una vez y trabaja por ti mientras duermes. Crea tu cuenta gratuita de Wali y convierte carritos abandonados en pedidos completados.