Skip to main content

Instalar

Requer Go 1.22+. Sem dependências externas (net/http, encoding/json, context).

Configurar

arara.WithHTTPClient(hc) substitui o *http.Client inteiro (transporte e timeout).

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 main.go:
Rode:
Com variáveis no corpo do template e mídia no header:
Para responder dentro da janela de 24h, mande Body em vez de TemplateName:
Para consultar a mensagem depois, use client.Messages.Get(ctx, id) ou o webhook message.status_updated. Get aceita chave de API com permissão READ.

Templates

Get, GetStatus e Delete recebem o id do template (UUID), não o nome. Para achar o id pelo nome, use client.Templates.FindByName(ctx, "promo_natal").

Tratar erros

Toda falha devolve *arara.APIError:
Helpers: arara.IsAuthError(err) (401), arara.IsForbidden(err) (403 sem código), arara.IsNotFound(err) (404) e arara.IsPlanFeatureLocked(err). errors.Is(err, context.Canceled) funciona. 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

O SDK retenta até WithMaxRetries vezes em falha de rede, 429 e qualquer 5xx, e só em requisições GET ou com Idempotency-Key. Escritas sem a chave nunca são repetidas. Respeita Retry-After (até 30s); sem ele, espera 500ms e dobra a cada tentativa, até 30s. Cancelar o context interrompe a espera. Para desligar: arara.WithMaxRetries(0).
Messages.Send, Messages.SendBatch e Campaigns.Create sempre mandam Idempotency-Key: se você não passar uma, o SDK gera um UUID v4, que só vale dentro daquela chamada (e é a mesma em todas as retentativas dela). Para que um retry do seu lado não duplique o envio, passe SendOptions{IdempotencyKey: ...}.
SendOptions é opcional. 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 IdempotencyKey devolve a mensagem original. A API não compara o corpo nem expira a chave: com destinatário ou variáveis diferentes, a resposta continua sendo a mensagem original. Campaigns.Create segue a mesma regra, com CampaignCreateOptions:

Webhooks

O SDK não tem helper de webhook. Valide X-Arara-Signature com crypto/hmac sobre "{X-Arara-Timestamp}.{corpo cru}" e compare com hmac.Equal. Detalhes em Webhooks.
Chame com r.Header.Get("X-Arara-Timestamp"), r.Header.Get("X-Arara-Signature") e o corpo lido com io.ReadAll(r.Body), antes de decodificar o JSON.

Recursos disponíveis

Todo método recebe context.Context como primeiro argumento. Exemplo de contatos e conversas:

Limitações conhecidas

Próximos passos

API Reference

Endpoints REST por baixo do SDK.

CLI

Envio e escuta de webhooks pelo terminal.
Código-fonte: github.com/ararahq/arara-go-sdk.