Pipeline completo para ingestão de posts do Instagram com embeddings vetoriais para uso no assistente virtual via RAG.
Instagram Graph API
↓
n8n Workflows
↓
PostgreSQL + pgvector
↓
Gemini Embeddings (768)
↓
Assistente Virtual (RAG)
instagram-import-minha-conta.json- Importação posts da sua containstagram-import-hashtag-arteriafestas.json- Importação por hashtag #arteriafestasinstagram-import-conta-publica-terceiro.json- Importação de conta pública de terceirosinstagram-import-structured-parser.json- Importação com parser estruturado avançadoWhatsApp Chat IA - Arteria Festas.json- Workflow existente do assistente
sql-instagram-posts-schema.sql- Schema completo da tabelainstagram_posts
- n8n (self-hosted ou cloud)
- PostgreSQL com extensão
pgvector - Instagram Graph API credentials
- Google Gemini API key
# No n8n, instalar via UI:
# Community Nodes → @mookielianhd/n8n-nodes-instagram- PostgreSQL: mesma credencial usada no workflow existente (
nNWOoSo66DYfDpAF) - Google Gemini: mesma credencial usada no workflow existente (
eJJhTvSw2avKW11x) - Instagram OAuth2 API: nova credencial para Graph API (substituir
COLOCAR_ID_CREDENTIAL)
psql -U seu_usuario -d seu_banco -f sql-instagram-posts-schema.sql- No n8n: Import from file
- Selecionar os arquivos JSON
- Ativar os workflows
- IMPORTANTE: Substituir
COLOCAR_ID_CREDENTIALpelo ID real da credencial Instagram
- Agendamento: A cada 4 horas
- Fonte: Seus próprios posts
- Limite: 25 posts por execução
- Agendamento: A cada 6 horas
- Fonte: Posts com hashtag
#arteriafestas - Limite: 25 posts por execução
- Agendamento: A cada 6 horas
- Fonte: Posts de conta pública específica
- Limite: 25 posts por execução
- Configuração: Alterar
NOME_DE_USUARIO_ALVOno node Instagram - Parâmetros:
resource: "IG User",operation: "Get Media"
- Agendamento: A cada 6 horas
- Fonte: Seus próprios posts com parsing avançado
- Limite: 25 posts por execução
- Recursos: Code node para estruturar dados
- Dados Enriquecidos: Métricas, metadados, timestamp de captura
- Parâmetros:
resource: "IG User",operation: "Get Media"+ Code node
Todos os workflows foram atualizados com os parâmetros corretos do nó @mookielianhd/n8n-nodes-instagram:
{
"resource": "IG User", // Antes: "user"
"operation": "Get Media", // Antes: "listMedia"
"node": "me" ou "username", // Antes: "userId"
"limit": 25
}{
"resource": "IG Hashtag", // Antes: "hashtag"
"operation": "Get Media", // Antes: "search"
"hashtag": "arteriafestas",
"limit": 25
}- Tipo:
instagramOAuth2Api - Placeholder:
COLOCAR_ID_CREDENTIAL(substituir pelo ID real) - Scopes necessários:
instagram_basic,pages_show_list,instagram_content_publish,pages_read_engagement
instagram_posts (
id SERIAL PRIMARY KEY,
post_id VARCHAR(255) UNIQUE, -- ID do Instagram
url_post TEXT, -- Link do post
url_imagem TEXT, -- URL da imagem
legenda TEXT, -- Caption/descrição
tipo_conteudo VARCHAR(50), -- IMAGE, CAROUSEL_ALBUM, etc
data_publicacao TIMESTAMP, -- Data do post
conta_origem VARCHAR(100), -- @username da conta
nome_perfil TEXT, -- Nome completo do perfil
embedding VECTOR(768), -- Embedding Gemini
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
)O workflow instagram-import-structured-parser.json utiliza um Code node para enriquecer os dados:
{
"post_id": "id_do_post",
"url_post": "permalink",
"url_imagem": "media_url",
"legenda": "caption",
"tipo_conteudo": "media_type",
"data_publicacao": "timestamp",
"conta_origem": "@username",
"nome_perfil": "Nome completo",
"metricas": {
"likes": 150,
"comentarios": 23
},
"midia": {
"tipo": "IMAGE",
"url": "media_url",
"thumbnail": "thumbnail_url"
},
"metadata": {
"timestamp_captura": "2025-03-28T23:40:00Z",
"fonte": "instagram_graph_api",
"versao_parser": "1.0"
}
}- ✅ Dados consistentes: Formato padronizado para todos os posts
- ✅ Métricas incluídas: Likes e comentários capturados
- ✅ Metadados ricos: Informações de processamento e versão
- ✅ Facilidade de análise: Estrutura otimizada para consultas
- ✅ Rastreabilidade: Timestamp de captura e fonte
O workflow WhatsApp Chat IA - Arteria Festas.json já está configurado para usar a base vetorial através do node Instagram Vector Store.
SELECT post_id, legenda, url_post, conta_origem,
(embedding <=> $1) AS distance
FROM instagram_posts
WHERE embedding IS NOT NULL
ORDER BY embedding <=> $1
LIMIT 5;SELECT post_id, legenda, url_post, data_publicacao
FROM instagram_posts
WHERE conta_origem = '@usuario_especifico'
ORDER BY data_publicacao DESC
LIMIT 10;SELECT
COUNT(*) as total_posts,
COUNT(embedding) as posts_com_embedding,
MAX(data_publicacao) as post_mais_recente
FROM instagram_posts;SELECT post_id, legenda, data_publicacao
FROM instagram_posts
WHERE embedding IS NULL
ORDER BY data_publicacao DESC;- Índice vetorial: IVFFlat com 100 lists
- Busca semântica: O(log n) com cosine similarity
- Batch processing: 5 posts por lote para evitar rate limits
- Tokens armazenados como credenciais no n8n
- UPSERT idempotente (sem duplicações)
- Processamento em lotes controlado
- Reduzir
limitebatchSizenos workflows - Aumentar intervalo de agendamento
- Verificar quota da API Gemini
- Conferir credenciais no n8n
- Recriar índice vetorial:
REINDEX INDEX ix_instagram_posts_embedding_ivfflat; - Aumentar
listsno índice para mais dados
- OCR de imagens para extrair texto
- Extração de preços e vincular com
produtos_baloes - Webhooks para ingestão em tempo real
- Dashboards de monitoramento
- Múltiplas contas para monitoramento concorrente
- Análise de engajamento com métricas da API
- Parser avançado com processamento de linguagem natural
- Alertas para posts com alto engajamento
- Instalar community node do Instagram
- Configurar credenciais Instagram API
- Executar script SQL da tabela (com novos campos)
- Importar workflows (4 workflows)
- Configurar
NOME_DE_USUARIO_ALVOno workflow de terceiros - Substituir
COLOCAR_ID_CREDENTIALpelo ID real da credencial Instagram - Testar execução manual
- Ativar agendamentos
- Verificar integração com assistente existente
Status: Pronto para produção 🎉