---
id: agencias/funil-de-whatsapp
industria: Agências de marketing
uso: comum
esforco: médio
grao: Atendimento (uma ocorrência); cliente x canal x campanha x dia para o funil
---

# Funil de WhatsApp

Do anúncio à conversa, ao atendimento e à venda, com um custo por conversa que não se passa por custo de venda.

## Resumo executivo

**Para quem:** Agências que geram conversas no WhatsApp para clientes que fecham a venda no atendimento.

**O que resolve**

- O custo por conversa fica separado do custo por venda, e o cliente para de comparar os dois.
- Cada atendimento tem data, linha e atendente, sem confundir contato com pessoa.
- A venda que veio da conversa fica ligada à campanha que gerou a conversa.

**Por que importa:** Em boa parte das pequenas e médias empresas, a única conversão que a plataforma vê é a conversa aberta. Um custo por conversa baixo convence o cliente de que a mídia vai bem até ele olhar o caixa. Sem ligar a conversa ao atendimento e à venda, a agência otimiza para quem clica, e não para quem compra.

**Perguntas de negócio que responde**

- Quantas conversas cada campanha gerou e quanto custou cada uma?
- Quantas dessas conversas foram atendidas e quantas viraram venda?
- Por qual linha de WhatsApp os clientes mais chegam?
- Qual o tempo de espera até o primeiro atendimento, por dia?
- Quantas mensagens falharam, e por quê?

**O que você precisa**

- Meta Ads e Google Ads do cliente conectados, com as campanhas de conversa identificadas pelo objetivo
- A ferramenta de atendimento ou o CRM conectados, com a lista oficial de números do cliente
- Um identificador que ligue a conversa ao anúncio: id do anúncio, ctwa_clid ou ferramenta de rastreio

**O que você recebe**

- Uma tabela de atendimentos com data, linha, departamento, atendente e tabulação
- O funil anúncio, conversa, atendimento e venda por campanha
- Alerta de campanha apontando para número fora do rastreio
- Um agente de IA que responde sobre WhatsApp sem chamar conversa de venda

## Detalhado

### O problema

A plataforma conta conversa iniciada e chama de resultado. A ferramenta de atendimento conta ocorrências, contatos e mensagens, cada uma com várias datas, e campos como fechado querem dizer fechamento técnico, não venda. Sem uma chave entre conversa e anúncio, o funil quebra no meio e a agência não sabe qual campanha vende.

### Regras de negócio

1. **Conversa iniciada é topo de funil.** Em campanhas com optimization_goal CONVERSATIONS, o resultado é onsite_conversion.messaging_conversation_started_7d, e o custo por conversa é o investimento dessas campanhas dividido pelas conversas iniciadas. No Google, a conversão é a ação de clique no WhatsApp, identificada pelo nome da ação de conversão. Nenhuma das duas é lead qualificado nem venda. (Evite: Reportar custo por conversa como custo por venda.)
2. **Atendimento, contato e pessoa são diferentes.** Na ferramenta de atendimento, cada ocorrência (report.id no RD Station Conversas) é um atendimento, e o mesmo contato tem várias. Contatos únicos = contagem distinta do id do contato dentro da ferramenta, e isso não é pessoa única entre sistemas. Diga sempre qual dos três está sendo contado. (Evite: Contar linhas da tabela como clientes atendidos.)
3. **Uma data para cada pergunta.** O eixo temporal do atendimento é created_at, no fuso do cliente. opened_at é a última sessão de atendimento e, numa API real, só cobria o último mês, o que empilharia meses de histórico num só. started_at, finished_at e closed_at respondem perguntas próprias e não substituem a data de criação. (Evite: Usar opened_at como data da conversa.)
4. **Fechado não é venda.** closed e closed_at registram o fechamento técnico da ocorrência. Não são conclusão de fluxo, sucesso, conversão nem venda. Venda vem do CRM ou de um campo de resultado preenchido pela operação. A tabulação de encerramento feita pelo atendente (sem resposta, lead inapto, venda) vale mais que qualquer inferência. (Evite: Contar atendimentos fechados como vendas.)
5. **A linha de WhatsApp é dimensão.** Clientes com vários números (comercial, 0800, eventos, unidades) têm a linha identificada por uma chave técnica da integração. Mapeie a chave para o nome operacional numa tabela do cliente e filtre por linha só quando a pergunta for por linha: o nome do cliente sozinho significa a empresa inteira, mesmo que uma linha tenha o mesmo nome. (Evite: Filtrar a linha que tem o nome da empresa quando perguntam pela empresa.)
6. **Todo tráfego no número rastreado.** Quando o cliente usa ferramenta de rastreio de WhatsApp, toda campanha paga aponta para o número conectado a ela. Campanha que leva para outro número é erro de configuração e vira alerta, porque as conversas dela não entram no funil. (Evite: Aceitar campanha apontando para qualquer número.)
7. **A ponte é o id do anúncio.** Ligue a conversa ao anúncio pelo id do anúncio que a ferramenta ou o CRM gravam (ou pelo ctwa_clid), cruzando com a versão mais recente de cada anúncio. Sem id, use o telefone normalizado (55, DDD e número) e a primeira conversa do telefone no período. Nome de campanha digitado não é chave. (Evite: Casar pelo nome da campanha.)
8. **Tempo de atendimento pela mediana.** A ferramenta entrega tempos como texto (18h 10m 00s): converta para segundos. Use mediana, nunca média, porque uma conversa respondida de madrugada destrói a média. Separe o horário comercial (valid_business_period) do resto. (Evite: Média do tempo de espera.)
9. **Mensagem com erro tem causa.** Mensagem enviada com status sent, delivered ou read é sucesso; failed é erro. Separe erro da própria operação, erro de janela de 24 horas fechada e erro da conta do cliente. Custo de template = mensagens enviadas x valor unitário da categoria do template; categoria sem preço fica nula, não zero. (Evite: Somar todos os erros num número só.)
10. **Telefone não sai da Nekt.** Para dashboard ou aplicativo externo, pseudonimize o telefone (hash mais os últimos 4 dígitos) antes da saída. O número completo fica só na camada interna, usado como chave. (Evite: Enviar o telefone completo para o dashboard.)

### Etapas do funil de WhatsApp

De onde vem cada etapa e o campo que a conta.

- **Meta · objetivo CONVERSATIONS** → Conversa iniciada (`onsite_conversion.messaging_conversation_started_7d`)
- **Meta · resposta do anunciante** → Primeira resposta (`onsite_conversion.messaging_first_reply`)
- **Google · ação de conversão** → Clique no WhatsApp (`conversion_action_name`)
- **Ferramenta de atendimento** → Atendimento (`report.id`)
- **Ferramenta de atendimento** → Contato (`customer.id distinto`)
- **Tabulação de venda ou CRM** → Venda (`negócio ganho`)
- **closed = true** → Fechamento técnico, não é venda (`closed_at`)

### Definições

| Métrica | Definição |
|---|---|
| Conversas iniciadas | soma de messaging_conversation_started_7d nas campanhas de objetivo conversa, no período |
| Custo por conversa | investimento das campanhas de conversa / conversas iniciadas, no mesmo período |
| Atendimentos | contagem distinta de ids de ocorrência criados no período (created_at no fuso do cliente) |
| Contatos únicos | contagem distinta do id do contato na ferramenta de atendimento, no período |
| Cobertura de atendimento | contatos que receberam resposta da operação / contatos que escreveram, no período |
| Conversão de conversa em venda | vendas ligadas a conversas do período / conversas do período ligadas a anúncio |
| Tempo de espera | mediana, em segundos, do tempo até o primeiro atendimento, separada por horário comercial |
| Custo por venda | investimento das campanhas de conversa / vendas ligadas a essas campanhas no período |

### Armadilhas

- **Conversa barata, venda cara.** O custo por conversa estava abaixo da referência da agência, e o cliente perdia dinheiro: muita gente abria conversa e não comprava. Como evitar: Mostre custo por conversa e custo por venda lado a lado.
- **Meses empilhados num só.** opened_at trazia a última sessão de cada conversa e jogava todo o histórico no mês corrente, sem nenhum gráfico acusar erro. Como evitar: Eixo temporal em created_at.
- **Fechado contado como venda.** O painel somava atendimentos com closed verdadeiro como conversões, e o funil mostrava quase 100% de fechamento. Como evitar: Venda só por CRM ou tabulação.
- **Número fora do rastreio.** Uma campanha apontava para o WhatsApp de outra unidade, e as conversas dela sumiram do funil. Como evitar: Alerta de campanha com número fora da lista do cliente.
- **Atendimento sem dono.** A tabela de atendentes da API vinha vazia, e o painel mostrava atendimentos sem responsável. Como evitar: Tire o atendente do próprio atendimento (campo employee).
- **A empresa virou uma linha.** Perguntas sobre a empresa filtravam só a linha que tinha o mesmo nome e mostravam uma fração dos contatos. Como evitar: Mapa de linhas aplicado só em pergunta por linha.

### Teste de aceitação

- [ ] Para um cliente e um mês, conversas iniciadas e custo por conversa batem com a coluna Resultados do Gerenciador nas campanhas de conversa (diferença abaixo de 1%).
- [ ] A soma dos atendimentos por dia no mês é igual à contagem distinta de ids de ocorrência criados no mês.
- [ ] Nenhum atendimento conta como venda sem negócio ganho ou tabulação de venda.
- [ ] Toda campanha de conversa aponta para um número da lista do cliente ou aparece no alerta.
- [ ] Nenhum telefone completo aparece fora da camada interna.

### Context document

```text
Funil de WhatsApp
- Conversa iniciada (onsite_conversion.messaging_conversation_started_7d) é topo de funil. Não é lead qualificado nem venda.
- Custo por conversa = investimento das campanhas de objetivo conversa / conversas iniciadas.
- Atendimento = uma ocorrência na ferramenta (report.id). Contato = id do contato na ferramenta. Nenhum dos dois é pessoa única entre sistemas.
- Data do atendimento = created_at no fuso do cliente. opened_at é a última sessão; closed_at é fechamento técnico.
- Venda vem do CRM ou da tabulação de venda preenchida pela operação. closed = true não é venda.
- Linha de WhatsApp só filtra quando a pergunta é por linha. O nome do cliente sozinho é a empresa inteira.
- Tempo de espera e de atendimento: mediana em segundos, separando horário comercial.
- Telefone sai da Nekt só pseudonimizado.
Exceções por cliente:
- <cliente>: número rastreado <número>; campanha apontando para outro número é erro de configuração.
- <cliente>: linhas <integration-1> = <comercial>, <integration-2> = <0800>.
- <cliente>: venda = tabulação <venda> no encerramento do atendimento; fuso <fuso>.
```

### Variações

- **Pedidos pelo chat:** Para delivery e varejo: contatos, pedidos criados e pedidos entregues por dia e por veículo.
- **Custo de template:** Mensagens enviadas por categoria de template vezes o preço da categoria, por campanha de disparo.
- **Assistente de IA no atendimento:** Transbordo e resolução sem humano medidos a partir das tabulações.
