Wow! Redução de 65% no preço para clientes brasileiros! Registre-se agora
Anúncios CTWA · caso de uso da WhatsApp API

De um clique no anúncio do WhatsApp a um lead no CRM e à primeira resposta

O interessado recebe uma primeira resposta no chat do WhatsApp que o anúncio abriu; caso contrário, os cliques pagos ficam à espera de alguém escrever à mão. Quando alguém toca num anúncio Click-to-WhatsApp da Meta, o seu backend pode criar um Lead ou um Purchase e enviar esse aquecimento através da Whapi.Cloud. Esta página mostra aos integradores como montar esse percurso com a WhatsApp API.

Entrada messages.post com context.ad O corpo do aquecimento é texto de chat normal
Um anúncio da Meta num telemóvel ao lado de um chat do WhatsApp à espera da primeira resposta, com um cartão de lead do CRM junto ao fio.
Balão decorativo
Cenário de uso

Quando este percurso faz sentido

O gatilho é um clique Click-to-WhatsApp da Meta

Faz sentido se a pessoa chega ao tocar num anúncio Click-to-WhatsApp da Meta, não se digitou o número à mão sem contexto de anúncio.

O clique tem de criar um registo no CRM

Faz sentido se esse clique deve criar no seu backend um Lead ou um Purchase, não se apenas deixa o fio dentro do WhatsApp.

A primeira resposta fica nesse chat pessoal

Faz sentido se o aquecimento deve aparecer no mesmo chat direto que o anúncio abriu, não como perguntas de qualificação, convite para grupo nem um envio de saída a partir do HubSpot.

Ecrã de um telemóvel com um chat do WhatsApp em que o interessado acaba de receber a primeira resposta depois de tocar num anúncio Click-to-WhatsApp, com um cartão de CRM marcado Lead.
Experiência do cliente

O interessado recebe uma primeira resposta depois do anúncio

Sem automação, o chat fica vazio depois do toque no anúncio até um comercial escrever, e as vendas nunca veem o clique no CRM.

Quando o percurso corre, o interessado vê um aquecimento nesse chat do WhatsApp e a equipa tem um Lead ou um Purchase no cartão do CRM. Os integradores constroem este resultado com a WhatsApp API.

Fluxo

Do clique no anúncio à primeira resposta

1

Clique num anúncio Click-to-WhatsApp da Meta

Alguém toca num anúncio Click-to-WhatsApp da Meta e o chat de entrada chega ao seu canal. O payload de messages.post traz context.ad e, se existir, context.conversion. O seu backend escreve o Lead ou o Purchase no CRM a partir desse payload. A Whapi.Cloud não aloja o CRM.

2

Envie a mensagem de aquecimento

POST /messages/text

sendMessageText envia para o mesmo chat pessoal o corpo de aquecimento que o seu backend escolheu. Coloque em to o telefone do remetente ou o id do chat que vem no webhook.

Precisa de acompanhar a entrega? Se o aquecimento ficar em pending, não foi entregue. As alterações seguintes chegam em statuses.post e statuses.put. Ver o estado de entrega →

Pré-requisitos

Antes de executar o percurso

Ligue o número de WhatsApp que recebe esses chats de anúncio e autentique cada pedido com o token de API desse número. O mapeamento para o CRM e o texto de aquecimento ficam no seu backend.

Opcional — aprofunde este percurso

  • Acompanhar leads de WhatsApp a partir de anúncios da Meta: Abrir o guia
  • Como um evento de entrada leva à chamada de API seguinte: Abrir o guia
Implementação da API

A chamada que envia o aquecimento

O seu backend já leu a entrada atribuída ao anúncio e escreveu o evento no CRM. Esta chamada entrega o texto de aquecimento no mesmo chat pessoal.

Obtenha o seu token de API grátis depois de se registar em whapi.cloud e use-o no código no lugar de Your_Token dos exemplos.

Envie a mensagem de aquecimento

Envie o texto de aquecimento depois de a entrada Click-to-WhatsApp da Meta chegar.

curl --request POST \
     --url https://gate.whapi.cloud/messages/text \
     --header 'accept: application/json' \
     --header 'authorization: Bearer Your_Token' \
     --header 'content-type: application/json' \
     --data '
{
  "to": "15052462002",
  "body": "Hello"
}
'
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/messages/text",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{  \"to\": \"15052462002\",  \"body\": \"Hello\"}",
  CURLOPT_HTTPHEADER => [
    "accept: application/json",
    "authorization: Bearer Your_Token",
    "content-type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);
echo $response;
import requests

url = "https://gate.whapi.cloud/messages/text"
payload = {"to": "15052462002", "body": "Hello"}
headers = {
    "accept": "application/json",
    "authorization": "Bearer Your_Token",
    "content-type": "application/json"
}

response = requests.request("POST", url, json=payload, headers=headers)
print(response.text)
const response = await fetch("https://gate.whapi.cloud/messages/text", {
  method: "POST",
  headers: {
    accept: "application/json",
    authorization: "Bearer Your_Token",
    "content-type": "application/json"
  },
  body: JSON.stringify({ to: "15052462002", body: "Hello" })
});

console.log(await response.text());
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{  \"to\": \"15052462002\",  \"body\": \"Hello\"}");
Request request = new Request.Builder()
  .url("https://gate.whapi.cloud/messages/text")
  .method("POST", body)
  .addHeader("accept", "application/json")
  .addHeader("authorization", "Bearer Your_Token")
  .addHeader("content-type", "application/json")
  .build();

Response response = client.newCall(request).execute();
using RestSharp;

var options = new RestClientOptions("https://gate.whapi.cloud/messages/text");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("authorization", "Bearer Your_Token");
request.AddHeader("content-type", "application/json");
request.AddJsonBody(new { to = "15052462002", body = "Hello" });
var response = await client.ExecuteAsync(request);

Console.WriteLine("{0}", response.Content);
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
)

func main() {
	body := []byte(`{
  "to": "15052462002",
  "body": "Hello"
}`)
	req, _ := http.NewRequest("POST", "https://gate.whapi.cloud/messages/text", bytes.NewReader(body))
	req.Header.Set("accept", "application/json")
	req.Header.Set("authorization", "Bearer Your_Token")
	req.Header.Set("content-type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
Entrega da mensagem

Veja quando o aquecimento chega

Uma resposta de envio bem-sucedida não significa que o interessado já tenha o aquecimento. O primeiro estado visível antes de um webhook é pending. Alterações posteriores chegam só em statuses.post e statuses.put. Se o estado ficar em pending e não passar a sent, delivered ou um ack posterior, a mensagem não foi entregue. Verifique o payload e a permissão da conta para enviar esse tipo.

  • Um estado que fica em pending significa que o aquecimento não foi entregue.

  • Acompanhe statuses.post e statuses.put para sent, delivered e read.

  • Não trate o clique como aquecido até o aquecimento sair de pending ou o interessado responder.

O que ler sobre entrega e webhooks

Fale connosco se algo correu mal
Quando algo falha

Trate falhas em cada passo

Se messages.post chegar sem context.ad ou context.conversion utilizável, sendMessageText for recusado ou não entregue, ou a escrita no CRM no seu backend falhar, tente de novo ou alerte e não trate o clique como aquecido nem registado.

O clique no anúncio chegou, mas nada ficou registado?

Mantenha a escrita no CRM no seu backend separada da entrega no WhatsApp. Se faltar o contexto do anúncio, não envie e alerte. Se o aquecimento falhar, volte a tentar sendMessageText ou avise a equipa, e não marque o clique como Lead ou Purchase. Se o envio continuar a falhar depois de uma nova tentativa, contacte o suporte da Whapi com o id do canal e o id do pedido falhado.

Fale connosco se algo correu mal

Diagnostique por passo da API

Código Significado O que fazer
200 Created
400 Wrong request parameters
401 Need channel authorization for send message
402 Trial version limit exceeded
403 It is forbidden to send to this group/recipient
413 Request body too large
429 Too many requests
500 Internal Error
Perguntas frequentes

Dúvidas sobre leads de anúncio

Não. Este percurso escreve um Lead ou um Purchase no CRM e envia um aquecimento. Perguntas de qualificação no chat do anúncio são outro ramo.
Não. O seu backend escolhe Lead ou Purchase e escreve o registo. A Whapi.Cloud entrega o contexto do anúncio de entrada e o envio de aquecimento.
Há atribuição quando o clique no anúncio resulta numa mensagem e os campos do anúncio vêm nessa entrada. Se faltar context.ad, tente de novo ou alerte e não trate o clique como registado.
Não. O WhatsApp de saída do HubSpot começa num evento do CRM. Este percurso começa num clique Click-to-WhatsApp da Meta.
Não. Itens de um pedido de catálogo são outra origem. Aqui Purchase é o evento de CRM que o seu backend escreve depois do chat atribuído ao anúncio.
Recursos compatíveis do WhatsApp

Tudo o que você precisa para criar automações no WhatsApp

O Whapi.Cloud oferece acesso a um conjunto completo de recursos do WhatsApp — mensagens, mídia, grupos, canais, webhooks e muito mais. Crie bots, automações e integrações sem limitações de funcionalidades.

Escolhido por desenvolvedores

Confiado por mais de 3.300 desenvolvedores e equipes SaaS

Desenvolvedores no mundo inteiro utilizam o Whapi.Cloud para criar automações, bots, integrações com CRM, ferramentas de envio em massa e fluxos avançados de WhatsApp. Nossa infraestrutura processa milhões de requisições API com alta estabilidade — e esse número cresce a cada mês.

Ícone de recurso

5,5K+

canais de API ativos

Ícone de recurso

21M+

requisições API por mês

“Tudo é simples, intuitivo e fácil de navegar. A documentação é clara e todas as informações estão bem à mão. Trabalho excelente.”

Roberto K. / Desenvolvedor Web

“Conectamos o WhatsApp aos nossos fluxos usando o n8n em apenas alguns minutos. Sem código, sem complicações — funcionou de primeira.”

Martin P. / Desenvolvedor

“O Whapi.Cloud se tornou uma parte essencial da nossa comunicação com clientes. Automatizamos atualizações de produtos, notificações de pedidos e mensagens de suporte — tudo sem templates nem aprovações da Meta.”

Oscar T. / CTO

Balão decorativo