Skip to main content

Instalar

PyPI Versão publicada: 2.0.0. Python 3.8+. Dependências: httpx, pydantic v2, pydantic-settings e tenacity. O pacote instala como ararahq-sdk e importa como arara_api_sdk.

Configurar

Todas as opções também podem vir do ambiente: ARARA_API_KEY, ARARA_BASE_URL, ARARA_TIMEOUT, ARARA_MAX_RETRIES.

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.py:
Rode:
O receiver aceita +5511999999999, whatsapp:+5511999999999 ou só os dígitos. O idempotency_key é opcional: sem ele o SDK gera um por chamada e o reaproveita nas retentativas. Passe o seu para evitar duplicidade entre processos (veja a seção Retentativas e idempotência). Com variáveis no corpo do template e mídia no header:
SendMessageRequest rejeita variáveis com quebra de linha ou tab (ValidationError do Pydantic, antes de chamar a API). Para responder dentro da janela de 24h, mande body em vez de template_name:
Para consultar depois, use client.messages.get(id). Ele só devolve mensagens do mesmo usuário dono da chave (ver Limitações conhecidas). Para enviar o mesmo template a até 1.000 números, use client.messages.send_batch(BatchMessageRequest(...)) e client.messages.list_by_batch(batch_id). Em produção, acompanhe o status pelo webhook message.status_updated.

Async

Todo método síncrono tem uma variante _async com a mesma assinatura.

Templates

get, get_status e delete recebem o id do template (UUID).
Para criar um template, use client.templates.create(CreateTemplateRequest(name=..., category=..., body=...)) (importe de arara_api_sdk.models.template). client.templates.analytics(template_id, period="30d") devolve as métricas de entrega e leitura.

Tratar erros

Toda exceção expõe status_code, response_body (o JSON da resposta), message, code, details e retry_after. code e details vêm do envelope de erro {"error": {"code", "message", "details"}} e ficam vazios (None e {}) quando o corpo não segue o envelope, o caso de 401 e 403 de autenticação. 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 5xx, 429, erro de conexão e timeout, com espera exponencial entre 2s e 10s, até max_retries vezes. Em 429 ele espera o Retry-After da resposta; se o valor passar de 60s, não retenta e levanta AraraRateLimitError. Todo envio (messages.send, messages.send_batch e campaigns.create) manda o header Idempotency-Key. Sem idempotency_key, o SDK gera um UUID por chamada e repete o mesmo valor em cada retentativa, então um timeout depois de a API aceitar o pedido não duplica a mensagem. Passe o seu para dedupe entre processos e reinícios:
Repetir a mesma chave em messages.send devolve a mensagem original, mesmo com corpo diferente: a API não compara o corpo. Chamadas POST/PATCH sem Idempotency-Key nunca são retentadas. Para desligar as retentativas, use max_retries=0 ou ARARA_MAX_RETRIES=0.

Webhooks

O SDK não tem helper de webhook. Valide a assinatura antes de processar, com o corpo cru da requisição (os bytes exatamente como chegaram, antes de qualquer parse). A string assinada é "{X-Arara-Timestamp}.{corpo cru}":
Use hmac.compare_digest, nunca ==. Depois de validar, trate o evento pelo campo event. Detalhes e catálogo em Webhooks. A URL do webhook é cadastrada pelo painel. A API não aceita essa configuração com chave de API.

Recursos disponíveis

Todo método tem a variante _async (por exemplo send_async). Contacts, conversations, wallet e auth.me exigem chave de API com permissão ADMIN.

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-python-sdk (MIT).