Instalar
Versão publicada: 2.0.0, no GitHub Packages (não está no Maven Central). O GitHub Packages exige autenticação até para leitura: use seu usuário do GitHub e um personal access token com escoporead:packages, nas variáveis GITHUB_ACTOR e GITHUB_TOKEN. Sem elas o Gradle falha com Username must not be null!; com token inválido, com 401 Unauthorized.
Configurar
apiKey, build() lança AraraException.
Em Kotlin:
Spring Boot
AraraConfig: o SDK já tem com.ararahq.arara.sdk.config.AraraConfig.
Enviar a primeira mensagem
Você precisa de plano assinado, número conectado, um template aprovado e saldo. Veja Antes de começar. Troquepedido_confirmado pelo nome do seu template.
Salve como src/main/java/Main.java:
build.gradle.kts de Instalar; use ./gradlew run se o projeto tem o wrapper):
receiver aceita +5511999999999, whatsapp:+5511999999999 ou só dígitos (7 a 15). Fora disso o SDK lança AraraException sem chamar a API.
O segundo argumento de send é o Idempotency-Key. Derive-o do evento do seu sistema (id do pedido, id da tentativa): se o seu código repetir a chamada, a Arara devolve a mensagem original em vez de enviar outra. Sem o argumento, o SDK gera um UUID v4 por chamada e o reutiliza nas retentativas internas.
Com variáveis no corpo do template e mídia no header:
body em vez de templateName:
message.status_updated.
Kotlin coroutines
As chamadas são bloqueantes. Em coroutines, rode no dispatcher de IO:Templates
list() aceita filtros: list(name, status, page, size).
Tratar erros
AraraException (unchecked). A ordem dos catch importa: as subclasses de AraraApiException vêm antes dela.
Um 403 com código de negócio, como
ACCOUNT_NOT_ACTIVATED, chega como AraraApiException com getCode() preenchido, não como AraraAuthException. O 401 de chave inválida não vem no envelope de erro: getCode() é null e getMessage() traz o texto do Spring (Unauthorized). A API responde 401 para chave inválida, revogada ou expirada, e 403 quando o header Authorization está ausente ou a chave não tem permissão para a rota. Lista de códigos em Erros.
Retentativas e idempotência
Um interceptor OkHttp retenta atémaxRetries vezes em falha de rede, 429 e qualquer 5xx. Respeita Retry-After (segundos ou data HTTP); sem ele, espera 500ms e dobra a cada tentativa, até 8s. Se o Retry-After for maior que 30s, o SDK não espera: lança a exceção com getRetryAfter() preenchido. Para desligar: .maxRetries(0).
POST e PATCH só são retentados quando levam Idempotency-Key. getMessages().send, sendBatch e getCampaigns().create sempre mandam, e a mesma chave vale em todas as tentativas, então timeout ou 5xx não vira envio duplicado. Passe a sua como segundo argumento (send(request, "pedido-12345-confirmacao")) para que uma repetição do seu próprio código também seja segura. Sem argumento, o SDK usa um UUID v4 novo por chamada.
## Webhooks
O SDK não tem helper de webhook. Valide a assinatura antes de processar, com o corpo cru da requisição (bytes exatamente como chegaram). A string assinada é"{X-Arara-Timestamp}.{corpo cru}":
timestamp e signature vêm dos headers X-Arara-Timestamp e X-Arara-Signature. Use MessageDigest.isEqual, nunca equals. Depois de validar, trate o evento pelo campo event. Detalhes e catálogo em Webhooks.
Recursos disponíveis
Limitações conhecidas
Quem está na 1.8.1 deve atualizar para a 2.0.0 (
implementation("com.ararahq:arara-java-sdk:2.0.0")). Na 1.8.1, getUsers() chama /users/me, que recusa chave de API; getTemplates().list() espera um array e falha ao ler { data, pagination }; send não manda Idempotency-Key, mas o retry reenvia o POST em 5xx; e todo 403 vira AraraAuthException, perdendo o error.code. A 2.0.0 também remove getUsers() e getApiKeys(), e AraraAuthException passa a estender AraraApiException. Veja o CHANGELOG.Próximos passos
API Reference
Endpoints REST por baixo do SDK.
Webhooks
Eventos, payload e validação de assinatura.