API de WhatsApp para software houses que entregam projeto sob medida

Software house que coloca WhatsApp em todo projeto não deveria montar a infraestrutura de novo a cada contrato. Com uma API gerenciada, o WhatsApp vira um módulo padrão da casa: uma sessão por cliente, a mesma integração em todos os sistemas e nenhum servidor extra para sustentar.

O custo escondido de reinventar WhatsApp em cada projeto

O pedido chega em quase todo escopo: o sistema de agendamento precisa avisar o paciente, o ERP precisa mandar o boleto, o portal precisa notificar o corretor. Em muitas fábricas de software, cada time resolve do seu jeito. Um projeto usa uma biblioteca open source rodando num servidor do cliente, outro usa um fornecedor diferente, um terceiro tem um script que alguém escreveu e ninguém mais entende.

O preço aparece depois da entrega, no contrato de sustentação. Cada variante tem o próprio jeito de cair, a própria forma de reconectar e o próprio conhecimento concentrado numa pessoa. Quando essa pessoa sai, o projeto vira risco. E como a manutenção de WhatsApp raramente está precificada, a margem do contrato some em horas que ninguém fatura.

Padronizar numa API de WhatsApp gerenciada resolve a parte chata: a infraestrutura fica com o fornecedor, e o seu time só escreve a regra de negócio de cada cliente, que é o que o contrato paga.

Quem cuida do quê

Vale deixar claro no escopo, e para o próprio time, onde termina a responsabilidade da software house e onde começa a do fornecedor da API.

ResponsabilidadeSoftware houseD-API
Regra de quando e o que enviarSimNão
Tratar respostas e eventos no sistemaSimNão
Manter a conexão de pé e reconectarNãoSim, com self-healing contínuo
Servidor, IP e isolamento por númeroNãoSim, cada conexão isolada e com IP próprio
Reenviar webhook quando o sistema caiResponder rápido com status 2xxAté 7 tentativas com intervalo crescente
Orientar o cliente sobre uso do númeroSimSuporte ao seu time

Essa divisão é a mesma discussão de hospedar ou contratar, tratada em detalhe em self-hosted vs gerenciada.

Um módulo de WhatsApp reaproveitável

O ganho real vem quando o WhatsApp vira um pacote interno da software house, com a mesma interface em todo projeto. Os pontos que costumam entrar nesse módulo:

  • Configuração por projeto: API Key e nome da sessão vêm de variável de ambiente, nunca do código.
  • Um serviço de envio que recebe telefone e conteúdo e esconde os detalhes da chamada.
  • Um endpoint de webhook com o mesmo formato em todos os sistemas, que valida o sessionId recebido e enfileira o evento antes de processar.
  • Tratamento de erro padronizado: a API devolve success, error e statusCode, o que permite um único mapeamento para log e alerta.
  • Retentativa do seu lado. O SDK faz uma chamada HTTP simples e não repete sozinho. Decida no módulo quais erros merecem nova tentativa e com qual intervalo.

Em projeto Node, o núcleo desse módulo usa o SDK oficial:

import { DApi } from 'd-api-sdk'

const dapi = new DApi({ apiKey: process.env.DAPI_API_KEY! })
const SESSION = process.env.DAPI_SESSION_ID! // ex.: cliente-acme-producao

export async function provisionar(webhookUrl: string) {
  await dapi.sessions.create({ sessionId: SESSION, connectionMode: 'qr', webhookUrl })
  const { qrCodeImage } = await dapi.sessions.getQRCode(SESSION)
  return qrCodeImage // exiba na tela de configuração do sistema do cliente
}

export function avisar(telefone: string, texto: string) {
  return dapi.messages.sendText({ sessionId: SESSION, to: telefone, text: texto })
}

O detalhe de instalação e dos métodos disponíveis está no SDK Node.js e no guia de API de WhatsApp em Node.js. Projetos em outras stacks chamam a mesma REST; o guia de API de WhatsApp em Python mostra o padrão fora do Node.

Sessão por cliente, sessão por ambiente

Cada cliente da software house tem a própria sessão, o que isola número, credenciais e webhook. Dentro de um mesmo cliente, separe também os ambientes. Uma convenção simples evita o erro mais comum de todo projeto, que é mensagem de teste chegando em cliente de verdade:

  • acme-dev: número de teste do time, webhook apontando para túnel local.
  • acme-homolog: número de teste do cliente, usado na validação de aceite.
  • acme-producao: número oficial do cliente, webhook do servidor de produção.

Se um dos projetos é um produto que o cliente vai vender para muitos usuários finais, com um número por usuário, o desenho muda de escala e se aproxima de um SaaS. Nesse caso, leia API de WhatsApp para SaaS.

Entrega, handover e contrato de manutenção

Projeto sob medida tem dia de entrega, e a parte de WhatsApp costuma ser a que mais gera chamado depois dele. Três cuidados reduzem esse volume:

  1. Documente quem é dono da conta. Se o cliente vai assumir o sistema, a conta e a API Key devem estar no nome dele desde o início. Transferir depois é retrabalho.
  2. Monitore o status da conexão. Assine o evento connection.status e mostre no painel do sistema se o número está connected, disconnected ou logged_out. O cliente resolve sozinho boa parte dos casos se enxergar o problema.
  3. Precifique a sustentação pela conexão. A D-API cobra por conexão, não por mensagem, e o valor por conexão cai conforme o volume cresce. Com isso, o custo de WhatsApp de cada contrato é fixo e entra na proposta sem margem de segurança exagerada. As faixas estão em preços.

Para validar o módulo num projeto piloto, o trial é de 3 dias, sem cartão. Se a sua casa também atende agências ou opera automações para terceiros, a página de API de WhatsApp para agências mostra o modelo de operação de carteira.

Perguntas frequentes

Vale a pena a software house hospedar a própria solução de WhatsApp?

Só se manter conexão de WhatsApp for o produto que você vende. Para quem entrega sistemas sob medida, hospedar significa atualizar biblioteca, cuidar de servidor e responder chamado de madrugada em todos os projetos ao mesmo tempo, sem ninguém pagar por isso.

A conta da API fica no nome da software house ou do cliente?

Os dois modelos funcionam. Se a sustentação fica com você, a conta costuma ser sua e o custo entra no contrato de manutenção. Se o cliente vai assumir o sistema, crie a conta no nome dele desde o início e use a chave dele na configuração do projeto.

Meu projeto não é em Node. Consigo usar a D-API?

Sim. O SDK oficial é para Node e TypeScript, mas a API é REST com autenticação por header, então qualquer linguagem que faça requisição HTTP integra, seja PHP, Python, Java, C# ou Go.

Como separo ambiente de homologação e produção?

Crie sessões diferentes, com nomes que indiquem o ambiente, e números diferentes. Assim o time testa fluxo novo em homologação sem risco de mandar mensagem de teste para cliente real.

O cliente pode querer migrar para a API oficial depois. Terei de reescrever a integração?

Não. Na D-API a conexão oficial e a não oficial usam as mesmas rotas de envio. Muda o tipo da sessão na criação e, no caso da oficial, o uso de templates para iniciar conversa. O restante do código continua igual.

Teste a API de WhatsApp da D-API

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