Skip to main content

Instalar

Versão no RubyGems: 1.0.0. Requer Ruby 3.0+. Sem dependências de runtime (net/http, json, uri). Testado no Ruby 4.0.

Configurar

Sem 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. Troque pedido_confirmado pelo nome do seu template. Salve como enviar.rb:
Rode:
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:
Para responder dentro da janela de 24h, mande body: em vez de template_name::
Consulte uma mensagem pelo id que o envio devolveu:
Para acompanhar o status sem consultar, use o webhook 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.
A chave gerada vale só dentro de uma chamada. Se o seu processo cair e rodar de novo, o envio sai duplicado. Passe idempotency_key: derivada de um id do seu sistema (id do pedido, id da tentativa), não de um valor novo a cada chamada.
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. Valide X-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.
Passe 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.
Código-fonte: github.com/ararahq/arara-ruby-sdk.