Instalar
1.0.0. Requer Ruby 3.0+. Sem dependências de runtime (net/http, json, uri). Testado no Ruby 4.0.
Configurar
api_key, o construtor lança ArgumentError.
As respostas voltam como Hash com chaves String, exatamente como a API devolve. As listas (templates.list, campaigns.list, smart_links.list, wallet.transactions) voltam como Arara::Page: page.data (Array), page.pagination (page, size, total_elements, total_pages), page.next_page? e each (inclui Enumerable).
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 enviar.rb:
send_message tem o alias deliver. O telefone aceita +5511999999999, whatsapp:+5511999999999 ou 5511999999999.
Com variáveis no corpo do template e mídia no header:
body: em vez de template_name::
message.status_updated.
Para enviar o mesmo template a vários números de uma vez (até 1000), use client.messages.send_batch(template_name:, messages:).
Templates
get, get_status e delete recebem o id do template (UUID), não o nome. Para achar o id pelo nome, use find_by_name.
Tratar erros
Todas expõem
status_code, code (error.code da API), details e retry_after. Em 401 e 403 de autenticação a API não devolve o envelope de erro, então code e details vêm nil e message traz o texto genérico do SDK. Lista de códigos em Erros.
Retentativas e idempotência
O SDK retenta atémax_retries vezes em timeout, falha de conexão, 429 e qualquer 5xx. Respeita Retry-After (segundos ou data, até 30s); sem ele, espera 0,5s e dobra a cada tentativa, até 30s. Para desligar: max_retries: 0.
messages.send_message, messages.send_batch e campaigns.create mandam sempre um Idempotency-Key e repetem a mesma chave em todas as tentativas. Se você não passar idempotency_key:, o SDK gera um UUID. Requisições POST e PATCH sem chave não são retentadas.
Repetir a mesma idempotency_key devolve a mensagem original. No envio de mensagem, a API não compara o corpo: reusar a chave com outro corpo devolve a mensagem original, sem novo envio.
Passe a sua chave também em campanha, para que um retry do seu lado não crie campanha duplicada:
Webhooks
O SDK não tem helper de webhook. ValideX-Arara-Signature com HMAC-SHA256 de "#{timestamp}.#{raw_body}", prefixado com sha256=, e compare em tempo constante. Recuse timestamp a mais de 5 minutos do seu relógio. Detalhes em Webhooks.
raw_body como string (request.raw_post no Rails, request.body.read no Rack), antes de qualquer parse de JSON.
Recursos disponíveis
Limitações conhecidas
Próximos passos
API Reference
Endpoints REST por baixo do SDK.
Webhooks
Eventos, payload e validação de assinatura.