📄 Cópia local — fonte de verdade no GitHub. Origem:
felipeluissalgueiro/cadencia-app/master/cadencia-workers/src/workers/instagram-publisher/CLAUDE.mdSincronizar via/documentar-softwareousync_to_framework.py.
instagram-publisher — publicação no Instagram¶
TL;DR¶
Publica carrossel/reels no Instagram do tenant via API do Instagram (Graph API). Chamado após aprovação de conteúdo.
Identidade¶
- Tipo: Worker Python
- Stack: Python + Instagram Graph API + Supabase Storage
- Path:
cadencia-workers/src/workers/instagram_publisher.py - Status: ativo
- Deps:
published_posts, Supabase Storage (slides PNG),tenant_config.config.instagram
Dependências externas¶
logo_analysis_agent.py— analisa logo do tenant para ajustar posicionamento na capa- Instagram Graph API — requer
instagram_access_tokeneinstagram_user_idemtenant_config - Análise de perfil Instagram: Apify (via
POST /api/instagram/analyze)
Como funciona¶
- Recebe
content_document_iddo post aprovado - Carrega slides PNG do Supabase Storage
- Faz upload de cada slide via Instagram Container API
- Publica o carrossel (POST de mídia múltipla)
- Atualiza
published_posts.instagram_published = true
Don'ts¶
- Token Instagram expira — verificar
instagram_token_expires_atantes de publicar - Não publicar sem slides renderizados — checar
rendering_status = completednocontent_documents
Quando usar¶
- Publicação automática de carrossel/reels finalizados no Instagram do tenant.
- Disparado após pipeline-orchestrator concluir render com sucesso.
Quando NÃO usar¶
- ❌ Para post de blog/seinfeld/newsletter — esses não vão para Instagram.
- ❌ Para preview/draft — só publica conteúdo aprovado.
- ❌ Tenant sem Instagram conectado — falha silenciosa, sem retry agressivo.
Por que funciona assim¶
- Publicação separada do render para permitir review humano (admin) entre render e publish.
- Usa API oficial do Instagram via Facebook Graph (não scraping).
🚫 Don'ts¶
- Não publicar sem confirmação do tenant (modo auto-publish é opcional).
- Não repetir publicação ao reiniciar worker — idempotência via flag
instagram_posted. - Não publicar com legenda > 2200 chars (limite IG) sem truncar.
🪦 Já tentamos¶
- Publicação imediata sem revisão → conteúdo com erro visual indo ao ar. Razão de manter review humano padrão.
🔥 Troubleshooting¶
| Sintoma | Causa provável | Fix |
|---|---|---|
| Post sai sem cover | Slide_renderer falhou em cover_generation | Reexecutar pipeline com fallback temático |
| Erro 429 do Graph API | Rate limit por conta | Backoff exponencial; queue de publicação |
| Legenda cortada | Excedeu 2200 chars | Truncar com … mantendo hashtags no fim |
| Tenant desconectou IG | Token expirado | Refluxo OAuth — notificar tenant |
📚 Referências cruzadas¶
- pipeline-orchestrator — Produtor
- tracking-analytics — Eventos de publicação