Tutorial completo para publicação automatizada em 9 redes sociais via…
INEMA
dublado
Aqui vão alguns hacks para deixar esse fluxo de autopostagem muito mais robusto, rápido e seguro no n8n com Botato e Google Sheets:
1. Postagens invisíveis para teste⌗
- Ative nas plataformas que suportam “não listado” (YouTube) ou “somente eu” (Facebook/Instagram) para testar o fluxo sem expor ao público.
- Depois, basta editar para público se estiver tudo certo.
2. Redução de bloqueio por API⌗
- Cadastre contas secundárias no Botato para testes e evite atingir limites ou levar “shadowban” por excesso de postagens de teste.
- Para perfis comerciais, ative autenticação persistente (tokens longos) para não precisar refazer login.
3. Controle por bandeiras (flags)⌗
- Use colunas to_[rede] na planilha para decidir dinamicamente onde publicar sem alterar o workflow.
- Ex.:
to_instagram=TRUEeto_tiktok=FALSEevita rodar nós desnecessários.
4. Encadeamento com criação de conteúdo⌗
- Antes da publicação, insira um subfluxo que gera título, descrição, hashtags e até thumbnails usando ChatGPT ou outro modelo.
- Isso permite rodar em modo 100% piloto automático: conteúdo + publicação.
5. Segurança contra duplicatas⌗
- No início do fluxo, marque a linha como “in progress” antes de postar.
- Só mude para “posted” se todas as redes marcadas com TRUE retornarem sucesso (ou se aceitar sucesso parcial).
6. Log inteligente⌗
-
Grave no Google Sheets não só as URLs publicadas, mas também:
-
Data/hora exata
- Status de cada rede
- Mensagem de erro, se houver
- Isso facilita debug e prova de publicação.
7. Multiposts no mesmo dia sem travar a API⌗
- Use
SplitInBatchespara enviar um post por execução a cada X minutos, evitando disparar todos de uma vez e sobrecarregar a API das redes.
8. Otimização de mídia antes do upload⌗
- Passe a mídia por um nó de otimização (por exemplo, FFmpeg ou TinyPNG API) antes de enviar para o Botato, reduzindo tamanho e acelerando upload.
- Isso também diminui falhas por timeout.
9. Postagens condicionais baseadas em datas⌗
- Adicione coluna
scheduled_atna planilha e publique apenas se a data/hora for menor ou igual ao momento atual. - Permite agendar semanas ou meses à frente sem mexer no fluxo.
10. Failover de publicação⌗
- Se uma rede falhar, repita a tentativa automaticamente 1 ou 2 vezes antes de marcar como erro.
- Use o nó
Error Triggerpara reprocessar apenas as redes que falharam.
imagem e vídeo? Sim, basta ajustar o tipo da mídia no Upload Media e nos nós de rede. Dá para usar só URL pública sem Drive? Sim, preencha media_source=url e media_url com link público. Como evitar postar 6 de uma vez? Use Lookup para trazer só a primeira linha com ready_to_post e faça o Update imediato dela para posted ao final. Como pausar uma rede específica? Deixe to_[rede]=FALSE ou desative o nó (tecla D). E se uma rede falhar e outra funcionar? Com Continue On Fail, você atualiza posted_urls com as bem-sucedidas e registra erro parcial em error_message.
}} Privacidade/comentários/etc.: conforme opções do nó Conta: selecione a conta conectada – Ative “Continue On Fail” para cada nó de rede (boa prática). – Controle de execução por flag: Use um If antes de cada nó ou, no próprio nó, ative somente quando o respectivo to_[rede] for TRUE. Ex.: If Instagram: condição {{ \$json.to_instagram === true }}
Observações rápidas por rede: – Instagram: Reels/Feed variam; confira limites no nó. – TikTok: título/legenda e “Is AI generated?” quando disponível. – X: confira limites de caracteres e se é vídeo ou imagem. – LinkedIn: escolha perfil ou página. – Facebook: perfil/página; algumas exigem página. – Threads: similar a Instagram via Botato. – Bluesky: texto + mídia. – Pinterest: informe pinterest_board_id. – YouTube: título obrigatório, descrição, tags opcionais.
-
Merge → coletar resultados – Una as saídas dos nós de rede (por exemplo, com Merge em multiplex ou use um Function para agregar). – Monte um objeto posted_urls contendo as URLs retornadas pelos nós que tiveram sucesso. – Exemplo em Function simples: const r = []; for (const k of Object.keys(items[0].json)) {} // Mais simples: faça vários Merge e um Function final: const urls = []; if (\$node['Post Instagram'].json?.url) urls.push({platform:'instagram', url:\$node['Post Instagram'].json.url}); if (\$node['Post TikTok'].json?.url) urls.push({platform:'tiktok', url:\$node['Post TikTok'].json.url}); // repita para as demais… return [{ json: { ...\$json, posted_urls: JSON.stringify(urls) } }];
-
Google Sheets → Update row (sucesso) – Identifique a linha pelo id (ou pela Row ID se você trouxe essa info). – status: posted – posted_urls: {{ \$json.posted_urls }} – error_message: vazio – posted_at: agora – Dica: se não tiver Row ID, use Lookup para achar a row e depois Update com chave.
-
Error Handling Opção A: marque “Continue On Fail” nos nós de rede e processe mesmo assim; se todas falharem, caia no Update de erro. Opção B: crie um fluxo secundário com Error Trigger para registrar falhas. Em ambos os casos, faça um Update row quando algo der errado: – status: error – error_message: {{ \$json.error.message || \$json.error }}
Agendamento e múltiplos posts
- Um por vez: Cron 06:00 chama o fluxo e posta a primeira linha com status ready_to_post.
- Vários por manhã: crie 6 gatilhos (06:00, 06:05, 06:10…) ou use SplitInBatches após o Lookup e rode o mesmo bloco 6 vezes.
- Evite duplicatas: sempre atualize a linha para posted ao final.
Como pegar o Pinterest Board ID
- Abra o board no Pinterest
- Clique com o botão direito → Inspect → Network
- Atualize a página, filtre por boards
- Clique na primeira requisição e copie o id do objeto data
- Cole na coluna pinterest_board_id da planilha
Boas práticas e limites
- Respeite limites de duração/resolução por plataforma; se o nó tiver validação, ative-a.
- Padronize títulos e legendas; crie uma regra de hashtags no Function antes dos nós de rede.
- Grave URLs retornadas e use isso para auditoria.
- Teste desativando redes com a tecla D no n8n e ativando aos poucos.
- Use colunas to_[rede] para controlar facilmente onde publicar por linha.
Snippets úteis para colar
Function extrair fileId do Drive: const url = \$json.gdrive_url || ''; const m = url.match(/[-\w]{25,}/); return { json: { ...\$json, driveId: m ? m[0] : null } };
Function montar hashtags simples: const caption = \$json.caption || ''; const tags = ['#automacao', '#ia', '#marketing'].join(' '); return { json: { ...\$json, caption: caption + ' ' + tags } };
Checklist de teste rápido
- Conectar 1 rede no Botato (ex.: Instagram) e pegar API Key
- Preencher 1 linha na planilha com status ready_to_post e to_instagram = TRUE
- Executar Manual → conferir upload e criação do post
- Verificar se status virou posted e se posted_urls foi preenchido
- Adicionar demais redes uma a uma, validando cada nó
Perguntas comuns com respostas curtas Posso postar
Aqui vai um passo a passo direto para replicar o fluxo no n8n que publica em 9 redes via Botato, usando Google Sheets como “banco” e com opções para Drive/URL.
Objetivo Automatizar postagens em Instagram, TikTok, X, LinkedIn, Facebook, Threads, Bluesky, Pinterest e YouTube a partir de uma única linha na planilha.
Pré-requisitos
- n8n atualizado com nós verificados da comunidade habilitados
- Conta no Botato
- Logins das redes sociais feitos dentro do Botato
- Chave de API do Botato
- Planilha no Google Sheets no padrão abaixo
- (Opcional) Mídias no Google Drive
Estrutura da planilha (aba Posts) Colunas sugeridas: id title caption media_source (drive | url | binary) gdrive_url (se usar Drive; link compartilhável) media_url (se usar URL pública) to_instagram (TRUE/FALSE) to_tiktok (TRUE/FALSE) to_x (TRUE/FALSE) to_linkedin (TRUE/FALSE) to_facebook (TRUE/FALSE) to_threads (TRUE/FALSE) to_bluesky (TRUE/FALSE) to_pinterest (TRUE/FALSE) to_youtube (TRUE/FALSE) pinterest_board_id (opcional) status (ready_to_post | posted | error) posted_urls (texto; pode guardar JSON) error_message scheduled_at (opcional; data/hora) created_at (opcional)
Exemplo de linha: 1 | Vid: Glass Apple ASMR | Experimento de som com vidro | drive | https://drive.google.com/file/d/FILE_ID/view | | TRUE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | ready_to_post | | | | 2025-08-13 06:00
Configuração no Botato
- Entre em Settings → Accounts e conecte cada rede social.
- Em Settings → API, copie sua API Key.
- Dica: para Pinterest, pegue o Board ID inspecionando a rede (Network → filtrar por boards → copiar o id). Guarde na coluna pinterest_board_id.
Configuração no n8n
- Habilite Verified Community Nodes no Admin do n8n.
- Crie credenciais: – Botato API: cole a API Key – Google Sheets: OAuth padrão – (Opcional) Google Drive
- Instale/ative o nó do Botato verificado na comunidade.
Montagem do workflow no n8n Ordem de nós e configurações principais:
-
Trigger – Use Manual para testes e depois Cron (ex.: todos os dias 06:00). – Se quiser vários posts por manhã, crie vários Cron a cada 5 min ou use SplitInBatches.
-
Google Sheets → Lookup row – Spreadsheet: a sua planilha – Sheet: Posts – Column: status – Value: ready_to_post – Return All: desativado (pegar só a primeira) – Caso venha vazio, pare o fluxo com um If no próximo passo.
-
If → tem_linha? – Condição: existe {{ \$json.id }} – Se não existir, encerrar.
-
Function → preparar_mídia – Objetivo: detectar fonte e extrair fileId quando for Drive. – Código: const src = \$json.media_source || ''; let driveId = null; if (src === 'drive' && \$json.gdrive_url) { const m = String(\$json.gdrive_url).match(/[-\w]{25,}/); driveId = m ? m[0] : null; } return { json: { ...\$json, driveId } };
-
Botato → Upload Media – Credenciais: suas credenciais do Botato – Ação: Upload media – Se media_source = drive: • Source: Google Drive • File ID: {{ \$json.driveId }} – Se media_source = url: • Source: URL • URL: {{ \$json.media_url }} – Se media_source = binary: • Source: Binary • Binary Property: data (ou o nome que você definiu) – Saída esperada: um campo com a URL/ID da mídia no Botato. Guarde como {{ \$json.botato_media_url }} ou similar conforme o nó retornar.
-
Set → montar_conteúdo – Crie campos padronizados para reutilizar: post_title: {{ \$json.title }} post_caption: {{ \$json.caption }} botato_media: pegue da saída do Upload Media, ex.: {{ \$json.mediaUrl \$json.url \$json.botato_media_url }} flags por rede: copie dos to_instagram, to_tiktok etc.
-
Nós de postagem por plataforma (1 nó Botato por rede) – Para cada rede, use Botato → Create Post. – Mapeie: Title: {{ \$json.post_title }} (quando houver) Caption/Description: {{ \$json.post_caption }} Media: {{ \$json.botato_media }}
Como montar um fluxo no n8n que publica automaticamente em 9 redes sociais (Instagram, TikTok, X/Twitter, LinkedIn, Facebook, Threads, Bluesky, Pinterest e YouTube) usando o serviço Botato e um modelo pronto.
O funcionamento é simples: você prepara o conteúdo e a legenda, conecta suas contas no Botato, obtém a chave de API e configura nos nós do n8n. O fluxo lê os dados de uma planilha no Google Sheets (mídia, título, legenda, status), faz o upload para o Botato e posta nas redes selecionadas.
Destaques:
- Uso do node verificado do Botato no n8n, dispensando requisições HTTP manuais e parâmetros complexos.
- Cada rede social tem ajustes próprios (privacidade, comentários, marcação como conteúdo de IA etc.).
- O Google Sheets serve como banco de posts, controlando o status (“ready to post”, “posted” ou “error”).
- Integração opcional com Google Drive para buscar arquivos pelo ID e enviá-los ao Botato.
- Para Pinterest, é necessário pegar o Board ID inspecionando o site.
- O fluxo pode ser agendado para rodar em horários específicos ou integrado a outro que crie o conteúdo automaticamente.
- Modelo e guia de configuração são fornecidos gratuitamente, incluindo JSON do n8n e planilha pronta para cópia.
Fecha e abre o workflow novamente
instala o no da blotato
ap54 - Publique 9 Redes Sociais
1