Preview público 0.4.0
@botozap/cli está em preview 0.x, sem promessa de estabilidade de comandos e flags até a 1.0. A API REST é a interface estável: se algo faltar na CLI, chame /api/v1 direto ou use o SDK.
A CLI é uma casca fina sobre o SDK Node: toda chamada de rede passa por ele, com a mesma autenticação e os mesmos códigos de erro. A versão 0.4.0 tem 28 comandos de primeiro nível e 266 subcomandos executáveis, 150 deles no grupo ai.
Instalação
pnpm add --global @botozap/[email protected]
botozap --version
# ou, sem instalar:
pnpm dlx @botozap/[email protected] --helpRequer Node 20.19 ou superior. Qualquer comando aceita --help, inclusive os subcomandos: botozap appointments services --help.
Autenticação
Crie a chave em /chaves no painel. A CLI envia Authorization: Bearer e resolve a chave e a URL base nesta ordem:
| Item | 1º | 2º | 3º | Padrão |
|---|---|---|---|---|
| Chave | --api-key | BOTOZAP_API_KEY | ~/.botozap/cli/config.json | nenhuma: erro config_error sem chamar a rede |
| URL base | --api-url | BOTOZAP_API_URL | ~/.botozap/cli/config.json | https://botozap.com.br/api/v1 |
# opção 1: variável de ambiente (recomendada em CI e scripts)
export BOTOZAP_API_KEY='bz_live_substitua_por_sua_chave'
# opção 2: gravar no config local (arquivo 0600, diretório 0700)
botozap login # pede a chave sem ecoar no terminal
botozap config set apiKey bz_live_substitua_por_sua_chave
botozap config get # mostra a config com a chave mascarada
botozap config path # ~/.botozap/cli/config.json
botozap statusbotozap login ainda não abre login pelo navegador: ele explica onde criar a chave e grava a chave colada no config local. botozap status faz uma sonda leve em GET /phone_numbers?per_page=1 e mostra a URL base, a origem da chave (flag, env ou config) e o total de Números. Evite --api-key em máquinas compartilhadas: argumentos ficam no histórico do shell e aparecem em ps.
Flags globais
Valem em qualquer posição da linha de comando.
| Flag | Efeito |
|---|---|
--api-key <chave> | Chave de API; sobrepõe env e config. Prefira BOTOZAP_API_KEY ou botozap login: argv fica no histórico do shell. |
--api-url <url> | URL base da API; sobrepõe env e config. |
-o, --output <formato> | human (padrão) ou json. Em json, sucesso vai para stdout e erro para stderr. |
-v, --version | Mostra a versão. |
-h, --help | Ajuda do comando; funciona em qualquer nível. |
Saída e erros
O formato human imprime tabelas e detalhes legíveis. Com -o json, o sucesso vai para stdout como JSON indentado e o erro vai para stderr como { error: { code, message } }, o mesmo envelope da API. Falhas de rede aparecem como network_error. Todo erro sai com código 1.
botozap status -o json
# {
# "ok": true,
# "base_url": "https://botozap.com.br/api/v1",
# "api_key_source": "env",
# "phone_numbers_total": 1
# }Comandos
Os comandos de recursos mais antigos recebem parâmetros por flags. Os mais novos, marcados como --input-file, recebem um arquivo com um objeto JSON de até 256 KiB. O --help de cada um lista os campos obrigatórios do JSON. Ids de rota entram como argumento posicional, por exemplo botozap journeys get <id>.
| Comando | Subcomandos | Entrada |
|---|---|---|
saved-repliesRespostas salvas compartilhadas; saved_replies:read/write. | list, get, create, update, delete | --input-file |
inbox-toolsNotas internas, retornos, arquivo e adiamento; inbox:read/write. | get, mutate | --input-file |
opportunitiesOportunidades do CRM; crm:read/write. | list, get, create, update, activities, conversations, link-conversation, unlink-conversation | --input-file |
demandsDemandas do CRM; crm:read/write. | list, get, create, update, activities, conversations, link-conversation, unlink-conversation | --input-file |
radarPendências do CRM e critérios por etapa; crm:read/write. | list, stage-rules, stage-rule | --input-file |
journeysRéguas e execuções; journeys:read/write, ambiente live. | list, get, create, update, delete, control, runs, enroll, get-run, control-run | --input-file |
assignmentsAtribuições de Conversas a membros da Conta. | list, create, get, update | --input-file |
appointmentsAgenda completa, incluindo serviços, jornadas e exceções; appointments:read/write. | list, get, create, update, delete, history, availability, services list, services create, services update, schedules list, schedules create, schedules update, exceptions list, exceptions create, exceptions update, exceptions delete | --input-file |
calendarGoogle Calendar autorizado antes em /calendarios no Painel; calendar:read/write. | connections, disconnect, calendars, refresh, select, jobs, retry-job, resolve-conflict | --input-file |
contact-stagesEtapas do funil por Cliente; contacts:read/write. | list, create, update, delete, reorder | --input-file |
contact-fieldsCampos personalizados da Conta; contacts:read/write. | list, create, update, delete | --input-file |
messagesEnviar e consultar mensagens de WhatsApp. | send, list, get | flags |
conversationsListar Conversas (com Contato, origem entry_point e hora da última mensagem) e alterar status (active | ended). | list, get, update | flags |
contactsGerenciar Contatos; create/update aceitam --display-name e update aceita --clear-display-name. | list, get, create, update, delete | flags |
mediaIngestão de mídia a partir de uma URL. | ingest | flags |
customersGerenciar Clientes do workspace. | list, get, create, update, delete | flags |
setup-linksLinks de setup (Embedded Signup) de um Cliente. | list, create, update | flags |
numbersNúmeros de WhatsApp conectados; list mostra nome local e status da conexão, update --label/--clear-label. | list, get, update, health | flags |
templatesTemplates de mensagem. | list, get, create | flags |
webhooksEndpoints de webhook, filtro por Cliente, rotação do secret e teste assinado. | list, get, create, update, delete, test | flags |
deliveriesEntregas de webhook (webhook_deliveries). | list | flags |
logsLogs de requisições à API (api_logs). | list | flags |
usersUsuários do workspace. | list | flags |
usageCusto aproximado da Meta (usage meta-costs [--customer-id] [--from] [--to]); custo ausente sai como "indisponível", nunca 0; customers:read. | meta-costs | flags |
loginExplica como criar a chave em /chaves e grava a chave colada no config local. | — | flags |
configLê e grava a configuração local (apiKey, baseUrl). | set, get, path | — |
statusConfere autenticação e conectividade com GET /phone_numbers?per_page=1. | — | — |
aiIA BYOK: conversation-control e um subcomando por operação (botozap ai <grupo> <operação>); agents:read/write. | conversation-control e os grupos agents, credentials, providers, executions, knowledge, memory, skills, followup-flows, followups, routers, cases, alerts, notices, proposals, usage, uploads, commercial-proposals, eligibility, inferences, operator, evolution, style-adjustments. Veja Agente de IA. | --input-file |
No grupo ai, os uploads (ai knowledge upload, até 20 MiB, e ai skills import-zip, até 5 MiB) leem o arquivo local indicado em file_path no JSON. A CLI confere o tamanho antes do envio.
Exemplos
botozap numbers list
botozap numbers update <id> --label "Loja Centro" # --clear-label remove
botozap usage meta-costs --from 2026-09-01 --to 2026-09-24
botozap messages send --to 5531988887777 --text "Olá!"
botozap messages list --direction inbound --limit 20 -o json
botozap webhooks create \
--url https://seu-dominio.example/webhooks/botozap \
--events messages \
--customer-id <uuid-do-cliente> # opcional: só as entregas desse Cliente
botozap webhooks test <webhook_id>
botozap webhooks update <webhook_id> --secret <novo-secret> # rotaciona
botozap webhooks update <webhook_id> --clear-customer # toda a Conta
botozap deliveries list -o jsonO Endpoint criado nasce sem verificação e só recebe Eventos reais depois que webhooks test recebe 2xx. --customer-id (em create e update) limita as entregas a um Cliente da Conta; --clear-customer remove o filtro, e as duas flags não se combinam. webhooks update --secret rotaciona o secret de assinatura (16 a 256 caracteres); o valor novo não volta na resposta. O fluxo completo está em Webhooks, incluindo como rotacionar sem perder entregas.
cat > filtro.json <<'JSON'
{ "customer_id": "<uuid-do-cliente>", "status": "open" }
JSON
botozap opportunities list --input-file filtro.json -o json
botozap opportunities create --help # mostra os campos obrigatórios do JSONO que a CLI não cobre
A CLI 0.4.0 cobre um subconjunto do SDK. Não há comando para:
broadcasts: transmissões.events: replay de Eventos (GET /events).conversations reply / agent-control: use messages send; o controle do agente está em ai conversation-control.numbers delete: remoção de Número.media get: leitura de mídia recebida.
Para esses casos, use o SDK ou a API /v1. Para agentes, o MCP oferece reply_to_conversation e control_conversation_agent.
