← Blog

·

Recuperación de Pix, boleto y carrito abandonado por WhatsApp

Actualizado el 25/10/2026

La recuperación de ventas por WhatsApp consiste en enviar, por la API oficial de WhatsApp, una plantilla aprobada a quien generó un código Pix o un boleto y no pagó, o a quien dejó productos en el carrito. Los pagos Pix y boleto pendientes son avisos sobre una transacción que el cliente ya inició y pueden aprobarse como utilidad, siempre que el texto no sea promocional. El recordatorio de carrito abandonado es marketing para Meta, aunque el cliente lo haya pedido, y requiere opt-in de marketing.

Contexto para quien no conoce Brasil: Pix es el sistema de pagos instantáneos del Banco Central de Brasil, que se paga escaneando un QR o pegando un código «copia y pega» en la app del banco. El boleto es un comprobante de pago bancario con fecha de vencimiento y una «línea digitable» numérica; su compensación puede tardar.

Esta guía muestra de dónde viene cada disparador, cuánto esperar, cómo escribir la plantilla en la categoría correcta, cómo poner el botón de pago dentro del mensaje y un ejemplo de worker en Node.js.

Tres situaciones, tres tratamientos

Antes de escribir cualquier mensaje, separe los casos. En el panel de ventas parecen iguales, pero Meta trata cada uno de forma distinta.

SituaciónQué existe en su sistemaCategoría probableOpt-in necesario
Pix generado y no pagadoPedido con código Pix y validezUtilidad, si el texto trata solo del pedidoAvisos del pedido
Boleto emitido y no pagadoPedido con línea digitable y vencimientoUtilidad, si el texto trata solo del pedidoAvisos del pedido
Carrito abandonadoProductos en el carrito, sin pedidoMarketingOfertas y novedades
Recordatorio con cupón o urgenciaCualquiera de los anteriores con incentivoMarketingOfertas y novedades

La regla viene de las pautas de categorización de plantillas de Meta: utilidad debe ser no promocional y específica del usuario (pedido, cuenta, transacción). Meta cita «dejaste productos en el carrito, finaliza la compra» como ejemplo de retargeting, que es marketing «incluso si el usuario lo solicitó». El contenido mixto, como un aviso de pedido con una promoción, también es marketing. El artículo sobre cómo Meta clasifica su plantilla lo explica en detalle.

La categoría define el costo. Para destinatarios en Brasil, la tarifa de Meta vigente desde el 1 de octubre de 2026 es de R$ 0,3217 por plantilla de marketing entregada y R$ 0,0350 por plantilla de utilidad (página de precios).

De dónde vienen los disparadores

WhatsApp no sabe que un Pix venció ni que alguien salió del checkout. Los eventos vienen de otros sistemas, y su backend decide si envía el mensaje:

  • Pix: el banco o proveedor de pagos (PSP) que genera el código dinámico avisa por webhook cuando el cobro se paga o vence. Guarde la fecha de creación y la validez.
  • Boleto: el PSP informa emisión, pago y baja. La compensación no es instantánea, así que un boleto «sin pagar» puede estar solo en proceso.
  • Carrito del sitio: la plataforma de tienda o de checkout registra el abandono cuando el cliente deja su teléfono y no termina.
  • Carrito dentro de WhatsApp: si vende por el catálogo, el carrito de WhatsApp solo llega a su sistema cuando el cliente lo envía, por el webhook de pedido. La documentación de catálogos indica que el carrito no vence y queda en el chat hasta enviarse. No existe evento de abandono para ese carrito.

Regla de oro para los tres casos: consulte el estado del pago justo antes de enviar. Un recordatorio de «Pix pendiente» a quien acaba de pagar genera quejas y bloqueos.

Cuánto esperar

Meta no define tiempos para esto. Use los puntos siguientes como base para probar con sus datos:

CasoPrimer contactoSegundo contactoDetener cuando
PixPocos minutos después de generarlo, si no se pagóPoco antes de que venza el códigoPagado, vencido o el cliente pidió parar
BoletoAl día siguiente de la emisión, con la línea digitableLa víspera o el día del vencimientoPagado, vencido sin renegociar u opt-out
CarritoAlgunas horas después del abandonoEn general, ningunoCompra realizada u opt-out

Tres cuidados para todos:

  • La validez del Pix es responsabilidad suya. Meta aclara que WhatsApp no lee la validez dentro del código. Si la oferta terminó, haga vencer el código en el PSP también.
  • Horario. Envíe cuando sus clientes suelen comprar y evite la madrugada.
  • Límite de marketing por usuario. Los recordatorios de carrito compiten con el marketing de otras empresas. Meta puede no entregarlos y devolver el error 131049 (límite por usuario).

Cómo escribir la plantilla en la categoría correcta

TextoCategoría probablePor qué
«Su pedido {{1}} está esperando el pago por Pix de {{2}}. El código vale hasta {{3}}.»UtilidadDatos del pedido, sin persuasión
«El boleto del pedido {{1}}, por {{2}}, vence el {{3}}. La línea digitable está en el botón.»UtilidadAlerta sobre una transacción del cliente
«¡Su Pix sigue sin pagar! Apúrese, quedan pocas unidades.»MarketingUrgencia comercial
«Pague hoy y obtenga 5 % de descuento en el pedido {{1}}.»MarketingIncentivo económico
«Dejó {{1}} en el carrito. Finalice su compra.»MarketingRetargeting, ejemplo citado por Meta

Si envía la plantilla como UTILITY y Meta concluye que es marketing, se aprueba como MARKETING. Revise siempre la categoría en la respuesta de creación y en el webhook template_category_update. Insistir en hacer pasar marketing por utilidad lleva a restricciones que pueden convertir todas las plantillas de utilidad de la cuenta.

Botón de pago dentro de la plantilla

En Brasil, Meta ofrece las payment request CTA templates: una plantilla de utilidad o marketing con hasta tres botones PAYMENT_REQUEST, cada uno con un medio de pago (código Pix dinámico, línea digitable del boleto, enlace de pago o pago con tarjeta en un clic). El cliente toca y copia el código, sin necesidad de integrar la Orders API (documentación).

Creación de la plantilla (el código es solo un ejemplo; el real va en el envío):

{
  "name": "pix_pendente",
  "language": "pt_BR",
  "category": "UTILITY",
  "components": [
    { "type": "BODY", "text": "Seu pedido {{1}} está aguardando o pagamento via PIX de {{2}}. O código vale até {{3}}.",
      "example": { "body_text": [["#10482", "R$ 189,90", "18h de hoje"]] } },
    { "type": "BUTTONS", "buttons": [
      { "type": "PAYMENT_REQUEST", "text": "Copy Pix code",
        "payment_setting": { "type": "pix_dynamic_code",
          "pix_dynamic_code": { "code": "00020101021226700014br.gov.bcb.pix..." } } }
    ] }
  ]
}

El campo text del botón solo acepta los valores fijos de la documentación (Copy Pix code, Copy Boleto code, Open payment link o Review payment). En el envío, el código real de cada cliente va en el parámetro del botón:

{
  "messaging_product": "whatsapp",
  "to": "5584999999999",
  "type": "template",
  "template": {
    "name": "pix_pendente",
    "language": { "code": "pt_BR" },
    "components": [
      { "type": "body", "parameters": [
        { "type": "text", "text": "#10482" },
        { "type": "text", "text": "R$ 189,90" },
        { "type": "text", "text": "18h de hoje" } ] },
      { "type": "button", "sub_type": "payment_request", "index": "0",
        "parameters": [ { "type": "action", "action": { "payment_request": {
          "payment_setting": { "type": "pix_dynamic_code",
            "pix_dynamic_code": { "code": "CODIGO_PIX_DEL_PEDIDO" } } } } } ] }
    ]
  }
}

Meta hace dos advertencias: WhatsApp no desactiva el botón cuando el código o el enlace pierde validez, y no concilia pagos. Quien confirma el pago es su PSP. Para el boleto, cambie payment_setting por { "type": "boleto", "boleto": { "digitable_line": "..." } }.

Cuando el cliente responde y la ventana de atención de 24 horas está abierta, también puede enviar un mensaje interactivo order_details, con productos, total y el Pix o boleto, y luego un order_status cuando se confirme el pago.

Opt-in: dos consentimientos

Meta pide que el opt-in deje claro que la persona acepta recibir mensajes y de qué empresa, y recomienda opt-ins separados por tipo de mensaje (Get opt-in for WhatsApp). Para recuperar ventas, eso se traduce en dos casillas en el checkout:

  • Avisos del pedido: cubre Pix y boleto pendientes, confirmación y entrega.
  • Ofertas: cubre carrito abandonado y cualquier recordatorio con incentivo.

El carrito es el caso delicado: el teléfono se informó, pero la compra no ocurrió. Envíe el recordatorio solo si la casilla de ofertas se marcó antes del abandono. Guarde fecha, origen y texto aceptado, e incluya un botón para darse de baja. En Brasil, estos datos también están sujetos a la LGPD, la ley de protección de datos (Ley 13.709/2018); este texto no sustituye asesoría legal. Vea cómo armar una lista opt-in.

Ejemplo: worker de recuperación en Node.js

El worker corre cada minuto, busca pedidos pendientes con recordatorio vencido, consulta el estado en el PSP y envía la plantilla por Vectalk, que usa el mismo payload de la Cloud API.

const VECTALK = 'https://apis.vectalk.com.br/api/messages';
const TOKEN = process.env.VECTALK_TOKEN;

async function enviarRecordatorioPix(pedido) {
  const r = await fetch(VECTALK, {
    method: 'POST',
    headers: { Authorization: `Bearer ${TOKEN}`, 'Content-Type': 'application/json' },
    body: JSON.stringify({
      messaging_product: 'whatsapp',
      to: pedido.wa_id,
      type: 'template',
      template: {
        name: 'pix_pendente',
        language: { code: 'pt_BR' },
        components: [
          { type: 'body', parameters: [
            { type: 'text', text: pedido.numero },
            { type: 'text', text: pedido.montoFormateado },
            { type: 'text', text: pedido.validezFormateada },
          ] },
          { type: 'button', sub_type: 'payment_request', index: '0', parameters: [
            { type: 'action', action: { payment_request: { payment_setting: {
              type: 'pix_dynamic_code', pix_dynamic_code: { code: pedido.pixCopiaPega },
            } } } },
          ] },
        ],
      },
    }),
  });
  const cuerpo = await r.json();
  if (!r.ok) throw new Error(`Error ${cuerpo.error?.code ?? r.status}`);
  return cuerpo.messages[0].id;
}

export async function ejecutarRecuperacion(db, psp) {
  const pendientes = await db.pedidosConRecordatorioVencido('pix');
  for (const pedido of pendientes) {
    const estado = await psp.consultarCobro(pedido.txid); // fuente de verdad
    if (estado !== 'ACTIVA') { await db.cerrarSecuencia(pedido.id, estado); continue; }
    if (!pedido.optinAvisos || pedido.optout) continue;
    if (await db.recordatorioYaEnviado(pedido.id, 'pix_1')) continue; // idempotencia
    const wamid = await enviarRecordatorioPix(pedido);
    await db.registrarRecordatorio(pedido.id, 'pix_1', wamid);
  }
}

Después del envío, siga entregas y fallas por el webhook de estado con el wamid guardado. El artículo sobre estados de mensaje por webhook muestra cómo tratar failed.

Cómo hacerlo con Vectalk

Vectalk es un proxy de la WhatsApp Cloud API oficial de Meta: usted crea plantillas y envía mensajes con los mismos payloads de Meta, cambia solo la URL base (https://apis.vectalk.com.br/api) y el token, y recibe los webhooks en el formato oficial. Los cargos de Meta llegan en la factura de Vectalk, y la coexistencia permite mantener el número en la app WhatsApp Business. Vea la creación de plantillas en docs.vectalk.com.br y cree su cuenta en apps.vectalk.com.br/register.

Preguntas frecuentes

¿Un recordatorio de Pix pendiente siempre es utilidad?

No. Suele aprobarse como utilidad cuando trae solo datos del pedido (número, monto, validez). Con descuento, urgencia o sugerencia de productos, pasa a marketing. La decisión final es de Meta, que puede recategorizar después de aprobar.

¿Puedo enviar recordatorio de carrito a quien solo aceptó avisos del pedido?

No. El carrito abandonado es marketing y requiere opt-in de ofertas. El consentimiento para avisos del pedido no cubre retargeting.

¿WhatsApp me confirma el pago del Pix?

No. La documentación de pagos de Meta indica que WhatsApp no concilia pagos. Su banco o PSP confirma el pago, y su sistema cierra la secuencia.

¿Cuántos recordatorios debo enviar?

Para Pix y boleto, dos suelen bastar: uno justo después de generarlo y otro cerca del plazo. Para carrito, uno solo. Más que eso aumenta bloqueos y denuncias, que bajan la calidad del número.

¿Sirve para productos digitales?

Sí, la lógica es la misma. Vea WhatsApp para infoproductores y, para cobros recurrentes, cómo armar un flujo de cobranza por WhatsApp.


Fuentes oficiales consultadas el 25/10/2026: Categorización de plantillas, Payment request CTA templates (Brasil), Pix dinámico, Boleto, Orders API (Brasil), Catálogos, Get opt-in for WhatsApp, Precios, Documentación de Vectalk.

Integre o WhatsApp oficial ao seu sistema

A Vectalk entrega a Cloud API da Meta com os mesmos payloads e webhooks, um token para todas as contas e documentação completa.