Runbook — Transmissão do Sagazchat

Manual operacional para uma IA ou pessoa operar a Transmissão (disparos em massa) sem tentativa visual cega.

8 min de leitura Atualizado em 14 de mai. de 2026

Manual operacional para uma IA ou pessoa operar a Transmissão (disparos em massa) sem tentativa visual cega.

Status: parcialmente validado em 2026-05-11 na conta exemplo (user_id 39, app v4.6.0). 0 transmissões existentes no momento da auditoria. Modais inspecionados; POST de criar transmissão não capturado (não foi disparado — risco de envio em massa real).

1. Onde fica

  • Sidebar: Criação > Transmissão (item simples do grupo Criação, separado de Automação).
  • Tela: https://app.sagazchat.com/campaigns-beta
  • Endpoint listar: GET /campaign-flow?page=1&limit=20 (validado)
  • Endpoint lista de contatos: GET /contact-lists/all + GET /contact-lists/?searchParam=&pageNumber=1 (validado)

Naming: a rota é /campaigns-beta (com “beta”) — sugere que existe versão estável separada (talvez a antiga /transmissoes ou similar). UI mostra heading “Transmissões” (plural).

2. Tela /campaigns-beta

2.1 Cards de resumo por canal

Sempre dois cards lado a lado:

CanalCards
WhatsApp Web0 campanhas (total) + Em andamento / Agendadas / Pausadas / Finalizadas
API Oficialmesmo formato

Cada contador é clickable (presumivelmente filtra a tabela).

2.2 Filtros

Tabs/botões: Todos / WhatsApp Web / API Oficial — filtram a tabela abaixo.

2.3 Tabela

7 colunas: Nome / Status / Progresso / Agendamento / Criação / Última atualização / Ações.

Estado vazio: “Nenhuma transmissão encontrada”.

2.4 Botões topo

BotãoEstiloAção
+ Nova listacinzaAbre modal Lista de Contatos (gerenciador de listas)
+ Criar transmissãoverdeAbre modal Criar nova transmissão

3. Modal “Lista de Contatos” (+ Nova lista)

NÃO é modal de criar uma lista direto — é um gerenciador que lista todas as listas existentes.

Conteúdo:

  • Heading: “Lista de Contatos”
  • Busca: input[type="search"][placeholder="Pesquisar..."]
  • Tabela: Nome / Contatos / Ações
  • Botão “Nova Lista” (sem +) — esse sim cria uma lista nova
  • Estado vazio: “Nenhum contato encontrado.”

Quirky: o botão “Nova Lista” dentro do modal repete o nome do botão de fora (”+ Nova lista”) mas faz coisa diferente. O de fora abre o gerenciador; o de dentro cria a entidade.

Endpoint usado: GET /contact-lists/?searchParam=&pageNumber=1.

4. Modal “Criar nova transmissão” (+ Criar transmissão)

Layout em 2 colunas.

4.1 Coluna 1 — Configurações

CampoTipoDetalhes
Nomeinput[placeholder="Nome"]Nome da transmissão
Fluxo para transmissãoAutocomplete placeholder="Selecionar"Lista de fluxos da conta
Canal de envio (tipo)ComboboxWhatsApp (default), API Oficial, etc
Escolha um ou mais (canais principais)Autocomplete placeholder="Escolha um ou mais"Multi-seleção de números
Fallbacks (Opcional)Autocomplete placeholder="Escolha os canais de backup"Multi-seleção; canais usados se principais falharem
Configurações avançadasSection expansível (heading)Conteúdo [a validar] — inclui checkboxes, input range (slider)

4.2 Coluna 2 — Segmentação

CampoTipoDetalhes
TipoCombobox placeholder="Selecionar"Default Lista de contatos; outras opções [a validar] (talvez Etiqueta, Audiência completa, etc)
Lista de ContatosAutocomplete placeholder="Lista exemplo"Lista criada em ”+ Nova lista”

4.3 Rodapé

  • ☐ Agendar transmissão (checkbox) — habilita campo de data/hora [a validar]
  • Iniciar transmissão (botão verde) — submete; DESTRUTIVO (dispara mensagens em massa imediatamente se não agendado)

Sem botão Cancelar visível — fechar via X no topo ou tecla Escape.

4.4 Endpoints auxiliares disparados ao abrir modal

  • GET /contact-lists/all (carregado 2x — listas em 2 lugares no modal)
  • GET /campaign-flow?page=1&limit=20 (estado da tabela)
  • GET /flowbuilder/all/get (provável — não validado nesta auditoria)

4.5 POST de criar — [a validar]

Endpoint provável: POST /campaign-flow com body estruturado:

{
  "name": "...",
  "flowId": <number>,
  "channelType": "whatsapp" | "waOficial",
  "mainChannels": [<id>, ...],
  "fallbackChannels": [<id>, ...],
  "segmentation": {
    "type": "contactList",
    "listId": <number>
  },
  "advancedConfig": { ... },
  "schedule": <ISO> | null
}

Não capturado — submeter “Iniciar transmissão” sem confirmação dispara envio real.

5. Ações seguras vs disparadoras (para IA)

Seguras:

  • GET /campaign-flow?page=1&limit=20 — listar transmissões
  • GET /contact-lists/?searchParam=&pageNumber=1 — listar listas
  • GET /contact-lists/all — todas as listas
  • Abrir modal ”+ Nova lista” / ”+ Criar transmissão” e cancelar com Escape
  • Tabs de filtro (Todos / WhatsApp Web / API Oficial) — apenas filtram visual

Disparadoras (exigem ordem do administrador):

  • Botão Nova Lista dentro do modal “Lista de Contatos” (cria entidade)
  • Botão Iniciar transmissão (DISPARA MENSAGENS EM MASSA — destrutivo se sem agendar)
  • Edição/exclusão de transmissões existentes (kebab da linha — [a validar] quais ações)

Risco máximo: clicar “Iniciar transmissão” sem agendar = envia AGORA pra todos os contatos da lista. Sem rollback.

6. Quirks

  • Rota /campaigns-beta — versão beta, naming sugere existência de “campaigns” estável (não confirmado).
  • Endpoint /campaign-flow mistura “campaign” + “flow” — antes era talvez só /campaigns.
  • 2 botões com “Nova lista” diferentes:
    • + Nova lista (cinza, fora do modal) → abre GERENCIADOR
    • Nova Lista (sem +, dentro do gerenciador) → CRIA
  • Sem botão Cancelar no modal Criar — UX inconsistente; tem só Iniciar transmissão e o X.
  • Fallbacks é feature avançada não muito comum em produtos similares — anti-bloqueio nativo.
  • “Configurações avançadas” é colapsável — fechado por padrão, expandir pra ver checkboxes e slider.
  • Input type="range" (slider) dentro de Configurações avançadas — provável controle de velocidade/intervalo entre mensagens (anti-detecção).

7. Pendências

  • Conteúdo completo de Configurações avançadas (checkboxes + slider)
  • Opções do dropdown Tipo em Segmentação (Lista de contatos é só uma)
  • POST de criar transmissão (schema completo)
  • Comportamento do kebab na linha da tabela (Editar, Pausar, Excluir, Duplicar?)
  • Tela de detalhe de uma transmissão (existe? abre modal? navega URL?)
  • Diferença real entre WhatsApp Web e API Oficial em termos de comportamento da transmissão
  • Lista efetiva dos canais em mainChannels e fallbackChannels

8. Snippets Playwright

8.1 Listar transmissões

await page.goto('https://app.sagazchat.com/campaigns-beta', { waitUntil: 'domcontentloaded' });
// captura: GET /campaign-flow?page=1&limit=20 + GET /contact-lists/all

8.2 Abrir modal Criar (sem submeter)

await page.locator('button').filter({ hasText: /\+ Criar transmissão/ }).first().click();
await page.waitForTimeout(1200);
// inspecionar e SEMPRE fechar via Escape
await page.keyboard.press('Escape');

8.3 Abrir gerenciador de listas

await page.locator('button').filter({ hasText: /\+ Nova lista/ }).first().click();
await page.waitForTimeout(800);
// dispara GET /contact-lists/?searchParam=&pageNumber=1

9. Scripts criados

  • scripts/sagaz-transmissao-investigar.mjs — abre os 2 modais sem submeter, captura estrutura completa + endpoints