Runbook - Módulo Instagram Posts
Agendamento de posts no feed do Instagram direto pela plataforma. Validado em 2026-08-22 na conta master master@exemplo.com (company 2), whitelabel app.marca-exemplo.com / bac
Agendamento de posts no feed do Instagram direto pela plataforma. Validado em 2026-08-22 na conta master
master@exemplo.com(company 2), whitelabel app.marca-exemplo.com / backend.marca-exemplo.com. Primeira leva real: 11 peças agendadas (IDs 183–193), todas201.
Onde mora na UI
Sidebar → grupo Instagram’s → Posts → rota /instagram/posts.
- Abas: Publicações (feed já postado, espelha o @ real) · Agendamentos (fila PENDING)
- Botões: Publicar (abre modal de criação) · Atualizar Posts
- ⚠ Não confundir com
/live-chat-instagram(inbox de conversas do canal).
API validada
| Método | Endpoint | Uso |
|---|---|---|
| GET | /instagram/posts?searchParam=&pageNumber=1 | publicações existentes |
| GET | /instagram/publish/scheduled | fila de agendados (array com id, caption, mediaUrls, scheduledAt UTC ISO, status PENDING/PUBLISHED) |
| POST | /instagram/publish/create/schedule/{instagramId} | cria agendado (201). instagramId=459 na conta @sagazchat |
- Upload da mídia acontece dentro do fluxo do form (multipart interno); depois o backend guarda em
marca-exemplo.blackstorages.com/instagram/{companyId}/scheduled/. scheduledAtchega em UTC (2026-08-24T14:00:00Z= 11h BRT) — o campo do form aceita hora local e converte certo.- Tipos: radio
STORIES/POST/CAROUSEL; quando: radioNOW/DATE.
Gotchas do formulário (custaram depuração)
- Checkbox sem rótulo nenhum (logo abaixo do handle @conta) é obrigatório: sem marcar, o botão Publicar fica
disabledsem mensagem nenhuma. Marcando, destrava. - O
input[type=file] some do DOM após o upload— não da pra re-lerfiles[0]depois; validar upload esperandoimg[src^="blob:"]. - Os radios são spans MUI sem
<label>— clicar no texto (“Agendar”) pode não disparar onChange; clicar emspan.MuiRadio-root:has(input[value="DATE"]). - Escape fecha o modal inteiro (e o clique seguinte em “Publicar” reabre um modal vazio = falso sucesso). Commitar o campo data com Tab, nunca Escape.
- Campo data/hora é input texto com máscara
DD/MM/YYYY hh:mm— aceitatype()normal. - Limite: imagem 8MB (aceita jpeg/jpg/png), vídeo 50MB mp4.
Scripts validados
| Script | Modo | Risco | Input | Output |
|---|---|---|---|---|
sagaz-rc-ig-probe.mjs | leitura | baixo | env RC_EMAIL/RC_PASSWORD | login + dump sidebar; salva _out/rc-session.json |
sagaz-rc-ig-inspecionar.mjs / -abrir.mjs / -posts.mjs | leitura | baixo | sessão | screenshots + dump DOM das rotas |
sagaz-rc-ig-agendar.mjs | escrita | médio | manifest JSON via IG_MANIFEST ([{id,file,caption,when}]) | agenda N posts; _out/rc-ig-resultados.json + prints pre/pós |
sagaz-rc-ig-verificar.mjs | leitura | baixo | sessão | conteúdo da aba Agendamentos |
Credenciais sempre por variável de ambiente (nunca hardcoded); sessão Playwright reutilizável em scripts/_out/rc-session.json (padrão do scripts-playwright).
Relacionado
- scripts-playwright
- 2026-05-11 - Sagazchat - Runbooks da plataforma