← Blog

·

Vários atendentes no mesmo número de WhatsApp: como funciona com a API

Atualizado em 25/10/2026

Para ter vários atendentes no mesmo número de WhatsApp, há dois caminhos: os aparelhos conectados do app WhatsApp Business, que têm limite de dispositivos, ou a API oficial, em que o número é operado por um sistema e os atendentes trabalham numa caixa de entrada compartilhada, sem limite de pessoas imposto pela Meta. Com a API, a distribuição de conversas, o histórico e as permissões ficam no seu software. Com a coexistência, dá até para manter o celular funcionando junto.

Os limites do app WhatsApp Business

O app foi feito para uso manual. Segundo a Central de Ajuda do WhatsApp, uma conta business conecta até quatro dispositivos; o recurso de múltiplos atendentes eleva esse limite para até 10, conforme os benefícios de assinaturas como o Meta Verified. Isso resolve uma loja pequena, mas cria problemas quando o time cresce:

  • Todos veem tudo. Não há fila, nem conversa “minha” e “sua”. Dois atendentes respondem o mesmo cliente, ou nenhum responde.
  • Sem métricas por pessoa. Não dá para saber quem respondeu, em quanto tempo, nem quantas conversas cada um resolveu.
  • Dependência do celular principal. Se o aparelho principal fica sem uso por cerca de 14 dias, os dispositivos conectados são desconectados.
  • Sem integração. O app não conversa com o CRM, o ERP ou o bot.

Como a API resolve: o número vira um sistema

Na API oficial do WhatsApp, o número não está num celular. Toda mensagem recebida chega ao seu servidor por webhook e toda resposta sai por uma chamada HTTP. O “atendente” não é um dispositivo conectado ao WhatsApp, é um usuário do seu sistema. Por isso a Meta não limita quantas pessoas atendem: o limite é o do seu software.

AspectoApp com aparelhos conectadosAPI com caixa de entrada compartilhada
Número de atendentesAté 4 dispositivos (até 10 com o recurso de múltiplos atendentes)Definido pelo seu sistema
DistribuiçãoManualAutomática, por regra
HistóricoNo aparelhoNo seu banco de dados
Métricas por atendenteNãoSim, a partir dos eventos
Bot e IANão nativoIntegrado ao mesmo fluxo
PermissõesQuem tem o aparelho vê tudoPor equipe, fila ou função

A arquitetura de uma caixa de entrada compartilhada

Um multiatendimento com a API tem cinco peças:

  1. Receptor de webhook. Recebe os eventos da Meta, responde 200 rápido e coloca o evento numa fila. Não processe nada pesado aqui.
  2. Processador. Lê a fila, grava mensagem e status no banco, abre ou reabre a conversa e chama o motor de distribuição.
  3. Motor de distribuição. Decide quem atende: bot, fila de um departamento ou atendente específico.
  4. Interface do atendente. Lista de conversas atribuídas, histórico e campo de resposta, atualizada em tempo real (WebSocket ou similar).
  5. Envio. Uma camada única que chama a API, registra o wamid devolvido e trata erros.

Dois detalhes do webhook mudam o desenho. A visão geral de webhooks diz que a Meta tenta reenviar eventos não confirmados por até 7 dias e que isso pode gerar notificações duplicadas. Então:

  • Deduplique pelo id da mensagem (wamid). Uma restrição única no banco resolve.
  • Não confie na ordem de chegada. Ordene as mensagens pelo timestamp do evento, não pela hora em que o webhook chegou.

O artigo sobre webhooks da API do WhatsApp mostra a estrutura completa dos eventos.

Estados da conversa

Uma conversa de atendimento precisa de estados claros. Um modelo simples:

EstadoSignificadoQuem age
botBot ou mensagem automática tratandoSistema
filaAguardando atendente de um departamentoMotor de distribuição
atribuidaUm atendente é dono da conversaAtendente
aguardando_clienteAtendente respondeu, falta o clienteSistema monitora a janela de 24 h
encerradaAtendimento concluídoReabre se o cliente escrever de novo

O estado aguardando_cliente importa por causa da janela de 24 horas: se o cliente demora a responder e a janela fecha, o atendente só consegue retomar com template.

Regras de distribuição

Não existe regra melhor para todo caso. As mais usadas:

RegraComo funcionaQuando usar
Rodízio (round robin)Próximo atendente disponível da listaTimes homogêneos, demanda parecida
Menor cargaQuem tem menos conversas abertasAtendimentos de duração variável
Por departamentoBot pergunta o assunto e manda para a fila certaVendas, suporte e financeiro separados
FidelidadeCliente volta para o último atendente, se disponívelVendas consultivas, carteira de clientes
Manual (puxar da fila)Atendente escolhe a próxima conversaTimes pequenos, casos complexos

Na prática, combine: o bot ou a mensagem de boas-vindas pergunta o assunto, a conversa vai para a fila do departamento, e dentro da fila vale menor carga com fidelidade para clientes recorrentes.

Exemplo: atribuição sem conflito em PostgreSQL

O erro mais comum é dois atendentes pegarem a mesma conversa. Com FOR UPDATE SKIP LOCKED, cada transação trava a conversa que está atribuindo e ignora as que outra transação já pegou:

-- Atribui a conversa mais antiga da fila ao atendente com menos conversas abertas
WITH proxima AS (
  SELECT id
  FROM conversas
  WHERE estado = 'fila' AND departamento = 'suporte'
  ORDER BY entrou_na_fila_em
  LIMIT 1
  FOR UPDATE SKIP LOCKED
),
atendente AS (
  SELECT a.id
  FROM atendentes a
  LEFT JOIN conversas c ON c.atendente_id = a.id AND c.estado = 'atribuida'
  WHERE a.online AND a.departamento = 'suporte'
  GROUP BY a.id, a.max_simultaneas
  HAVING COUNT(c.id) < a.max_simultaneas
  ORDER BY COUNT(c.id)
  LIMIT 1
)
UPDATE conversas
SET estado = 'atribuida', atendente_id = (SELECT id FROM atendente), atribuida_em = now()
WHERE id = (SELECT id FROM proxima)
  AND EXISTS (SELECT 1 FROM atendente)
RETURNING id, atendente_id;

Rode isso quando uma conversa entra na fila e quando um atendente fica livre. O campo max_simultaneas evita que alguém receba mais conversas do que consegue responder.

Boas práticas de operação

  • Identifique quem responde. Prefixe a mensagem com o nome do atendente (“Ana:“). O cliente sabe com quem fala e a troca de atendente fica transparente.
  • Transferência com contexto. Ao passar a conversa, inclua uma nota interna. O cliente não deve repetir tudo.
  • Marque como lida só quando alguém leu. O status read mostra os dois tiques azuis para o cliente; envie quando o atendente abrir a conversa, não quando o webhook chegar.
  • Um único ponto de envio. Bot, atendentes e automações devem sair pela mesma camada, para respeitar o throughput do número e registrar tudo.
  • Permissões mínimas. Atendente vê a própria fila; supervisor vê o time. O guia de segurança da conta business trata de acessos ao portfólio e tokens.
  • Meça. Tempo de primeira resposta, tempo de atendimento e satisfação por atendente e por fila. Veja métricas de atendimento no WhatsApp.

Coexistência: o celular continua funcionando

Com a coexistência, o mesmo número fica no app WhatsApp Business e na API ao mesmo tempo. Isso permite que o dono continue respondendo pelo celular enquanto o time usa a caixa de entrada. Segundo a documentação de coexistência:

  • Mensagens enviadas pelo app chegam ao seu sistema pelo webhook smb_message_echoes. Mostre-as no histórico da conversa, ou o atendente não vai saber que o cliente já foi respondido.
  • O app aceita até quatro dispositivos acompanhantes. Mensagens enviadas de acompanhantes não suportados (como o WhatsApp para Windows) não geram webhook e não aparecem no seu sistema.
  • O throughput de números em coexistência é fixo em 20 mensagens por segundo.
  • Ferramentas do app como respostas rápidas, etiquetas, mensagens de saudação e de ausência não são suportadas na Cloud API.
  • Se o aparelho principal ficar inativo por cerca de 14 dias, a Meta envia um account_update com PARTNER_REMOVED e a conexão com a API cai.

Para multiatendimento, a regra prática é: o celular vira mais um “atendente”, e o seu sistema precisa tratar as mensagens dele como tal. O artigo o que sincroniza na coexistência detalha cada item.

Como fazer isso com a Vectalk

A Vectalk é a camada de API: entrega os webhooks da Meta no seu sistema e envia as respostas pela Cloud API oficial. Você pode registrar várias URLs por instância com POST /api/webhooks (por exemplo, a caixa de entrada e o CRM recebendo o mesmo evento), enviar com POST /api/messages e marcar como lida com o mesmo endpoint, usando status: "read". A Vectalk oferece coexistência, então o número pode continuar no app. A caixa de entrada e as regras de distribuição são do seu software. Documentação em docs.vectalk.com.br e cadastro em apps.vectalk.com.br/register.

Se a ideia é colocar um bot antes dos atendentes, veja também chatbot com IA no WhatsApp e agendamento automático com IA.

Perguntas frequentes

Quantos atendentes posso ter no mesmo número com a API?

A Meta não limita o número de atendentes na API, porque eles não são dispositivos do WhatsApp, são usuários do seu sistema. O limite prático está no seu software e na capacidade de envio do número.

Posso usar o WhatsApp Web junto com a API?

Só com coexistência, e o WhatsApp Web entra como dispositivo acompanhante do app. As mensagens enviadas por ele chegam ao seu sistema pelo webhook smb_message_echoes. Sem coexistência, o número registrado na API não fica disponível no app nem no WhatsApp Web.

Como evitar que dois atendentes respondam o mesmo cliente?

Atribua a conversa a um dono antes de mostrar o campo de resposta, com trava no banco (como o FOR UPDATE SKIP LOCKED do exemplo). Os demais veem a conversa como somente leitura.

O cliente vê o nome do atendente?

O cliente vê o nome de exibição da empresa. Se quiser mostrar quem está atendendo, inclua o nome no texto da mensagem.

Preciso de um número por departamento?

Não. Um número com filas por departamento costuma ser mais simples para o cliente. Números separados fazem sentido para marcas ou operações diferentes.


Fontes oficiais consultadas em 25/10/2026: Visão geral de webhooks, Coexistência: onboarding de usuários do app WhatsApp Business, Central de Ajuda do WhatsApp: múltiplos atendentes, Docs da Vectalk: webhooks, Docs da Vectalk: marcar como lida.

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.