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

WhatsApp Business API para confirmação de recebimento

O cenário envia ao cliente um modelo de WhatsApp personalizado logo após a submissão de um formulário de aplicação ou solicitação.

Visão geral do caso de uso

O cenário envia ao cliente um modelo de WhatsApp personalizado logo após ele enviar um formulário de aplicação ou solicitação. A mensagem inclui o nome do cliente, o tipo de aplicação ou processo, e o que acontece a seguir. Um botão de URL estático abre o site da empresa ou a página de status da aplicação.

Exemplo de modelo

Olá {{1}}, recebemos sua aplicação para {{2}}. {{3}} Obrigado por enviar seu pedido — nós o manteremos atualizado sobre o progresso.

Abrir site
  • {{1}}
    nome do cliente
  • {{2}}
    tipo de aplicação ou pedido (por exemplo, empréstimo, trabalho, visto)
  • {{3}}
    próximo passo ou cronograma esperado (por exemplo, revisão em até 2 dias úteis)
  • “Abrir site”
    botão — fixo no modelo Meta
WhatsApp Business API for application receipt confirmation

Quando usá-lo

Use este cenário quando alguém enviar um formulário de solicitação ou aplicação e a empresa precisar confirmar o recebimento antes que eles chamem o suporte ou atualizem um portal. É adequado para serviços B2B que lidam com solicitações de empréstimos, vistos ou parcerias, equipes de RH reconhecendo candidaturas de emprego, e agências acionando o gatilho a partir de um website, CRM ou portal personalizado via webhook.

Menos ligações de "você recebeu minha candidatura?"
Três variáveis de corpo carregam o nome do candidato, tipo de solicitação e próximo passo, para que eles tenham comprovante no WhatsApp, sem precisar ligar para o suporte ou atualizar o portal.
Sem trabalho manual de reconhecimento.
O evento de envio do formulário dispara o template com o número de telefone resolvido, assim ninguém precisa reescrever a confirmação para cada candidato.
Clareza instantânea após o envio do formulário
Um modelo aprovado chega ao cliente no WhatsApp logo após a submissão, quando não há conversa aberta e uma mensagem de texto livre não é permitida.
Os detalhes da aplicação permanecem pesquisáveis.
Nome, tipo de solicitação e prazo esperado aparecem no chat do cliente, e o botão de URL estático abre o site da empresa ou a página de status da aplicação para qualquer coisa que a mensagem não abranja.

Fluxo de trabalho

  1. Desencadear

    O cliente envia um formulário de inscrição no site, portal ou CRM.

    event · triggered

  2. Capturar evento

    O sistema captura o evento de submissão e resolve o número de telefone do destinatário.

    phone: "+…"

  3. Construa e envie

    Uma mensagem de modelo personalizada é construída com três variáveis de corpo e um botão de URL estático.

    POST /sendTemplate

  4. Entregue

    O cliente recebe a confirmação do WhatsApp com o contexto da aplicação e os próximos passos.

    delivered

  5. Status monitorado

    O resultado da entrega é registrado; os erros são tratados de acordo com as regras da plataforma.

    status: "read"

WhatsApp Business API for application receipt confirmation

Implementação técnica

Pré-requisitos

  1. Chave da API 1MSG · Como obter a chave da API
  2. Conta comercial do WhatsApp · Como Conectar WABA
  3. Modelo do WhatsApp · Como Aprovar o Modelo WABA
  4. Consentimento do Cliente · Como Gerenciar o Consentimento dos Clientes

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_PROCESS="___"         # {{2}} process 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_PROCESS=$TEST_PROCESS" \
            "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}} process name → ${TEST_PROCESS}
# {{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_PROCESS}" },
        { "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 Tudo certo!Resposta
{
  "sent": true,
  "id": "wamid.HBgLMzgwNjM5...",
  "message": "Message accepted for delivery"
}
  • sent

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

  • id

    Armazene isso; as chamadas de entrega e hookInfo são baseadas nisso.

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

200 Claro!Status da 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

    Correlaciona a chamada de retorno com o id retornado pela chamada de envio

  • timestamp

    Segundos Unix, como uma string

Se você preferir não receber chamadas de retorno, consulte GET {base}/{channel}/hookInfo?messageId=<id> em vez disso. Na prática, a entrega geralmente é concluída em segundos — mas o contrato da API não garante isso, então nunca bloqueie um fluxo aguardando 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 de início frio requerem um template aprovado pelo Meta.

Relacionado

Serviço ao Cliente
WhatsApp Business API para suporte — reação e confirmações
Este cenário combina sendReaction e readMessage durante a janela de atendimento ao cliente de 24 horas.
Serviço ao Cliente
WhatsApp Business API para suporte — botões interativos
Este cenário envia uma mensagem interativa com o sendButton durante a janela de atendimento ao cliente de 24 horas.
Serviço ao Cliente
WhatsApp Business API para resposta de sessão — solicite mais.
Este cenário envia uma mensagem de texto livre pelo WhatsApp com sendMessage dentro da janela de atendimento ao cliente de 24 horas.
Serviço ao Cliente
WhatsApp Business API para notificação de resolução
O cenário envia um template personalizado pelo WhatsApp quando o ticket de suporte do cliente é resolvido.
Serviço ao Cliente
WhatsApp Business API — repasse ao especialista com contato
Este cenário envia um cartão de contato do WhatsApp com sendContact durante a janela de atendimento ao cliente de 24 horas.
Serviço ao Cliente
WhatsApp Business API para lembrete de resposta pendente
O cenário envia ao cliente um template personalizado de WhatsApp quando o suporte está bloqueado aguardando sua resposta.
Serviço ao Cliente
WhatsApp Business API para notificação de agente atribuído
O cenário envia ao cliente um template personalizado pelo WhatsApp quando um ticket de suporte é designado a um especialista.
Serviço ao Cliente
WhatsApp Business API para notificação de mudança de serviço
O cenário envia ao cliente um modelo personalizado de WhatsApp quando a empresa muda como um serviço ou processo funciona para eles.

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