💬 Shared Inbox do WhatsApp na nova PlataformaMais
1msg official logo

WhatsApp Business API para reengajar leads interessados

O cenário envia um modelo personalizado de WhatsApp para um lead ou cliente que demonstrou interesse anteriormente, mas ficou inativo.

Visão geral do caso de uso

O cenário envia um template personalizado de WhatsApp para um lead ou cliente que demonstrou interesse anteriormente, mas ficou inativo. A mensagem inclui o nome deles, o produto ou tópico que eles se interessaram e um gancho atualizado para reengajamento. Um botão de URL estático abre a página da oferta ou catálogo atual.

Exemplo de modelo

Olá, {{1}}! Você já demonstrou interesse em "{{2}}". {{3}} Ficaríamos felizes em ajudar novamente — abra a oferta atual usando o botão abaixo.

Proposta aberta
  • {{1}}
    nome do cliente ou lead
  • {{2}}
    produto ou serviço pelo qual demonstraram interesse anteriormente
  • {{3}}
    gancho de reengajamento (ex.: preços atualizados, nova funcionalidade, oferta por tempo limitado)
  • “Proposta aberta”
    botão — fixo no modelo Meta
WhatsApp Business API for re-engage previously interested lead

Quando usá-lo

Use este cenário quando um contato se inscreveu, demonstrou verdadeiro interesse em um produto ou plano específico, e depois ficou quieto — e algo mudou desde então que vale a pena contar a ele. Isso se encaixa em campanhas de recuperação, carrinhos de e-commerce deixados para trás após uma mudança de preços, e agências realizando reengajamento para várias marcas de clientes.

Mais receita dos contatos que você já pagou.
A campanha é direcionada a contatos que você já pagou para adquirir, então uma resposta custa o envio de um template em vez de um novo clique.
Menos transmissões genéricas ignoradas
Três variáveis de corpo carregam o nome do contato, o produto que eles olharam e a razão para voltar, assim a mensagem é lida como uma continuação, não uma transmissão.
Menos trabalho manual de acompanhamento
O CRM sinaliza o segmento inativo e o modelo é enviado nesse evento, assim nenhum representante refaz a lista ou reescreve a oferta para cada contato.
Respostas mais rápidas do que e-mail
A mensagem chega no WhatsApp, onde um modelo aprovado pode alcançar um contato fora da janela de 24 horas, em vez de aguardar em uma caixa de entrada ignorada.
Relatórios de recuperação de clientes
Delivery and read events return by webhook and are written back to the CRM, so the campaign reports on the same record it started from.

Fluxo de Trabalho

  1. Desencadear

    O CRM ou a automação de marketing sinaliza um contato inativo com interesse anterior.

    event · triggered

  2. Capturar evento

    O sistema resolve os campos de número de telefone e interesse histórico.

    phone: "+…"

  3. Construir e enviar

    Um template de recuperação personalizada é construído com três variáveis de corpo e um botão de URL estático.

    POST /sendTemplate

  4. Entregue

    O contato recebe a mensagem de reengajamento do WhatsApp.

    delivered

  5. Status rastreado

    O resultado da entrega é registrado no CRM para a campanha de recuperação.

    status: "read"

WhatsApp Business API for re-engage previously interested lead

Implementação técnica

Pré-requisitos

  1. Chave da API 1MSG · Como obter a Chave da API
  2. Conta do WhatsApp Business · Como Conectar WABA
  3. Template do WhatsApp · Como Aprovar o Template do WABA
  4. Aceitação do Cliente · Gerenciando o Consentimento

Exemplos 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
TEST_NEXTSTEP="___"         # {{3}} next step

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" \
            "TEST_NEXTSTEP=$TEST_NEXTSTEP"; 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}
# {{3}} next step → ${TEST_NEXTSTEP}
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}" },
        { "type": "text", "text": "${TEST_NEXTSTEP}" }
      ]
    }

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

Status de resposta e entrega

HTTP 2xx e JSON "sent": true significam que 1MSG aceitou a mensagem para envio — não que ela já tenha chegado ao telefone do cliente. Salve o campo id (parece com wamid.…) para correlacionar os callbacks de entrega.

200 Entendido.Resposta
{
  "sent": true,
  "id": "wamid.HBgLMzgwNjM5...",
  "message": "Message accepted for delivery"
}
  • sent

    Aceito para envio — não ainda no telefone do cliente

  • id

    Armazene-o; os retornos de chamada de entrega e hookInfo são baseados nisso.

A entrega em si chega depois, como um callback separado. Registre um webhook (POST …/webhook) e 1MSG POSTa atualizações de status para seu endpoint HTTPS em um payload hooks[] de nível superior.

200 Entendido.Status de entrega webhook — payload recebido
{
  "hooks": [
    {
      "id": "gBGGeSaGViBfAgnlzOSHEwK9O6F",
      "type": "message",
      "status": "sent",
      "timestamp": "1654864094",
      "recipient_id": "556123122026"
    }
  ]
}
  • status

    enviado, entregue, lido — ou um status de falha quando aplicável

  • id

    Correla o callback com o id retornado pela chamada de envio

  • timestamp

    Segundos Unix, como uma string

Se você preferir não receber chamadas de retorno, faça uma pesquisa GET {base}/{channel}/hookInfo?messageId=<id> em vez disso. Na prática, a entrega geralmente é concluída em poucos segundos — mas o contrato da API não garante isso, então nunca bloqueie um fluxo esperando por ela.

Erros comuns

StatusRespostaCausa
200Message was not sent: template is not definednamespace, template or language missing from the request body.
200template name (…) does not exist in <language>The template is approved in a different language than the one requested.
200Message was not sent: provide chatId, phone, bsuid, or usernameNo recipient the channel could resolve.
403access deniedThe token is wrong, or belongs to a different channel than the URL.
429too many requests. please try laterThe channel is over its send rate.

Perguntas Frequentes

Sim — mensagens de WhatsApp para cold-start exigem um modelo aprovado pela Meta.

Relacionado

Campanhas de Marketing
WhatsApp Business API para reativação de clientes inativos
O cenário envia um modelo de marketing personalizado pelo WhatsApp para um cliente existente que comprou ou usou o serviço antes, mas está inativo há meses.
Campanhas de Marketing
WhatsApp Business API para transmissão de campanha sazonal
O cenário envia um template de marketing personalizado pelo WhatsApp quando uma campanha sazonal baseada em calendário é ativada.
Campanhas de Marketing
WhatsApp Business API para envio de convites para eventos
O cenário envia um template de marketing para WhatsApp personalizado para contatos que optaram por receber informações sobre um evento público futuro.
Campanhas de Marketing
WhatsApp Business API para catálogo de produtos e serviços
O cenário envia um modelo de marketing personalizado pelo WhatsApp para contatos que optaram por receber, quando a empresa atualiza seu catálogo completo.
Campanhas de Marketing
WhatsApp Business API para transmissão de novidades
O cenário envia um modelo personalizado de WhatsApp quando novos itens ou uma coleção aparecem no catálogo.
Campanhas de Marketing
WhatsApp Business API para envio de banner promocional
O cenário envia um modelo de WhatsApp personalizado quando o marketing lança uma campanha visual.
Campanhas de Marketing
WhatsApp Business API para ofertas promocionais
O cenário envia um modelo de marketing personalizado pelo WhatsApp para contatos que optaram por receber quando uma campanha promocional começa.
Campanhas de Marketing
WhatsApp Business API para mensagem de boas-vindas
O cenário envia um modelo personalizado WhatsApp quando um usuário conclui o cadastro.

Crie para o WhatsApp em horas
sem complicações de infraestrutura