Instalar
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. Troquepedido_confirmado pelo nome do seu template.
Salve como main.go:
Body em vez de TemplateName:
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).
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. ValideX-Arara-Signature com crypto/hmac sobre "{X-Arara-Timestamp}.{corpo cru}" e compare com hmac.Equal. Detalhes em Webhooks.
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 recebecontext.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.