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 que você leia a resposta:
- Consulte
GET /queuefiltrando pelophone. Se a mensagem estiver lá, ela chegou. - Se você tem o 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, com rajadas de 120. Poucas integrações chegam perto disso, e 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 no limite. Prefira o webhookinstance_status. Se precisar consultar, a cada 10 s basta. - Um timeout de cliente de 30 s é razoável. Ações imediatas falam com o aparelho e podem levar alguns segundos, enquanto os envios respondem em milissegundos.
Lendo os headers
X-RateLimit-Remaining vem em todas as respostas. Use-o 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 e delay_typing acima de 15.
Registrando para depurar
Guarde, por chamada, a rota, owabox_id e o message_id da resposta, o status HTTP e o error.code. Nos webhooks, guarde o event_id. Com isso o suporte cruza a chamada com os logs do Wabox.