Shared Inbox de WhatsApp para nueva PlataformaMás
1msg official logo

Confirmación de pago por WhatsApp API

El escenario envía al cliente una plantilla de WhatsApp personalizada cuando un pago se completa con éxito.

Descripción del caso de uso

El escenario envía al cliente una plantilla de WhatsApp personalizada cuando un pago se completa con éxito. El mensaje incluye el nombre del cliente, monto pagado y fecha de pago. Un botón URL estático abre el recibo o la página de historial de pagos.

Ejemplo de plantilla

Hola {{1}}, recibimos tu pago de {{2}} el {{3}}. Gracias por pagar con nuestro servicio.

Recibo
  • {{1}}
    nombre del cliente
  • {{2}}
    monto del pago
  • {{3}}
    fecha de pago
  • “Recibo”
    botón — fijo en la plantilla de Meta
WhatsApp Business API for payment success confirmation

Cuándo usarlo

Usa este escenario cuando un pago se completa y el cliente necesita prueba inmediata en un canal que realmente revisa — no un recibo por correo que queda sin leer. Encaja en equipos de facturación y suscripciones que confirman pagos de factura, negocios de e-commerce y servicios que acusan checkout o transferencias bancarias, y agencias que conectan pasarelas de pago o facturación ERP a confirmaciones automáticas en WhatsApp.

Menos consultas de "¿se acreditó mi pago?"
El nombre del cliente, monto pagado y fecha de pago llegan como tres variables del cuerpo en su chat de WhatsApp, así la prueba de pago queda a mano ahí y no enterrada en el correo.
Recibo en un toque
Un botón URL estático fijado en la plantilla aprobada de Meta abre el recibo o la página de historial de pagos — solo las tres variables del cuerpo se envían vía API.
Cero confirmación manual
Facturación o la pasarela de pago dispara la plantilla cuando la transacción tiene éxito, así nadie retipea monto y fecha para cada pagador.
Entrega registrada para auditoría
El resultado del envío se registra para facturación, CRM o seguimiento de soporte, así los equipos pueden verificar la entrega en lugar de adivinar si salió la confirmación.

Flujo de trabajo

  1. Disparador

    Facturación o la pasarela de pago confirma que la transacción fue exitosa.

    evento · disparado

  2. Capturar evento

    Se obtienen del sistema de facturación el teléfono del cliente, monto pagado y fecha de pago.

    phone: "+…"

  3. Construir y enviar

    Se construye un mensaje de plantilla personalizado con tres variables en el cuerpo y un botón URL estático hacia la página de recibo.

    POST /sendTemplate

  4. Entregado

    El cliente recibe la confirmación en WhatsApp y puede abrir el recibo con el botón.

    entregado

  5. Estado registrado

    Se registra el resultado de entrega para auditoría, facturación o seguimiento de soporte.

    status: "read"

WhatsApp Business API for payment success confirmation

Implementación técnica

Requisitos previos

  1. Clave API de 1MSG · Cómo obtener la clave API
  2. Cuenta de WhatsApp Business · Cómo conectar WABA
  3. Plantilla de WhatsApp · Cómo aprobar una plantilla WABA
  4. Opt-in del cliente · Cómo gestionar el consentimiento

Ejemplos de código

#!/usr/bin/env bash
set -euo pipefail

# === Configuration (replace "___" placeholders) ===

API_BASE_URL="https://api.1msg.io"        # production 1MSG API base URL
CHANNEL_ID="___"                           # channel ID from 1MSG dashboard
API_TOKEN="___"                            # channel JWT token (Bearer)

TEMPLATE_NAME="___"                        # approved template name
TEMPLATE_NAMESPACE="___"                   # template namespace (required — send fails without it)
TEMPLATE_LANGUAGE="___"                    # template language code, e.g. "en"



# === Test data ===
TEST_PHONE="___"                 # client phone in international format
TEST_CUSTOMERNAME="___"         # {{1}} customer name
TEST_PAYMENTAMOUNT="___"         # {{2}} payment amount
TEST_DATE="___"         # {{3}} date or time

PHONE_NORM="$(printf '%s' "$TEST_PHONE" | tr -cd '0-9')"

for pair in "CHANNEL_ID=$CHANNEL_ID" "API_TOKEN=$API_TOKEN" \
            "TEMPLATE_NAME=$TEMPLATE_NAME" "TEMPLATE_NAMESPACE=$TEMPLATE_NAMESPACE" \
            "TEMPLATE_LANGUAGE=$TEMPLATE_LANGUAGE" "TEST_PHONE=$TEST_PHONE" \
            "TEST_CUSTOMERNAME=$TEST_CUSTOMERNAME" \
            "TEST_PAYMENTAMOUNT=$TEST_PAYMENTAMOUNT" \
            "TEST_DATE=$TEST_DATE"; do
    val="${pair#*=}"
    if [ -z "$val" ] || [ "$val" = "___" ]; then
        echo "Missing configuration value: ${pair%%=*}" >&2
        exit 1
    fi
done

if [ -z "$PHONE_NORM" ]; then
    echo "Error: phone number has no digits after normalization" >&2
    exit 1
fi

URL="${API_BASE_URL%/}/${CHANNEL_ID}/sendTemplate"

# params carries body ONLY. Button text is fixed in the Meta template — no button param.

# {{1}} customer name → ${TEST_CUSTOMERNAME}
# {{2}} payment amount → ${TEST_PAYMENTAMOUNT}
# {{3}} date or time → ${TEST_DATE}
read -r -d '' PAYLOAD <<JSON || true
{
  "phone": "${PHONE_NORM}",
  "template": "${TEMPLATE_NAME}",
  "namespace": "${TEMPLATE_NAMESPACE}",
  "language": { "policy": "deterministic", "code": "${TEMPLATE_LANGUAGE}" },
  "params": [
    {
      "type": "body",
      "parameters": [
        { "type": "text", "text": "${TEST_CUSTOMERNAME}" },
        { "type": "text", "text": "${TEST_PAYMENTAMOUNT}" },
        { "type": "text", "text": "${TEST_DATE}" }
      ]
    }

  ]
}
JSON

RESPONSE="$(curl -s -w '\n%{http_code}' -X POST "$URL" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer ${API_TOKEN}" \
    -d "$PAYLOAD")"

HTTP_CODE="$(printf '%s' "$RESPONSE" | tail -n1)"
BODY="$(printf '%s' "$RESPONSE" | sed '$d')"

case "$BODY" in
    *'"sent":true'*) ok=1 ;;
    *) ok=0 ;;
esac

if [ "$HTTP_CODE" -ge 200 ] && [ "$HTTP_CODE" -lt 300 ] && [ "$ok" -eq 1 ]; then
    echo "Message sent to client."
    echo "API response: $BODY"
else
    echo "Send failed. HTTP status: $HTTP_CODE" >&2
    echo "$BODY" >&2
    exit 1
fi

Respuesta y estado de entrega

HTTP 2xx y JSON "sent": true significan que 1MSG aceptó el mensaje para envío — no que ya llegó al teléfono del cliente. Guarda el campo id (tipo wamid.…) para correlacionar los callbacks de entrega.

200 OKRespuesta
{
  "sent": true,
  "message": "Sent to [email protected]",
  "description": "Message has been sent to the provider",
  "id": "wamid.HBgLMzgwNjM5..."
}
  • sent

    Aceptado para envío — aún no en el teléfono del cliente

  • id

    Guárdalo; los callbacks de entrega y hookInfo se basan en él

Estados de entrega y webhooks →

Errores frecuentes

EstadoRespuesta de la APICausaSolución
200Message was not sent: template is not definedFalta namespace, template o language en el cuerpo de la petición.Envía los tres. Toma namespace y el nombre exacto de la plantilla de GET /templates; language es un objeto: {"policy": "deterministic", "code": "es_MX"}.
200template name (…) does not exist in <language>La plantilla está aprobada en otro idioma que el solicitado.Usa el código de idioma exacto con el que se aprobó la plantilla (por ejemplo, es_MX no es lo mismo que es). Revísalo en GET /templates.
200Message was not sent: provide chatId, phone, bsuid, or usernameNingún destinatario que el canal pudiera resolver.Envía un solo destinatario: phone (código de país y número, solo dígitos), chatId (por ejemplo [email protected]) o bsuid.

Todos los códigos de error →

Preguntas comunes

Relacionado

Desarrolla para WhatsApp en horas
sin complicaciones de infraestructura