O cenário envia um modelo de marketing personalizado pelo WhatsApp quando a empresa publica conteúdo educativo ou de entretenimento para contatos que optaram por recebê-lo. A mensagem inclui o nome do cliente, o tópico ou título do conteúdo e um breve teaser sobre o valor contido. Um botão de URL estático abre o guia completo, artigo, checklist, estudo de caso ou vídeo com um toque.
Exemplo de modelo
Olá{{1}}! Escolhemos algo útil para você:{{2}}. {{3}}Toque no botão abaixo para ler ou assistir ao conteúdo completo.
Conteúdo aberto
{{1}}
nome do cliente
{{2}}
tópico ou título do conteúdo
{{3}}
o que o leitor aprenderá ou ganhará
“Conteúdo aberto”
botão — fixo no template Meta
Quando usá-lo
Use este cenário quando você já tem uma lista de opt-in no WhatsApp e deseja compartilhar conteúdo que agregue valor primeiro — um guia, artigo, checklist, estudo de caso, vídeo ou dica — que mantém o público engajado sem vender nada diretamente. Isso se encaixa para marcas de educação que compartilham dicas semanais, equipes B2B enviando materiais de como fazer entre os ciclos de produto, e agências conduzindo ondas de engajamento de conteúdo para marcas de clientes. Não é para notícias da empresa sobre você, promoções de desconto, ou fluxos de nutrição interativos com respostas rápidas.
Mantenha o canal aquecido sem um discurso de vendas.
Um modelo de MARKETING aprovado oferece conteúdo educativo ou de entretenimento fora da janela de 24 horas, para que os contatos recebam valor de você em vez de mais uma linha de desconto.
Conteúdo que menciona o leitor e o tópico.
Três variáveis de corpo carregam o nome do contato, o título do conteúdo e o teaser de valor, de modo que a mensagem é percebida como uma escolha útil em vez de uma transmissão genérica.
Um link estático para o conteúdo completo
Um botão de URL fixo no template Meta abre a página do guia, artigo, checklist, estudo de caso ou vídeo, para que o contato consuma o conteúdo com um toque, em vez de uma conversa de vai e vem.
Menos distribuição manual de conteúdo
CRM ou automação de conteúdo fornece os campos de segmentação e personalização, e o template é enviado com esse gatilho — nenhum representante reconstrói a lista ou retipa os teasers para cada contato.
Rastreamento de engajamento em envios de conteúdo
Os resultados de entrega e os clicks nos links são registrados para a execução da transmissão, para que o marketing saiba quantos contatos que se inscreveram abriram a peça antes de planejar a próxima onda de conteúdo.
Fluxo de Trabalho
Desencadear
O conteúdo ou marketing seleciona um segmento que optou por participar para a transmissão de engajamento.
event · triggered
Captura de evento
O sistema resolve números de telefone e campos de personalização de conteúdo para cada contato.
phone: "+…"
Construa e envie
Um template de conteúdo personalizado é construído com três variáveis de corpo e um botão de URL estático.
POST/sendTemplate
Entregue
Cada contato que optou por participar recebe a mensagem de engajamento de conteúdo do WhatsApp.
delivered
Status rastreado
As entregas e os cliques em links são registrados para rastreamento de engajamento e acompanhamento.
#!/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_TOPIC="___" # {{2}} topic or subject
TEST_ADDITIONALINFO="___" # {{3}} additional info
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_TOPIC=$TEST_TOPIC" \
"TEST_ADDITIONALINFO=$TEST_ADDITIONALINFO"; 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}} topic or subject → ${TEST_TOPIC}
# {{3}} additional info → ${TEST_ADDITIONALINFO}
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_TOPIC}" },
{ "type": "text", "text": "${TEST_ADDITIONALINFO}" }
]
}
]
}
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": true1MSGaceitoMensagem para enviar — não que já esteja no telefone do cliente.idcampo.wamid.…) para correlacionar os retornos de entrega.
Aprovado para envio —nãoainda no telefone do cliente
id
Armazene isso; retornos de entrega e callbacks.hookInfoestão focados nisso
A entrega em si chega mais tarde, como um retorno separado. Registre um webhook (POST …/webhook) e 1MSG publica atualizações de status no seu endpoint HTTPS em um nível superiorhooks[]carga.
200 OKWebhook de status de entrega — payload recebido
sent, delivered, read— ou um status de falha quando aplicável
id
Correla o retorno comidretornado pela chamada
timestamp
Segundos Unix, como uma string
Se você prefere não receber retornos de chamada, não se inscreva.GET {base}/{channel}/hookInfo?messageId=<id>em vez disso. Na prática, a entrega muitas vezes é concluída em segundos — mas o contrato da API não garante isso, então nunca bloqueie um fluxo esperando por isso.
Erros comuns
Status
Resposta
Causa
200
Message was not sent: template is not defined
namespace, template or language missing from the request body.
200
template name (…) does not exist in <language>
The template is approved in a different language than the one requested.
200
Message was not sent: provide chatId, phone, bsuid, or username
No recipient the channel could resolve.
403
access denied
The token is wrong, or belongs to a different channel than the URL.
429
too many requests. please try later
The channel is over its send rate.
Perguntas Frequentes
Sim — mensagens de WhatsApp de início a frio requerem um modelo aprovado pela Meta.