Skip to main content

Instalar

npm Versão publicada: 2.0.0. Pacote CommonJS (require) com build ESM (import) e tipos .d.ts. Depende de axios. O pacote não declara versão mínima de Node; o build de publicação roda em Node 20, então use Node 18 ou superior.

Configurar

A apiKey é obrigatória (o construtor lança Error sem ela) e usa o prefixo ara_live_. A Arara não tem modo de teste.

Enviar a primeira mensagem

Você precisa de plano assinado, número conectado, um template aprovado e saldo. Veja Antes de começar. Troque pedido_confirmado pelo nome do seu template. Salve como enviar.js:
Rode:
Com variáveis no corpo do template e mídia no header:
variables é aceito como apelido de templateVariables. Para responder dentro da janela de 24h, mande body em vez de templateName:
Para consultar uma mensagem depois do envio, use sdk.messages.get(response.id). O status também chega pelo webhook message.status_updated. Para mandar o mesmo template a até 1000 destinatários, use sendBatch:

Templates

Os métodos get, getStatus, delete e analytics recebem o id do template (UUID), não o nome. Para achar um template pelo nome, filtre a lista: sdk.templates.list({ name: 'promo_natal' }).
samples é um objeto com o nome da variável como chave ('1' para {{1}}). Listar: list devolve { data, pagination } e aceita page, size, name e status.

Tratar erros

Toda falha lança AraraError. Duas subclasses cobrem os casos comuns: AuthenticationError (401, ou 403 sem código de erro: chave inválida, expirada, sem permissão ou fora da allowlist de IP) e PlanFeatureLockedError (403 PLAN_FEATURE_LOCKED, com feature, currentPlan e upgradeTo).
A API responde 401 para chave inválida, revogada ou expirada, e 403 quando a chave não tem permissão para a rota. O corpo desses erros de autenticação não vem no envelope da API: o SDK lança AuthenticationError com code UNKNOWN_ERROR. Teste a classe ou o statusCode, não o code. Lista de códigos em Erros.

Retentativas e idempotência

O SDK retenta, até maxRetries vezes:
  • falha de rede (sem resposta);
  • 429, respeitando Retry-After (até 30s);
  • qualquer 5xx.
O intervalo começa em 500ms e dobra a cada tentativa, até 30s. Outros 4xx não são retentados. Para desligar: maxRetries: 0. Só se retenta requisição segura de repetir: GET, PUT, DELETE e POST com Idempotency-Key. messages.send, messages.sendBatch e campaigns.create sempre mandam esse header, então uma retentativa repete a mesma chave e não duplica o envio. templates.create não manda a chave e não é retentado. send aceita um segundo argumento com idempotencyKey, enviado no header Idempotency-Key. Sem ele, o SDK gera um UUID por chamada (igual em todas as retentativas dela), o que não protege contra reenvio do seu lado. Derive a chave de um id do seu sistema (id do pedido, id da tentativa), não de um valor novo a cada chamada:
Repetir a mesma chave devolve a mensagem original, sem novo envio. A API não compara o corpo: a mesma chave com destinatário ou variáveis diferentes também devolve a mensagem original, e a chave não expira.

Webhooks

O SDK exporta guards de tipo para o corpo do webhook:
WebhookUtils.parseEvent(payload) devolve o evento se for um desses tipos, ou null. Os demais eventos (conversation.needs_human, template.updated etc.) não têm guard; trate pelo campo event. O SDK não valida a assinatura. Valide antes de processar, com o corpo cru da requisição:
Detalhes em Webhooks.

Recursos disponíveis

As leituras de contacts, conversations, wallet, smart links, opt-outs e auth.me() exigem chave ADMIN. Com chave só READ, lançam AuthenticationError (403). optOuts recusa telefone fora do formato +5511999999999 com RangeError, antes de chamar a API.

TypeScript

Tipos exportados na 2.0.0 (exemplos; o pacote exporta também os tipos de contatos, campanhas, carteira, números e smart links):
InboundMessageWebhookEvent existe no código mas não é exportado pelo pacote.

Limitações conhecidas

Próximos passos

Next.js

Server Actions e route handlers.

API Reference

Endpoints REST que o SDK chama por baixo.
Código-fonte: github.com/ararahq/arara-node-sdk (MIT).