Backlog Unificado
Projeto: RioNoTeatro. Fonte principal: /www/wwwroot/rionoteatro.com.br/docs/BACKLOG.md.
Modo read-only: ações de escrita ficam disponíveis apenas para o Cérebro.
Sem itens pendentes em /www/wwwroot/rionoteatro.com.br/docs/BACKLOG.md.
Especificações Disponíveis (fora da fila pendente)
- BK-136
- BK-137
- BK-138
- BK-147
- BK-148
- BK-149
- BK-150
- BK-151
- BK-156
- BK-158
- BK-159
- BK-160
- BK-161
- BK-162
- BK-163
- BK-164
- BK-165
- BK-166
- BK-170
- BK-171
- BK-172
- BK-177
- BK-183
- BK-186
- BK-187
- BK-189
- BK-190
- BK-191
- BK-192
- BK-193
- BK-195
- BK-196
- BK-197
- BK-198
- BK-199
- BK-201
- BK-205
- BK-207
- BK-208
- BK-209
- BK-210
- BK-211
- BK-212
- BK-213
- BK-214
- BK-215
- BK-216
- BK-217
- BK-218
- BK-219
- BK-220
- BK-221
- BK-229
- BK-230
- BK-231
- BK-232
- BK-233
- BK-234
- BK-235
- BK-236
- BK-239
- BK-240
- BK-241
- BK-242
- BK-243
- BK-244
- BK-245
- BK-246
- BK-248
- BK-249
- BK-250
- BK-251
- BK-252
- BK-253
- BK-254
- BK-255
- BK-256
- BK-257
- BK-258
- BK-259
- BK-260
- BK-261
- BK-262
- BK-263
- BK-264
- BK-265
- BK-266
- BK-267
- BK-268
- BK-269
- BK-270
- BK-271
- BK-272
- BK-275
- BK-276
- BK-277
- BK-278
- BK-279
- BK-280
- BK-295
- BK-313
Detalhe do BK Selecionado
/www/wwwroot/rionoteatro.com.br/docs/backlog/BK-253-story-composer-meta-automacao.md • 2026-04-11T08:33:28.854Z
BK-253 - Automacao do Story Composer Meta com link da peça
Objetivo
- criar uma frente separada da automação social atual para operar o
story_composerdo Meta Business Suite - automatizar o preenchimento do composer para stories Facebook + Instagram
- preencher automaticamente o campo
Link da webcom a URL pública canônica da peça - manter a frente isolada do fluxo já estável de:
facebook_feedinstagram_feedthreads_feed- nova peça
- ideias/copies do Squad
Motivação operacional
- o fluxo atual por API publica stories, mas a regra histórica do projeto já reconhece limite para sticker/link via API pública
- na tela real do composer do Meta Business Suite foi validado que existe:
- escolha de Facebook e Instagram no mesmo agendamento
- campo
Link da web - agendamento futuro por data/hora
- o link desejado nesta frente é a URL pública da peça:
https://rionoteatro.com.br/<slug>
Link-base validado nesta rodada
- URL-base atualmente validada pelo operador no ambiente real:
https://business.facebook.com/latest/story_composer/?asset_id=105537999536136&business_id=158453615039152- parâmetros já conhecidos desta conta:
asset_id = 105537999536136business_id = 158453615039152- leitura atual:
- este link serve como base canonica do MVP 1 para abrir o composer
- a versão mínima com apenas
asset_id + business_idé a preferida para a automação - o preenchimento automatizado posterior deve tratar esses parâmetros como configuráveis, não hardcoded irreversíveis
- validação humana desta rodada: a URL mínima abriu corretamente no ambiente real
Decisão de arquitetura desta frente
- não acoplar esta automação ao pipeline atual de feed/texto
- não reescrever
redes_sociais.phppara virar o orquestrador principal do composer - sim reaproveitar, quando fizer sentido:
- contexto da peça
- agenda/fila social
- status operacionais
- runtime de prova visual
- infraestrutura de browser automation já existente no projeto/Cérebro
Regras canônicas
1. Link da peça
- o campo
Link da webdo composer deve receber a URL pública canônica da peça - formato:
https://rionoteatro.com.br/<slug-da-peca>- nesta frente, não usar:
https://rionoteatro.com.br/go/<slug>
2. Separação de escopo
- esta frente não substitui o fluxo atual de
feed - esta frente não substitui a criação social de nova peça
- esta frente não substitui as ideias/copies do Squad
- o composer do Meta deve ser tratado como canal/browser-flow separado
3. Natureza da automação
- a automação do composer é
best effort - não é API pública com contrato estável
- depende de:
- sessão autenticada no Business Suite
- DOM/UI interna do Meta
- parâmetros como
asset_idebusiness_id - portanto precisa de:
- fallback explícito
- prova visual
- registro claro de erro
Estado conhecido antes da implementação
- docs internos do RNT já registravam que story com link ficava melhor no modo manual/notificado
- o cron atual de stories está inconsistente com essa leitura porque em alguns pontos ainda ignora o
manual_notifiede segue para autopublicação - o composer real mostrou:
- seleção de Facebook + Instagram
- agendamento de ambos
Link da web
Primeira entrega sugerida
MVP 1
- criar uma trilha própria de
story composer meta - receber:
- peça
- slug
- mídia final
- data/hora
- destino FB/IG
- abrir o composer do Meta
- abrir o composer a partir da URL-base validada com
asset_idebusiness_id - preencher:
- mídia
- link da peça
- data/hora
- seleção FB/IG
- gerar:
- screenshot/prova
- status final
- erro operacional detalhado quando falhar
Estado após a primeira rodada técnica
- já existe uma tela admin separada:
admin/modulos/campanhas/story_composer_meta.php- já existe um helper/config separado:
admin/modulos/campanhas/story_composer_meta_helper.php- já existe um atalho discreto no módulo de campanhas:
admin/modulos/campanhas/index.php
O que essa rodada já entrega
- seleção manual de peça ativa
- leitura da URL pública canônica da peça
- exibição da URL-base validada do composer
- seleção inicial de data/hora
- flags de destino para Facebook e Instagram
- detecção automática de mídia em:
/arquivos/pecas/{id}/video/arquivos/pecas/{id}/large/arquivos/pecas/{id}/media- payload resumido do MVP para a futura automação do browser flow
- helper já ajustado para gerar a URL mínima do composer apenas com:
asset_idbusiness_id- tela já exibe:
- input payload do browser runner
- comando exato do
browser_profile_runner.js - botão para executar a prova segura do browser control
- a tela bloqueia a prova quando a peça não tiver
media_urldetectado - a listagem e o
fetch_pieceagora seguem o mesmo filtro da vitrinepecas.php - integração com profile dedicado no Cérebro:
rnt-meta-story-composer-schedule-proof-v1- storage state renovado com captura local e importado para o runtime web:
/tmp/cerebro-browser-storage-state-www/facebook-rnt.json- comando web do runner validado com:
CEREBRO_BROWSER_EXECUTABLE=/usr/bin/google-chrome-stable- upload real da mídia já comprovado no composer:
- clique em
Adicionar foto/vídeo - abertura do
filechooser setFiles()concluído- preview renderizado no composer
- o Cérebro ganhou suporte novo no executor para:
wait_for_filechooserhover
O que ainda não entrega
- automação real do browser preenchendo os campos do Meta
- execução autenticada com prova visual já foi ligada na UI, mas ainda depende de validação humana do run real
- persistência própria de jobs/estado do composer
- reconciliação final com
manual_notifiedda fila social - submissão/agendamento automático no próprio composer
- clique final de
Programar/Publicar
Estado operacional confirmado em 2026-04-11 04:16 -03
- o storage state antigo não servia para
business.facebook.com; foi necessário: - capturar state novo localmente
- importar para
/tmp/cerebro-browser-storage-state-www/facebook-rnt.json - no contexto do
php-fpm,chromium-browservia snap falha; a execução correta ficou: /usr/bin/google-chrome-stable- o upload não usa
input[type=file]no DOM: - o Meta dispara
filechoosernativo - por isso o profile migrou de
set_input_filesparawait_for_filechooser - após o upload, o composer exibe com segurança:
ProgramarCompartilhar agoraStory do FacebookStory do Instagram- campos de data/hora quando entra em
Programar - leitura humana do operador:
- depois que a mídia sobe, aparecem
Editar,Adicionar linke lixeira no preview - depois de clicar em
Adicionar link, aparecem: Ver link da lojaLink da webSem link de deslizar para cima- bloqueio atual do browser flow:
- em headless, o runner ainda não revelou
Adicionar linkno DOM automatizado - o gargalo mais atual está em acertar o alvo/estratégia do hover ou trigger do overlay do preview da mídia
- o fluxo de schedule já é conhecido, mas o submit final azul
Programarainda não foi automatizado porque a frente está em modo prova
Estado operacional confirmado em 2026-04-11 04:50 -03
- o browser flow passou ponta a ponta no ambiente real do composer
- a estratégia vencedora combinou:
- upload por
filechooser - fallback por coordenada para o fluxo de link:
Adicionar foto/vídeoemx=495,y=439Adicionar linkLink da web- foco no campo do link
Tabx3 +Enterno botãoAplicarpara salvar o link- o agendamento em headless passou a usar os seletores reais do DOM:
- data:
xpath=(//input[@placeholder='dd/mm/aaaa'])[1|2]- hora:
xpath=(//input[@role='spinbutton' and @aria-label='horas'])[1|2]- minutos:
xpath=(//input[@role='spinbutton' and @aria-label='minutos'])[1|2]- o helper do RNT agora deriva:
schedule_date_brschedule_hourschedule_minute- o submit final azul
Programarfoi automatizado por seletor explícito do footer: [data-surface$='stories_composer:footer/lib:stories_composer:publish_button']- sequência humana confirmada do fluxo de link:
- click 1:
x=495,y=439emAdicionar foto/vídeo - click 2:
x=715,y=300emAdicionar link - click 3:
x=348,y=395emLink da web - click 4:
x=409,y=438para focar o campo do link - depois:
TabTabTabEnterno botãoAplicar- sequência operacional confirmada do schedule após clicar em
Programar: Tab1: campo de data do FacebookTab2: campo de hora do FacebookTab3: campo de minutos do FacebookTab4: campo de data do story do InstagramTab5: campo de hora do story do InstagramTab6: campo de minutos do story do InstagramTabx5 adicionais: botão finalProgramarno fluxo humano/manual- run real validado nesta rodada:
- data alvo:
2026-04-15 - horário alvo:
04:55 - run id:
rnt-meta-story-composer-schedule-proof-v1-1775893826123- artefatos:
/tmp/cerebro-browser-runs-www/rnt-meta-story-composer-schedule-proof-v1-1775893826123/
Estado operacional confirmado em 2026-04-11 05:28 -03
- o problema da mídia não era path
- o arquivo original da peça estava em:
HEVC / H.2651080x1920- ~
37 MB - no Meta Story Composer esse arquivo ficava preso em:
Carregando mídia- a hipótese foi confirmada ao gerar derivado:
H.264yuv420pAAC- ~
7.9 MB - com a versão H.264 o
Carregando mídiasome e o composer avança
Decisão de implementação
- não abrir cron paralelo novo
- integrar a geração do derivado ao cron social já existente:
admin/cron/sync_facebook_events.php- o próprio cron agora pré-gera e reutiliza vídeo story Meta-ready ao resolver o asset de story
- a tela do composer também usa a mesma lógica:
- primeiro procura o derivado já gerado
- se não existir, gera sob demanda
Arquivo derivado canônico
- diretório:
/www/wwwroot/rionoteatro.com.br/uploads/social_meta_assets/video/- URL pública:
https://rionoteatro.com.br/uploads/social_meta_assets/video/- helper compartilhado:
admin/modulos/campanhas/meta_story_video_helper.php
Política atual
- cron social:
- gera/reusa derivado H.264/AAC para vídeo story
- faz limpeza de antigos nesse diretório
- tela do composer:
- prefere
media.pathlocal do derivado - só cai em URL se não houver path local válido
Write set esperado para a implementação
admin/modulos/campanhas/story_composer_meta_helper.phpadmin/modulos/campanhas/story_composer_meta.phpadmin/modulos/campanhas/index.phpdocs/backlog/BK-253-story-composer-meta-automacao.mddocs/documentacao_tecnica/campanha_track/STORY_COMPOSER_AUTOMACAO_META.md
Riscos assumidos
- mudança de UI do Meta sem aviso
- perda de sessão/autenticação
- checkpoint/2FA
- anti-bot
- falha silenciosa do browser flow
Critério de sucesso do BK
- automação documentada e separada do fluxo atual
- prova visual de execução
- uso da URL pública da peça no campo de link
- fallback claro sem quebrar feed/Squad/nova peça