La mayoría de la recuperación de carritos abandonados se hace por correo electrónico. Una llamada telefónica funciona distinto, porque la llamada es la única que exige juicio. Enviarle un correo a alguien que ya compró es algo pasable. Llamarlo es un mal rato para los dos.
Por eso la mayor parte de esta guía no trata de marcar un número. Trata de todo lo que tiene que ser verdad antes: que exista un pago real, que de verdad no haya comprado, que no sea medianoche para esa persona, que nunca te haya pedido que dejes de llamarla, y que sepas su nombre lo bastante bien para abrir la llamada con él.
Reserva media hora. La mayor parte se va en Shopify, no aquí.
La versión corta
- Crea una aplicación de Shopify, marca cuatro permisos e instálala
- Copia dos secretos distintos de Shopify
- Guarda ambos en Omni Octo como conexiones
- Pídele a Octo que construya el flujo
- Copia la dirección del webhook y pégala en Shopify, dos veces
- Prueba con una espera de un minuto
Los pasos 1 y 5 son donde la gente se atasca. Tienen sus propias secciones.
Paso 1 — Crea la aplicación de Shopify e instálala
En Shopify: Configuración → Aplicaciones y canales de ventas → Desarrollar aplicaciones → Crear aplicación. Ponle un nombre que reconozcas después.
Marca estos permisos
Abre Configuración → Integración de la API del panel de control → Configurar y concede:
| Permiso | Para qué sirve |
|---|---|
read_orders | Comprobar si el comprador terminó comprando |
read_all_orders | La misma comprobación en pedidos de más de 60 días |
read_customers | Su nombre y su número de teléfono |
read_products | Leer qué había en el carrito |
Buscarás un permiso de checkout y no lo vas a encontrar. read_checkouts
existe, pero Shopify lo trata como protegido: no está en la lista que puedes
marcar, y pedirlo necesita la aprobación propia de Shopify. Si llamas a la API de
checkouts sin él, Shopify responde:
This action requires merchant approval for
read_checkoutsscope.
Está bien, y es la razón por la que este flujo nunca lee checkouts. Pregunta algo
mejor en su lugar — ¿apareció un pedido? — que solo necesita read_orders.
Instálala
Este es el paso que todo el mundo olvida. Configurar una aplicación no hace nada hasta que pulsas Instalar aplicación en la página Overview de la aplicación. Hasta entonces no hay ningún token de acceso a la API de Admin que copiar, y cada paso posterior falla de una forma que parece otra cosa rota.
Copia dos secretos, y no los mezcles
Necesitas dos cosas distintas, y es fácil confundirlas porque ambas parecen cadenas aleatorias.
| Qué | Dónde | Qué hace |
|---|---|---|
| Token de acceso a la API de Admin | La pestaña Credenciales de la API de la aplicación, después de instalar. Empieza con shpat_ | Le permite a Omni Octo hacerle preguntas a Shopify |
| Secreto de firma del webhook | Configuración → Notificaciones → Webhooks, al final de la página | Le permite a Omni Octo verificar los mensajes que envía Shopify |
Uno sirve para hablar con Shopify. El otro, para comprobar que Shopify realmente envió algo. Mezclarlos es el error más caro de toda esta configuración, y el síntoma no se parece en nada a la causa — ver Cuando no pasa nada.
Paso 2 — Guarda ambos secretos en Omni Octo
Ve a la página Conexiones y añádelos uno a la vez.
El token de acceso a la API de Admin. Pulsa Nueva conexión y elige la
tarjeta HTTP / clave de API bajo Otro. Pega el token shpat_. Dale a la
conexión un nombre que reconozcas en una lista — “Token de API de Admin de
Shopify” es mejor que “Shopify”.
El secreto de firma del webhook. Pulsa Nueva conexión de nuevo y elige Signing secret, luego pega el secreto de la página de Notificaciones. El formulario dice lo que conviene recordar:
The secret the sender signs with, not a key you call them with.
Dos conexiones, dos direcciones. Guarda ambas antes de construir nada.
Paso 3 — Pídele a Octo que construya el flujo
Tú no escribes la automatización. Abre el chat y describe lo que quieres, incluida la parte de guardar al comprador como contacto:
Cuando alguien abandone el carrito en mi tienda de Shopify, espera unos treinta minutos y llámalo. Guárdalo primero como contacto, con su nombre y su número de teléfono, para que el agente pueda saludarlo por su nombre. Llama desde +1 555 0100 con mi agente Shopify Cart Recovery.
Di la parte del contacto explícitamente. Octo construirá un flujo que funciona sin ella, pero el agente abre con un “Hola” genérico en vez de “Hola, Sarah”, porque el saludo toma el nombre de tu registro de contactos y no del mensaje de Shopify. Pedirlo es la diferencia entre una llamada de recuperación y una llamada en frío.
Octo leerá tus conexiones, encontrará a tu agente y puede preguntarte qué secreto de firma usar si guardaste más de uno. Responde con el secreto de firma, no con el token de Admin.
Luego comprueba que figure como activo. Un flujo que sigue marcado como borrador rechaza todo lo que Shopify envía, y el registro de entregas de Shopify se llena de fallos que parecen una dirección equivocada.
Paso 4 — Dale la dirección a Shopify
Abre el flujo y busca la tarjeta Webhook endpoint sobre el diagrama. Muestra la dirección y un estado:
- Ready — activo, con un secreto de firma guardado
- Inactive — en pausa o todavía como borrador, así que los mensajes de Shopify se rechazan
Pulsa Copy. Luego, en Shopify, ve a Configuración → Notificaciones → Webhooks → Crear webhook y crea dos, pegando la misma dirección en ambos:
| Evento | Formato | Por qué |
|---|---|---|
| Creación de pago | JSON | Se dispara cuando alguien llega al pago |
| Actualización de pago | JSON | Se dispara cuando completa más datos |
Por qué dos, en palabras simples
Shopify te avisa de un pago en el momento en que alguien lo empieza — que a menudo es antes de que escriba un número de teléfono. Te avisa de nuevo cada vez que completa algo, y uno de esos mensajes posteriores suele ser el que lleva el número.
Suscríbete solo al primero y tendrás flujos que arrancan sin nadie a quién llamar. Suscríbete a ambos y tendrás a alguien a quién llamar.
El mismo menú desplegable ofrece Creación de carrito, que suena bien y no lo es. Un carrito es solo una canasta: Shopify no tiene ni correo, ni teléfono, ni nombre para él, así que no hay a quién llamar. Úsalo solo si quieres una señal inofensiva de que tus webhooks están llegando.
Crea estos webhooks en el administrador de Shopify, a mano, en esta página. No los crees a través de la API de Shopify. Probamos ambos: los creados en esta página llegaron en unos treinta segundos; los creados a través de la API no llegaron nunca, en más de una hora, y Shopify no dio error en ningún caso.
Pulsa Enviar prueba en uno de ellos. Algo debería aparecer en la lista de ejecuciones de tu flujo en menos de un minuto. Ese clic es la forma más rápida de demostrar que la conexión funciona, y no cuesta nada.
Paso 5 — Pruébalo en un minuto
Pídele a Octo que cambie la espera a un minuto.
Primero, pon tu propio número de teléfono en un registro de cliente. En Shopify: Clientes → elige o crea un cliente con tu correo → añade tu número de teléfono y guarda.
Hazlo antes de comprar. Escribir un número de teléfono en la página de pago no basta: en el checkout de una sola página de Shopify no hay ningún paso que lo envíe antes del pago, así que un número escrito ahí puede que nunca llegue a Shopify. Perdimos una noche con esto. El número del registro de cliente viaja con el pago desde el primer mensaje, y eso es lo que hace funcionar la prueba.
Luego:
- Inicia sesión en tu tienda como ese cliente
- Añade algo al carrito
- Ve al pago, para que la página cargue
- Cierra la pestaña
Tu teléfono debería sonar más o menos un minuto después de que Shopify entregue el mensaje. No necesitas escribir nada en el formulario de pago.
Luego pídele a Octo que devuelva la espera a treinta minutos. Con un minuto, el flujo llama a personas que todavía están tecleando el número de su tarjeta.
Cuando no pasa nada
Esta es la sección que habríamos querido tener. Recórrela en orden: cada punto es algo que de verdad detuvo una prueba.
No llega nada al flujo
¿Pulsaste Instalar aplicación? Configurar los permisos no es instalar.
¿Creaste los webhooks en el administrador de Shopify, y no a través de la API? Ver arriba. Este fue, con diferencia, el que más tiempo nos costó.
¿Está el flujo activo? Un borrador lo rechaza todo.
¿Acabas de crear o editar el flujo? Dale un par de minutos. Un flujo recién creado responde un momento que no está listo mientras se activa, y Shopify reintenta por su cuenta.
Revisa primero el registro de entregas del propio Shopify, en el webhook que creaste. Si Shopify no muestra una entrega, el problema está de su lado de la línea y nada en Omni Octo te lo va a explicar.
Shopify lo envía, pero el flujo lo rechaza
Casi siempre es el secreto equivocado. Cuál firma depende de cómo se creó el webhook, y eso no es obvio:
| Webhook creado… | Firmado con |
|---|---|
| A mano, en la página de Notificaciones | El secreto de firma de esa misma página |
| Por una aplicación, a través de la API | La clave secreta de API de esa aplicación |
Si seguiste esta guía, quieres la primera fila. Apunta el flujo a la conexión del secreto de firma del Paso 2.
El flujo arranca, pero no se llama a nadie
¿Había un número de teléfono? Abre la ejecución y mira qué llegó. Sin número no hay llamada, por diseño.
Añadir al carrito no basta. Un carrito por sí solo no le dice nada a Shopify. La persona tiene que llegar a la página de pago, y Shopify tiene que tener una forma de contactarla: la cuenta con la que inició sesión, o lo que escriba allí.
Escribir un número de teléfono no es lo mismo que enviarlo. En el checkout de una sola página de Shopify no hay botón de “continuar” antes del pago, así que un número que alguien escriba puede que nunca llegue a Shopify. La solución confiable es la siguiente.
Pon un número de teléfono en el registro del cliente. En Shopify: Clientes → la persona → añade su teléfono. El número de un comprador con sesión iniciada viaja entonces con el pago desde el primer mensaje, y nada de lo anterior importa. Este fue el único cambio que hizo funcionar nuestra propia prueba.
Iniciar sesión por SMS no cuenta. Si Shopify envió un código por mensaje de texto para entrar, ese número pertenece al sistema de login de Shopify. Nunca llega a tu registro de clientes y no puedes usarlo.
Probar en una tienda de prueba o protegida con contraseña
Necesitas la contraseña de la tienda para comprar en tu propia tienda, en Tienda online → Preferencias → Protección con contraseña.
No confíes en onlineStoreUrl como señal de que un producto está publicado.
En una tienda protegida con contraseña, Shopify lo reporta vacío para todos
los productos, publicados o no. Perdimos tiempo publicando productos que ya
estaban publicados. Simplemente abre la página del producto con la contraseña y
compruébalo.
Qué impide una llamada
Cuatro comprobaciones. Cada una es un punto donde la ejecución termina en silencio y correctamente, en lugar de fallar. Lo que ves después difiere, así que conviene saber cuál es cuál.
Compró. Tras la espera, le preguntamos a Shopify si ya existe un pedido para ese pago. Si existe, la ejecución se detiene. Esta es toda la razón de la espera: Shopify cuenta un pago como abandonado en el momento en que alguien escribe un correo, que muchas veces es mientras todavía está buscando su tarjeta.
No pudimos saberlo. Si esa comprobación falla — token expirado, un permiso retirado, un problema de red — la ejecución se detiene sin llamar. Adivinar hacia el otro lado llama por teléfono a alguien que ya pagó.
Ambas cosas ocurren antes del primer paso, porque la comprobación es parte del disparador. Así que una ejecución detenida así aparece como completada sin pasos ejecutados — no se guardó nada y no se marcó ningún número. Hoy la pantalla de ejecuciones todavía no deja ver cuál de las dos fue; si hay ejecuciones completándose sin pasos y esperabas llamadas, revisa primero la conexión de la API de Admin.
Es de noche para esa persona. Los horarios de llamada salen del código de país del número de teléfono, y un número que no podamos ubicar en una zona horaria es un número al que no llamaremos. Para un país que abarca varias zonas, tiene que ser de día en todas.
Te pidió que pares. Un registro de no llamar para ese número bloquea la llamada antes de marcar nada, y la ejecución anota la negativa en lugar de fallar.
Lo que esto no hará
No va a crear los webhooks de Shopify por ti. Tú pegas la dirección, dos veces.
No va a inventar un número de teléfono. Sin número, no hay llamada.
Trata una llamada de recuperación como “al menos una vez”, no como “exactamente una vez”. Shopify envía un mensaje cada vez que el comprador cambia algo, y cada uno inicia su propia ejecución. Esas ejecuciones se emparejan, de modo que normalmente producen una sola llamada, pero un intervalo suficientemente largo entre mensajes puede producir una segunda. Conviene saberlo antes de apuntar esto a clientes reales.
Mantén la versión de la API al día. La conexión de la API de Admin registra qué versión de la API de Shopify usar. Shopify da soporte a cada versión durante más o menos un año y luego responde silenciosamente con una anterior en lugar de avisarte. Si ha pasado un año, actualízala.