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

Botones de intención del lead con WhatsApp API

El escenario envía al lead una plantilla de WhatsApp personalizada pidiendo aclarar su propósito.

Descripción del caso de uso

El escenario envía al lead una plantilla de WhatsApp personalizada pidiendo aclarar su propósito. El mensaje incluye su nombre y el producto o tema de interés. Tres botones quick-reply permiten elegir uso personal, uso empresarial o solo navegación; los toques llegan vía webhook para enrutamiento en CRM.

Ejemplo de plantilla

Hola, {{1}}! Para encontrar la mejor opción para "{{2}}", aclara: ¿con qué objetivo consideras esta solución? Elige una opción adecuada abajo.

Para mí
  • {{1}}
    nombre del lead o cliente
  • {{2}}
    producto, servicio o tema de interés
  • “Para mí”
    botón — fijo en la plantilla de Meta
WhatsApp Business API for client needs clarification

Cuándo usarlo

Usa este escenario cuando un lead muestra interés pero su propósito sigue poco claro — uso personal, compra empresarial o navegación inicial — y no hay conversación abierta en WhatsApp para preguntarlo en texto libre. Encaja en equipos de leads entrantes que asignan representantes por intención, embudos product-led que segmentan compradores al inicio y agencias que mapean toques quick-reply a reglas de enrutamiento en CRM.

La pista correcta antes de la primera llamada
El CRM marca un perfil de necesidad incompleto tras la captura; la plantilla envía el nombre del lead y el tema del producto como dos variables en el cuerpo más tres opciones quick-reply, así ventas sabe personal vs empresarial vs navegación antes de asignar un representante.
Intención estructurada sin idas y vueltas por correo
Tres botones quick-reply reemplazan respuestas en texto libre — el lead elige «Para mí», «Para empresa» o «Solo navegando» con un toque en lugar de un hilo de correo.
Enrutamiento automático en CRM desde el toque
La elección del botón llega vía webhook y se mapea a reglas de enrutamiento o campos del lead en CRM, así el lead pasa a la pista de ventas o nutrición correspondiente sin clasificación manual.
Primer contacto cuando no hay chat abierto
Una plantilla aprobada con dos variables en el cuerpo se envía cuando la captura no dejó sesión abierta — solo las variables del cuerpo van vía API mientras las etiquetas quick-reply permanecen fijadas en la plantilla de Meta.

Flujo de trabajo

  1. Capturar evento

    El CRM marca un lead cuyo perfil de necesidad está incompleto tras la captura.

    phone: "+…"

  2. Se obtienen teléfono del

    Se obtienen teléfono del lead y contexto del producto desde el payload.

    phone: "+…"

  3. Construir y enviar

    Se envía una plantilla personalizada con dos variables en el cuerpo y tres botones quick-reply.

    POST /sendTemplate

  4. Estado registrado

    El lead toca «Para mí», «Para empresa» o «Solo navegando» — el evento llega vía webhook.

    status: "read"

  5. Entregado

    El CRM enruta el lead a la pista de ventas o nutrición correspondiente.

    entregado

WhatsApp Business API for client needs clarification

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
  5. Endpoint de webhook · Cómo configurar webhooks

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_PRODUCTORSERVICENAME="___"         # {{2}} product or service name

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_PRODUCTORSERVICENAME=$TEST_PRODUCTORSERVICENAME"; 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}} product or service name → ${TEST_PRODUCTORSERVICENAME}
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_PRODUCTORSERVICENAME}" }
      ]
    }

  ]
}
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

Captación y conversión de leads
Invitación a asesoría con plantilla de WhatsApp API
El escenario envía al cliente una plantilla de WhatsApp personalizada invitándolo a una consulta pre-compra.
Captación y conversión de leads
Alerta de nuevo lead al gerente por WhatsApp API
El escenario envía al gerente de ventas una plantilla de WhatsApp personalizada cuando se captura un lead nuevo.
Captación y conversión de leads
Iniciar calificación de leads con WhatsApp API
Este caso de uso envía a un lead nuevo una plantilla de WhatsApp aprobada con saludo personalizado: el mensaje sustituye el nombre del lead y el contexto de producto o fuente, y el botón quick-reply «
Captación y conversión de leads
Mensaje de reactivación de leads con WhatsApp API
El escenario envía al lead una plantilla de WhatsApp personalizada cuando no respondió a un mensaje de ventas previo dentro del tiempo esperado.
Captación y conversión de leads
Aviso de traspaso de lead a ventas (WhatsApp API)
El escenario envía al cliente una plantilla de WhatsApp personalizada cuando su lead calificado es traspasado al equipo de ventas.
Captación y conversión de leads
Primer mensaje a un lead nuevo con WhatsApp API
El escenario envía a un nuevo lead una plantilla de WhatsApp personalizada como primer contacto comercial.
Captación y conversión de leads
Enviar propuesta comercial por WhatsApp API
El escenario envía al prospecto una plantilla de WhatsApp personalizada cuando una propuesta comercial está lista.
Captación y conversión de leads
Seguimiento cuando no responden (WhatsApp API)
El escenario envía al cliente una plantilla de WhatsApp personalizada cuando no respondió a un mensaje de servicio previo dentro del tiempo esperado.

Desarrolla para WhatsApp en horas
sin complicaciones de infraestructura