Guia da API de WhatsApp

API de WhatsApp com múltiplos números em paralelo

Para operar vários números pela mesma API de WhatsApp, cada número vira uma sessão independente, com sessionId, webhook e IP próprios. Seu sistema escolhe por qual sessão enviar e usa o sessionId dos eventos para rotear o que chega.

Por Time de engenharia D-API5 min de leitura

Quando um número só deixa de bastar

Um número atende bem uma empresa pequena. O problema aparece quando a operação se divide, e cada parte precisa do próprio WhatsApp:

  • Times diferentes. Vendas, suporte e financeiro com números separados, para o cliente saber com quem está falando e cada time ter a própria fila.
  • Filiais e unidades. Cada loja, clínica ou franquia com o número que o cliente local já conhece, mas com os dados centralizados no mesmo sistema.
  • Clientes de um software. O caso mais exigente: um CRM, um helpdesk ou um ERP em que cada cliente conecta o próprio número. Aqui são dezenas ou milhares de números, de donos diferentes.
  • Distribuir volume. Operações que enviam muito dividem a carga entre números para respeitar o ritmo de cada um.

Em todos esses casos, o desenho da API de WhatsApp é o mesmo: uma sessão por número, e o seu sistema como a camada que decide quem fala por onde.

Uma sessão por número

Na D-API, criar mais um número é criar mais uma sessão. O sessionId é escolhido por você, então vale usar um identificador que já existe no seu banco, como o ID da filial ou do cliente. Cada sessão pode ter a própria URL de webhook desde a criação:

for unidade in centro zona-sul zona-norte; do
  curl -X POST https://api.d-api.cloud/api/v1/sessions \
    -H "Authorization: SUA_API_KEY" \
    -H "Content-Type: application/json" \
    -d "{ \"sessionId\": \"filial-$unidade\", \"type\": \"unofficial\",
          \"webhookUrl\": \"https://seu-app.com/wa/filial-$unidade\" }"
done

Depois, cada unidade lê o próprio QR. Para listar o que existe na conta, use GET /api/v1/sessions; para ver o estado de uma sessão específica, GET /api/v1/sessions/{sessionId}. Em quem vende software, esse loop costuma virar parte do onboarding: o cliente se cadastra no seu produto, seu backend cria a sessão pela API e mostra o QR na tela, sem ninguém do seu time no meio.

Isolamento: por que um número não pode derrubar os outros

Rodar muitos números juntos cria um risco que não existe com um só: o efeito dominó. Se todos compartilham o mesmo processo, uma sessão travada consome recurso das outras. Se todos saem pelo mesmo IP, um número com comportamento ruim contamina a reputação dos vizinhos.

Na D-API, cada conexão roda isolada, com credenciais e webhook próprios, e recebe um proxy com IP único, gerenciado pela plataforma. Quando uma sessão cai, a reconexão acontece só nela. Para um SaaS, isso significa que o problema de um cliente continua sendo de um cliente, e não vira incidente geral com dezenas de tickets abertos ao mesmo tempo. Vale lembrar que isolamento reduz o estrago, mas não substitui boa prática de envio; as recomendações estão em como evitar banimento.

Webhook por sessão e roteamento

Há dois jeitos de receber eventos de muitos números, e os dois funcionam:

ModeloComo funcionaBom para
Uma URL para tudoTodas as sessões apontam para o mesmo endpoint, e o sessionId do envelope define o destinoSistemas com um único serviço que trata WhatsApp
Uma URL por sessãoCada sessão tem o próprio webhook, configurável em /sessions/{id}/webhookFiliais com sistemas diferentes, ou clientes que recebem eventos no próprio servidor

Dentro de cada sessão, dá para ir além e mandar cada tipo de evento para uma URL diferente, com a configuração por evento. Um exemplo comum é separar mensagens recebidas, que vão para o atendimento, de mudanças de status, que vão para o monitoramento:

curl -X POST https://api.d-api.cloud/api/v1/sessions/filial-centro/webhook-config \
  -H "Authorization: SUA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "enabled": true,
    "type": "per_event",
    "events": {
      "messages.received": { "enabled": true, "webhookUrl": "https://seu-app.com/atendimento" },
      "connection.status": { "enabled": true, "webhookUrl": "https://seu-app.com/monitoramento" }
    }
  }'

No lado do seu sistema, o roteamento é uma consulta simples: dado o sessionId, qual cliente, qual fila e qual atendente. Guarde essa relação numa tabela e responda o webhook rápido; o processamento pesado fica numa fila sua.

O que monitorar quando são muitos números

  • Status por sessão. Um painel com quantas sessões estão connected, quantas disconnected e quantas logged_out, alimentado pelo evento de status.
  • Aviso ao dono do número. Quando uma sessão fica logged_out, quem precisa ler o QR de novo é o cliente ou a filial. Avise essa pessoa direto, pela sua interface ou por e-mail.
  • Envio por sessão. Pare os envios automáticos de uma sessão que não está conectada, em vez de acumular erros.

Se o seu caso é o de software com um número por cliente, a página de API de WhatsApp para SaaS mostra o modelo completo. Para conectar cada número, veja conexão por QR code, e para estimar o custo com muitas conexões, a página de preços.

Perguntas frequentes

Quantos números posso conectar na mesma conta?
Cada número é uma sessão, e a conta pode ter várias sessões ativas ao mesmo tempo. O que muda com a quantidade é o custo, que na D-API é por conexão e fica menor por conexão conforme você cresce.
Consigo usar a mesma API Key para todos os números?
Sim. A chave identifica a sua conta, e o sessionId em cada chamada diz qual número usar. Por isso a chave fica sempre no seu backend: com ela é possível operar qualquer sessão da conta.
Posso ter números oficiais e não oficiais na mesma operação?
Sim. Cada sessão é criada com type unofficial ou cloud_api, e as duas convivem na mesma conta, usando as mesmas rotas de envio. Seu roteamento trata ambas pelo sessionId.
Como sei de qual número veio uma mensagem recebida?
Todo webhook traz o sessionId no envelope do evento. Se você usa uma URL por sessão, a própria URL também identifica a origem. É por esse campo que seu sistema decide para qual cliente, fila ou atendente a conversa vai.
Se um número for banido, os outros param?
Não deveriam. Na D-API, cada conexão roda em ambiente isolado, com IP próprio, então o bloqueio ou a queda de um número não se propaga para os demais.

Teste a API de WhatsApp da D-API

Trial de 3 dias com acesso completo. Sem cartão, sem fidelidade.