Primeiros passos

Do zero ao primeiro envio, sem número real e sem custo: gere uma chave de sandbox e teste a API REST ponta a ponta.

Este guia usa uma chave de sandbox (bz_sandbox_): ela não chama a Meta, não consome quota e só envia para os números sintéticos do sandbox. É o caminho mais rápido para conhecer a API antes de conectar um número de verdade. O caminho principal desta e de todas as outras páginas de guia é a API REST (curl/TypeScript/JavaScript); veja a nota sobre o SDK Node ao final.

Gere uma chave de sandbox

No painel da BotoZap, abra Chaves de API, gere uma chave nova e escolha o ambiente Sandbox. Guarde o valor num lugar seguro: ele é mostrado uma vez só. Exporte a chave no seu ambiente:

export BOTOZAP_KEY="bz_sandbox_..."

A conta é derivada da chave, então você nunca passa um id de conta. O isolamento multi-tenant é garantido no servidor. Detalhes em Autenticação.

Envie a primeira mensagem

Faça um POST para /api/v1/messages usando o número mágico +5500000000001. Ele simula todo o ciclo de vida (entregue, depois lida) e sempre tem a janela de atendimento aberta:

Enviar uma mensagem de texto (sandbox)

Testa o envio ponta a ponta sem credenciais Meta e sem custo, usando o número mágico de happy path do sandbox.

curl https://botozap.com.br/api/v1/messages \
  -X POST \
  -H "X-API-Key: $BOTOZAP_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "to": "+5500000000001",
  "type": "text",
  "text": {
    "body": "Oi! 👋 Tudo bem?"
  }
}'

Resposta 201

{
  "id": "5b0a9d0e-6e1a-4f3b-8c2d-1a9f6e0b7c11",
  "wamid": "wamid.HBgNNTU5MTk5OTk5OTk5FQIAERgSM0FCQzFEMkUzRjRBNUI2QzdEAA==",
  "to": "5500000000001",
  "status": "sent",
  "sandbox": true
}

Chave de ambiente sandbox (`bz_sandbox_`) nunca chama a Meta, nunca consome quota e só envia pelo número sintético da conta.

Depois do 201, o BotoZap simula o ciclo de vida (delivered → read) e dispara seu webhook assinado, como em produção — veja `docs/sandbox.md`.

Envie um template

No sandbox qualquer nome de template é aceito (a Meta não é chamada para validar o catálogo). Em produção, o template precisa existir e estar aprovado na WABA:

Enviar um template (sandbox)

No sandbox, qualquer nome de template é aceito — a Meta não é chamada, então não há catálogo para validar contra.

curl https://botozap.com.br/api/v1/messages \
  -X POST \
  -H "X-API-Key: $BOTOZAP_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "to": "+5500000000001",
  "type": "template",
  "template": {
    "name": "boas_vindas",
    "language": {
      "code": "pt_BR"
    }
  }
}'

Resposta 201

{
  "id": "5b0a9d0e-6e1a-4f3b-8c2d-1a9f6e0b7c11",
  "wamid": "wamid.HBgNNTU5MTk5OTk5OTk5FQIAERgSM0FCQzFEMkUzRjRBNUI2QzdEAA==",
  "to": "5500000000001",
  "status": "sent",
  "sandbox": true
}

Em produção (chave live), o nome do template precisa existir e estar APPROVED na WABA.

Liste suas mensagens

Listar mensagens

Lista as mensagens da conta, mais recentes primeiro, paginado por cursor.

curl https://botozap.com.br/api/v1/messages?limit=2 \
  -H "X-API-Key: $BOTOZAP_KEY"

Resposta 200

{
  "data": [],
  "paging": {
    "cursors": {
      "before": "MjAyNi0wNy0xNFQxMjowMDowMC4wMDBa",
      "after": "MjAyNi0wNy0xNFQxMjowMDowMC4wMDBa"
    },
    "next": "MjAyNi0wNy0xNFQxMjowMDowMC4wMDBa",
    "previous": "MjAyNi0wNy0xNFQxMjowMDowMC4wMDBa"
  }
}

Próximos passos

  • Enviar mensagens: a janela de 24h, telefone vs. BSUID e todos os cenários do sandbox.
  • Webhooks: receba eventos de mensagem e status de entrega, inclusive os que o sandbox simula.
  • Confiabilidade e entrega: o que a API garante (e o que não garante) sobre duplicatas, ordem e retries.
  • Quando estiver pronto para um número real, troque a chave por uma bz_live_. O mesmo código funciona, só o ambiente muda.

Prefere Node.js? O @botozap/sdk já está publicado no npm (ver SDK Node). Ele é um envelope tipado sobre a mesma API REST usada nos exemplos acima.