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

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.

Descripción del caso de uso

El escenario envía a un nuevo lead una plantilla de WhatsApp personalizada como primer contacto comercial. El mensaje incluye el nombre del lead, nombre del especialista y de dónde provino la solicitud. Los botones quick-reply permiten tocar «Sí, me interesa» o «Llámame después»; los toques llegan vía webhook para enrutamiento a ventas o agenda.

Ejemplo de plantilla

Hola, {{1}}! Me llamo {{2}} y hago seguimiento de tu consulta desde {{3}}. Estoy listo para contarte más y responder todas tus preguntas — elige una opción conveniente abajo.

Sí, me interesa
  • {{1}}
    nombre del lead o cliente
  • {{2}}
    nombre del especialista o gerente que se presenta
  • {{3}}
    origen del lead o contexto de la solicitud (p. ej. formulario web, anuncio de Instagram, referido de partner)
  • “Sí, me interesa”
    botón — fijo en la plantilla de Meta
WhatsApp Business API for first contact with a new lead

Cuándo usarlo

Usa este escenario cuando entra un nuevo lead desde un formulario web, anuncio o CRM y necesitas un primer contacto rápido en WhatsApp mientras el interés sigue alto — pero no hay chat abierto, así que solo puede salir primero una plantilla aprobada. Encaja en embudos de generación de leads, equipos B2B y de servicios donde un gerente con nombre debe presentarse, y agencias que conectan webhooks de formularios o plataformas de anuncios al primer contacto outbound de 1MSG.

Primer contacto más rápido mientras el interés está alto
Un evento de lead desde formulario, anuncio o CRM obtiene teléfono, nombre del especialista y etiqueta de origen del payload y dispara la plantilla aprobada al instante, así el alcance llega por WhatsApp sin esperar una llamada en frío o un correo que nadie abre.
Saludo con estilo humano, no autoresponder genérico
Tres variables del cuerpo llevan el nombre del lead, el especialista que se presenta y de dónde vino la consulta, así el primer mensaje se lee como seguimiento personalizado y no como envío masivo.
Señal de interés al instante para ventas
Dos botones quick-reply — «Sí, me interesa» y «Llámame después» — están fijados en la plantilla de Meta; cada toque llega vía webhook para que ventas enrute leads calientes o programe devoluciones de llamada dentro de la ventana de sesión.
Cero copiar-pegar manual en alcance
La integración captura el evento de nuevo lead y envía la plantilla personalizada con las tres variables del cuerpo en ese disparador, así los reps no retipean nombres, orígenes ni presentaciones por cada lead entrante.
Seguimiento registrado donde nació el lead
El estado de entrega y el engagement de botones regresan vía webhook y se escriben de vuelta en el CRM, así el mismo registro que capturó el lead muestra si tocó interés o pidió que lo llamen después.

Flujo de trabajo

  1. Capturar evento

    Se captura un evento de nuevo lead desde formulario, anuncio o CRM.

    phone: "+…"

  2. Se obtienen teléfono del

    Se obtienen teléfono del lead, nombre del especialista y etiqueta de origen desde el payload.

    phone: "+…"

  3. Construir y enviar

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

    POST /sendTemplate

  4. Estado registrado

    El lead toca «Sí, me interesa» o «Llámame después» — el evento llega vía webhook para enrutamiento comercial.

    status: "read"

  5. Entregado

    La entrega y el engagement se registran en CRM para seguimiento.

    entregado

WhatsApp Business API for first contact with a new lead

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_LEADNAME="___"         # {{1}} lead name
TEST_SPECIALIST="___"         # {{2}} specialist name
TEST_LEADSOURCE="___"         # {{3}} lead source

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_LEADNAME=$TEST_LEADNAME" \
            "TEST_SPECIALIST=$TEST_SPECIALIST" \
            "TEST_LEADSOURCE=$TEST_LEADSOURCE"; 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}} lead name → ${TEST_LEADNAME}
# {{2}} specialist name → ${TEST_SPECIALIST}
# {{3}} lead source → ${TEST_LEADSOURCE}
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_LEADNAME}" },
        { "type": "text", "text": "${TEST_SPECIALIST}" },
        { "type": "text", "text": "${TEST_LEADSOURCE}" }
      ]
    }

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