Runbook — Transmissão do Sagazchat
Manual operacional para uma IA ou pessoa operar a Transmissão (disparos em massa) sem tentativa visual cega.
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/transmissoesou similar). UI mostra heading “Transmissões” (plural).
2. Tela /campaigns-beta
2.1 Cards de resumo por canal
Sempre dois cards lado a lado:
| Canal | Cards |
|---|---|
| WhatsApp Web | 0 campanhas (total) + Em andamento / Agendadas / Pausadas / Finalizadas |
| API Oficial | mesmo 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ão | Estilo | Ação |
|---|---|---|
| + Nova lista | cinza | Abre modal Lista de Contatos (gerenciador de listas) |
| + Criar transmissão | verde | Abre 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
| Campo | Tipo | Detalhes |
|---|---|---|
| Nome | input[placeholder="Nome"] | Nome da transmissão |
| Fluxo para transmissão | Autocomplete placeholder="Selecionar" | Lista de fluxos da conta |
| Canal de envio (tipo) | Combobox | WhatsApp (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çadas | Section expansível (heading) | Conteúdo [a validar] — inclui checkboxes, input range (slider) |
4.2 Coluna 2 — Segmentação
| Campo | Tipo | Detalhes |
|---|---|---|
| Tipo | Combobox placeholder="Selecionar" | Default Lista de contatos; outras opções [a validar] (talvez Etiqueta, Audiência completa, etc) |
| Lista de Contatos | Autocomplete 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õesGET /contact-lists/?searchParam=&pageNumber=1— listar listasGET /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-flowmistura “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ãoe 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 WebeAPI Oficialem termos de comportamento da transmissão - Lista efetiva dos canais em
mainChannelsefallbackChannels
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