Regra geral
Envios não são idempotentes
Repetir umPOST /send-text que já chegou envia duas mensagens. Quando uma chamada falha por rede sem você ler a resposta:
- Consulte
GET /queuefiltrando pelophone— se a mensagem estiver lá, chegou. - Se você tem webhook
delivery, espere alguns segundos: ele confirma o envio pelomessage_id. - Só então reenvie.
wabox_id assim que a resposta chegar.
Dimensionando o cliente
- O limite é por instância: 60 req/s sustentadas, rajadas de 120. Poucas integrações chegam perto disso; o gargalo real de envio é o intervalo anti-ban da fila.
- Use conexões HTTP keep-alive e um pool pequeno. Centenas de conexões simultâneas para a mesma instância só disputam o mesmo bucket.
- Consultas repetitivas (
GET /statusem loop,GET /qr-codea cada segundo) contam. Prefira os webhooksconnected/disconnected; se precisar consultar, a cada 10 s é suficiente. - Timeout de cliente: 30 s é razoável. Ações imediatas falam com o aparelho e podem levar alguns segundos; envios respondem em milissegundos.
Lendo os headers
X-RateLimit-Remaining vem em todas as respostas; use para desacelerar antes de bater no 429.
Erros de validação
400 invalid_request traz details.issues com o caminho de cada campo:
phone com +, espaços ou traços (envie só dígitos), message vazio, base64 com prefixo errado, delay_typing acima de 15.
Registrando para depurar
Guarde, por chamada: rota,wabox_id/message_id da resposta, status HTTP e error.code. Nos webhooks, guarde event_id. Com isso o suporte consegue cruzar com os logs do Wabox.