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.
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\" }"
doneDepois, 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:
| Modelo | Como funciona | Bom para |
|---|---|---|
| Uma URL para tudo | Todas as sessões apontam para o mesmo endpoint, e o sessionId do envelope define o destino | Sistemas com um único serviço que trata WhatsApp |
| Uma URL por sessão | Cada sessão tem o próprio webhook, configurável em /sessions/{id}/webhook | Filiais 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, quantasdisconnectede quantaslogged_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.
Continue lendo
Teste a API de WhatsApp da D-API
Trial de 3 dias com acesso completo. Sem cartão, sem fidelidade.