Operación

Checkout abandonado de infoproductos en WhatsApp: receta para Kiwify, Hotmart y Eduzz

Quien llega al checkout y se va casi compró. Las plataformas de infoproductos lo saben y envían un evento de carrito abandonado por webhook. Esta receta muestra qué envía cada una, con qué retraso, cómo probar el flujo antes de cualquier cliente y cómo escribir los dos mensajes de la recuperación sin sonar a presión.

Publicado el · 4 min de lectura

Este artículo también está disponible en: Português · English

Qué envía cada plataforma, y cuándo

PlataformaEventoTeléfonoRetraso y detalles
------------
Hotmart (2.0.0)PURCHASE_OUT_OF_SHOPPING_CARTdata.buyer.phone, con código de paísEmpieza cuando la persona llena nombre o correo; Hotmart verifica cada 30 minutos
Kiwifycarrinho_abandonadoBloque del payload de carrito; revísalo en Testar WebhookFormato propio, sin webhook_event_type ni order_status
Eduzzcart_abandonment (referencia sun.cart_abandonment)data.customer.phoneTrae data.saleRecoveryUrl, el enlace del checkout para volver

En la práctica, el mensaje nunca llega en el segundo en que la persona cierra la pestaña. En Hotmart, el retraso de hasta 30 minutos ya está en el diseño del evento. Escribe el texto sabiéndolo: 'vi que empezaste a inscribirte' funciona mejor que 'acabas de salir'. Los detalles de cada plataforma están en Hotmart, Kiwify y Eduzz.

Camino sin código: el asistente Recuperar vendas

En el panel de ZapZap, abre Fluxos y haz clic en Recuperar vendas. Elige la plataforma, el objetivo 'Recuperar carrito abandonado' y el número. El asistente crea el webhook y un flujo ya conectado, con un mensaje inmediato y un recordatorio 30 minutos después, y muestra la URL con el formato https://api.zapzapapi.com/api/webhooks/flow/{segredo}. Pega la URL en la plataforma, marca el evento de carrito y guarda.

Si ingresas la clave de la plataforma en el asistente, ZapZap valida el origen de cada evento: el hottok de Hotmart en el encabezado X-HOTMART-HOTTOK, el HMAC-SHA1 del parámetro signature de Kiwify y el HMAC-SHA256 del x-signature de Eduzz. Sin clave, solo el secreto de la URL protege el webhook. ZapZap detecta sola dónde están el teléfono, el nombre y el producto en el payload e ignora el mismo teléfono en el mismo flujo durante 10 minutos, lo que absorbe las reentregas.

Prueba antes de cualquier cliente

No esperes a que un cliente real abandone el carrito para saber si funciona. Dispara un evento falso con tu propio número usando curl y lee la respuesta. La respuesta {"ok":true,"triggered":1} dice que el flujo se disparó; triggered: 0 dice que no se detectó teléfono o que el mismo número ya recibió ese flujo en los últimos 10 minutos. Luego abre el webhook en el editor y mira la muestra y el campo que se detectó como teléfono.

Terminal (curl)

# Test the recovery flow with a fake abandoned cart (your own number only)
curl -X POST 'https://api.zapzapapi.com/api/webhooks/flow/YOUR_SECRET' \
  -H 'Content-Type: application/json' \
  -d '{"id":"test-cart-1","event":"PURCHASE_OUT_OF_SHOPPING_CART","version":"2.0.0",
       "data":{"product":{"id":1,"name":"Test course"},
               "buyer":{"name":"Maria Test","email":"maria@example.com","phone":"5511999990001"},
               "offer":{"code":"abc123"}}}'
# expected: {"ok":true,"triggered":1}   (triggered 0 = no phone detected, or same number within 10 minutes)

Los dos mensajes: primero ayuda, urgencia después y solo si es verdad

El primer mensaje debe ofrecer ayuda y no cobrar la compra. Ejemplo: 'Hola, María. Vi que empezaste a inscribirte en el curso X y no terminaste. ¿Te quedó alguna duda sobre el contenido o el pago? Puedo ayudarte por aquí.' Cita el producto, acepta que la persona pudo haber desistido y abre la conversación.

El segundo, 30 minutos después, solo tiene sentido si hay un motivo real: el enlace para volver (en Eduzz, saleRecoveryUrl), una condición de pago que de verdad ofreces, un plazo de lote que de verdad existe. La escasez inventada quema la confianza y es el tipo de cosa que la gente denuncia. Después del segundo, para: ZapZap no dispara un tercer mensaje por sí sola, y tú tampoco deberías.

Consentimiento y límites

El carrito abandonado es un contacto derivado de una compra iniciada: la persona dejó su teléfono en tu checkout. Eso es distinto de prospectar una lista fría. Aun así, deja claro en la página de checkout que puede haber contacto por WhatsApp, ofrece una salida en cada mensaje y respeta el pedido. La guía de LGPD en WhatsApp detalla la base legal (LGPD es la ley de protección de datos de Brasil).

Y una limitación honesta: el webhook genérico de ZapZap acepta 120 solicitudes por minuto por webhook (por encima de eso responde 429) y se dispara con el teléfono detectado; si el teléfono llega sin DDD, como puede pasar en compras de Hotmart, el flujo no se dispara y necesitas un endpoint tuyo para juntar DDD y número. ZapZap conecta números por un canal no oficial y gestionado, así que ninguna recuperación está libre de riesgo de bloqueo.

Resumen rápido

  • Hotmart verifica carritos cada 30 minutos; Eduzz trae el enlace de regreso en saleRecoveryUrl; Kiwify usa un payload propio.
  • El asistente Recuperar vendas, en Fluxos, arma webhook y flujo sin código y valida la firma cuando ingresas la clave.
  • Prueba con curl en tu número: triggered: 1 se dispara, triggered: 0 pide diagnosticar el teléfono.
  • Dos mensajes como máximo, el primero ofreciendo ayuda y el segundo solo con un motivo real.

Lee también

Preguntas frecuentes

¿El mensaje sale apenas la persona cierra el checkout?

No. En Hotmart, el evento se verifica cada 30 minutos. En las otras plataformas el retraso no está documentado de la misma forma. Escribe el mensaje sin fingir que el cliente acaba de irse.

¿Funciona con cualquier plataforma?

El asistente tiene Kiwify, Hotmart, Eduzz, Monetizze y Yampi. Para otras, el webhook genérico del editor de flujos detecta el teléfono en el payload si viene completo. Si el payload no tiene teléfono, como en Asaas, el camino es un endpoint tuyo.

El flujo respondió triggered: 0. ¿Qué hago?

Mira la muestra del webhook en el editor. Causas comunes: el teléfono no llegó o no tiene de 10 a 13 dígitos, el teléfono salió de otro campo, o el mismo número ya recibió el flujo en los últimos 10 minutos.

¿Puedo enviar un tercer mensaje?

Técnicamente puedes, pero no deberías. Después de dos mensajes, quien no respondió probablemente no quiere. Insistir aumenta las denuncias, y las denuncias son la principal causa de limitación de números.

¿Necesito validar la firma del webhook?

Es recomendable. Sin la clave de la plataforma guardada, cualquiera que descubra la URL puede disparar el flujo. Con la clave, ZapZap rechaza con 401 el evento cuya firma no coincida.

¿Puedo usar el asistente en un producto de afiliado?

Solo si el productor libera los datos del comprador, incluido el teléfono. Sin esa liberación, el webhook llega sin teléfono y el flujo no se dispara.

Recupera la venta que casi ocurrió

Usa el asistente de Recuperación de Ventas o tu propio endpoint. R$15 por número activo al mes, con crédito de bienvenida sujeto a la campaña vigente.