← Blog

·

Métricas de atendimento no WhatsApp: TMR, TMA, CSAT e como medir

Atualizado em 25/10/2026

As métricas essenciais de atendimento no WhatsApp são o tempo de primeira resposta, o TMR (tempo médio de resposta), o TMA (tempo médio de atendimento) e o CSAT (satisfação do cliente). Com a API oficial, todas podem ser calculadas a partir dos timestamps que chegam nos webhooks: a hora de cada mensagem do cliente e a hora de envio de cada resposta. O app WhatsApp Business não oferece esse nível de detalhe por atendente; com a API, os dados ficam no seu banco e você mede do jeito que a operação precisa.

As métricas que importam

Os nomes variam de empresa para empresa. O importante é fixar uma definição e usar sempre a mesma:

MétricaPergunta que respondeCálculo
Tempo de primeira resposta (TPR)Quanto o cliente espera pelo primeiro retorno?Primeira resposta da empresa − primeira mensagem do cliente na conversa
TMR (tempo médio de resposta)Quanto o cliente espera a cada mensagem?Média dos intervalos entre mensagem do cliente e a resposta seguinte
TME (tempo médio de espera)Quanto tempo a conversa fica na fila?Atribuição a um atendente − entrada na fila
TMA (tempo médio de atendimento)Quanto dura um atendimento?Encerramento − início da conversa
CSATO cliente ficou satisfeito?Avaliações positivas ÷ total de avaliações
Resolução no primeiro contatoResolvemos sem o cliente voltar?Conversas encerradas sem reabertura em X dias ÷ conversas encerradas
Conversas sem resposta em 24 hPerdemos a janela?Conversas em que o cliente ficou 24 h sem resposta ÷ total

A última é específica do WhatsApp. Pela regra da janela de 24 horas, se a empresa não responde dentro desse prazo, só consegue retomar com template aprovado. Uma conversa que estoura a janela é, além de um cliente insatisfeito, um custo extra.

De onde vêm os timestamps

Na API oficial do WhatsApp, dois tipos de evento alimentam as métricas:

Mensagem recebida. O webhook traz messages[].timestamp, em segundos Unix (UTC), com a hora em que o cliente enviou:

{
  "from": "5511999999999",
  "id": "wamid.HBgLNTUx...",
  "timestamp": "1792929600",
  "type": "text",
  "text": { "body": "Meu pedido não chegou" }
}

Status da mensagem enviada. A resposta da API ao envio devolve só o wamid, sem horário. A hora do envio chega depois, no webhook de status sent, com o mesmo id:

{
  "id": "wamid.HBgLNTUx...",
  "status": "sent",
  "timestamp": "1792929735",
  "recipient_id": "5511999999999"
}

Os status seguintes (delivered, read, failed) chegam com seus próprios timestamps. O artigo sobre status de mensagem no webhook detalha cada um.

Três cuidados para não distorcer os números:

  • Use o timestamp do evento, não a hora de chegada do webhook. A Meta reenvia eventos não confirmados por até 7 dias, e eles podem chegar atrasados ou duplicados.
  • Separe bot de humano. Grave em cada mensagem enviada quem a originou (bot, atendente, automacao). Uma boas-vindas automática em 2 segundos não pode entrar no TPR do time.
  • Considere o horário de atendimento. Uma mensagem às 23h respondida às 8h tem 9 horas de relógio e zero de expediente. Calcule as duas versões e deixe claro qual o painel mostra.

Modelo de dados mínimo

Para calcular tudo acima, cada mensagem precisa destes campos:

CampoOrigem
wamidmessages[].id ou resposta do envio
conversa_idSeu sistema
direcaoentrada ou saida
autorcliente, bot, atendente, automacao
atendente_idSeu sistema
enviada_emmessages[].timestamp (entrada) ou status sent (saída)
entregue_em, lida_emStatus delivered e read

E cada conversa: aberta_em, entrou_na_fila_em, atribuida_em, encerrada_em e a nota de CSAT, se houver.

Calculando TMR e primeira resposta em SQL

Com as mensagens em PostgreSQL, a função LAG encontra, para cada resposta, a mensagem anterior do cliente. A consulta abaixo calcula, por atendente, a mediana e o percentil 90 do tempo de resposta nos últimos 30 dias:

WITH turnos AS (
  SELECT
    conversa_id,
    autor,
    atendente_id,
    enviada_em,
    LAG(autor)      OVER w AS autor_anterior,
    LAG(enviada_em) OVER w AS anterior_em
  FROM mensagens
  WHERE enviada_em >= now() - interval '30 days'
  WINDOW w AS (PARTITION BY conversa_id ORDER BY enviada_em)
)
SELECT
  atendente_id,
  COUNT(*) AS respostas,
  percentile_cont(0.5) WITHIN GROUP (ORDER BY enviada_em - anterior_em) AS tmr_mediana,
  percentile_cont(0.9) WITHIN GROUP (ORDER BY enviada_em - anterior_em) AS tmr_p90
FROM turnos
WHERE autor = 'atendente' AND autor_anterior = 'cliente'
GROUP BY atendente_id
ORDER BY tmr_mediana;

Para o tempo de primeira resposta, pegue a primeira mensagem do cliente e a primeira do atendente em cada conversa:

SELECT
  c.id,
  MIN(m.enviada_em) FILTER (WHERE m.autor = 'atendente')
    - MIN(m.enviada_em) FILTER (WHERE m.autor = 'cliente') AS primeira_resposta
FROM conversas c
JOIN mensagens m ON m.conversa_id = c.id
WHERE c.aberta_em >= now() - interval '30 days'
GROUP BY c.id;

Por que mediana e percentil 90, e não só a média? Porque meia dúzia de conversas esquecidas no fim de semana puxam a média para cima e escondem o comportamento normal, e a média sozinha também esconde os clientes que esperaram demais. A mediana mostra o típico; o p90 mostra quem está sendo mal atendido.

Medindo CSAT pelo próprio WhatsApp

O CSAT é a pergunta “de 1 a 5, como foi o atendimento?” enviada ao encerrar a conversa. No WhatsApp, a melhor forma é uma mensagem interativa, porque o cliente toca em vez de digitar e a resposta chega estruturada. Botões de resposta aceitam até três opções; para uma escala de 1 a 5, use uma lista. A documentação de listas permite até 10 linhas, títulos de até 24 caracteres e texto do botão de até 20.

{
  "messaging_product": "whatsapp",
  "to": "5511999999999",
  "type": "interactive",
  "interactive": {
    "type": "list",
    "body": { "text": "Seu atendimento foi encerrado. Como você avalia a ajuda que recebeu?" },
    "action": {
      "button": "Avaliar",
      "sections": [{
        "title": "Sua nota",
        "rows": [
          { "id": "csat_5", "title": "5 - Excelente" },
          { "id": "csat_4", "title": "4 - Bom" },
          { "id": "csat_3", "title": "3 - Regular" },
          { "id": "csat_2", "title": "2 - Ruim" },
          { "id": "csat_1", "title": "1 - Muito ruim" }
        ]
      }]
    }
  }
}

A resposta chega como type: "interactive" com interactive.list_reply.id igual ao id da linha escolhida. Grave a nota na conversa.

Detalhes que fazem diferença:

  • Envie logo após o encerramento. A janela de 24 horas ainda está aberta, então não precisa de template.
  • Uma pergunta só. Se a nota for 1 ou 2, pergunte o motivo em seguida e encaminhe para um supervisor.
  • Calcule CSAT como percentual de notas 4 e 5. E acompanhe a taxa de resposta: um CSAT alto com poucas respostas diz pouco.
  • Custo. Desde 1º de outubro de 2026, mensagens de serviço são cobradas a partir da 1.001ª entregue no mês, por número, segundo a página de preços da Meta. Coloque a pesquisa na conta.

Para NPS e pesquisas depois da entrega do produto, quando a janela já fechou, veja pós-venda e NPS pelo WhatsApp.

Como definir metas

Este artigo não traz “benchmarks do mercado” de propósito: números genéricos dizem pouco sobre a sua operação. Um caminho mais útil:

  1. Meça duas a quatro semanas sem mudar nada. Esse é o ponto de partida.
  2. Defina a meta pelo percentil, não pela média. Exemplo: “90% das primeiras respostas em até X minutos dentro do expediente”.
  3. Trate a janela de 24 horas como teto absoluto. A meta de “conversas sem resposta em 24 h” deve ficar perto de zero.
  4. Separe por fila e por horário. Vendas e suporte têm ritmos diferentes; segunda de manhã não é igual a quinta à tarde.
  5. Revise todo mês. Meta batida com folga vira a nova linha de base.

Indicadores do lado da Meta

Além das métricas de atendimento, acompanhe dois indicadores que a própria Meta calcula:

  • Qualidade do número. Verde, amarelo ou vermelho, com base em bloqueios e denúncias dos últimos dias. Atendimento lento e mensagens fora de contexto pioram esse indicador. Veja qualidade do número na API.
  • Entrega e leitura. Percentual de mensagens delivered e read sobre as enviadas. Queda brusca costuma indicar problema de número, de template ou de lista.

Como fazer isso com a Vectalk

Na Vectalk, os webhooks de mensagem e de status são os da Meta, com os mesmos timestamp usados acima; registre sua URL com POST /api/webhooks e grave os eventos no seu banco. Para conferir ou reconstruir dados, GET /api/messages lista o histórico com filtros de data, status, direção e messageId. Para os indicadores agregados (enviadas, entregues, lidas, falhas, taxas e qualidade do número), use GET /api/analytics/instances/{instanceId}/stats, com agrupamento por dia, semana ou mês. As métricas de atendimento por atendente (TMR, TMA, CSAT) dependem dos dados do seu sistema, como no exemplo. Detalhes em docs.vectalk.com.br; cadastro em apps.vectalk.com.br/register.

Para montar a operação que gera esses números, veja multiatendimento com a API e mensagens de boas-vindas e ausência.

Perguntas frequentes

Qual a diferença entre TMR e TMA?

O TMR mede quanto o cliente espera a cada mensagem até receber resposta. O TMA mede a duração total do atendimento, do início ao encerramento. Uma operação pode ter TMR baixo e TMA alto, por exemplo quando o problema exige várias trocas de mensagem.

A resposta do bot conta no tempo de resposta?

Depende do que você quer medir. Para a experiência do cliente, conta. Para avaliar o time, não. Por isso vale gravar o autor de cada mensagem e calcular as duas versões.

Posso usar o timestamp da resposta da API em vez do webhook de status?

A resposta do envio não traz horário, só o wamid. Você pode usar a hora do seu servidor no momento do envio como aproximação, mas o status sent é o registro da Meta e é mais consistente.

Como medir o CSAT se o cliente não responde a pesquisa?

Conte a taxa de resposta separadamente e não preencha notas ausentes. Se poucas pessoas respondem, teste mudar o momento do envio ou o texto da pergunta.

Dá para tirar essas métricas do app WhatsApp Business?

Não com esse nível de detalhe. O app não registra quem respondeu nem quanto tempo cada atendente levou. As métricas por atendente exigem a API e um sistema que guarde os eventos.


Fontes oficiais consultadas em 25/10/2026: Webhook de mensagens, Visão geral de webhooks, Mensagens interativas de lista, Preços da plataforma, Docs da Vectalk: estatísticas da instância, Docs da Vectalk: listar mensagens.

Integre o WhatsApp oficial ao seu sistema

A Vectalk entrega a Cloud API da Meta com os mesmos payloads e webhooks, um token para todas as contas e documentação completa.