ContentFlows/Documentação

Resolução de problemas e guias de tokens

Instruções passo a passo para ligar LinkedIn, Facebook, Instagram e YouTube ao ContentFlows. Cada plataforma requer two values: um token de acesso (o que concede permissão) e um ID (para qual conta / página / canal publicar). Ambos são colados no seu painel.

Como as credenciais são armazenadas

Os valores das quatro plataformas são guardados como um único blob JSON encriptado no AWS Secrets Manager em contentflows/tenants/YOUR_TENANT_ID/social-tokens. Os segredos nunca são registados, nunca voltam a ser mostrados depois de guardados e ficam isolados na sua conta. O ContentFlows nunca armazena a sua palavra-passe das redes sociais.


LinkedIn

O ContentFlows usa a LinkedIn UGC Posts API para publicar em seu nome. Precisa de um token de acesso com o âmbito de permissão w_member_social, além do member URN da conta sob a qual as publicações devem aparecer.

Campos que o ContentFlows lhe vai pedir

LINKEDIN_ACCESS_TOKEN
Token de acesso OAuth 2.0 (duração de 60 days). Começa por AQV… ou semelhante.
LINKEDIN_AUTHOR_ID
Member URN — parece-se com urn:li:person:XXXXXXXXXX ou urn:li:organization:NNNNNN para uma Company Page.

Pré-requisitos

  • Uma conta LinkedIn (perfil pessoal) — as publicações serão feitas a partir desta conta
  • Uma conta de programador do LinkedIn gratuita — cria uma automaticamente quando cria uma app

Passo a passo

1

Vá ao LinkedIn Developer Portal

Abra linkedin.com/developers/apps e inicie sessão. Clique em Create app.
2

Preencha os detalhes da app

  • App name: qualquer coisa — por exemplo, “ContentFlows Publisher”
  • LinkedIn page: tem de associar uma LinkedIn Company Page. Se não tiver uma, crie primeiro uma página de empresa básica (gratuita).
  • App logo: carregue qualquer imagem quadrada
Clique em Create app.
3

Solicite o produto 'Share on LinkedIn'

Na página da app, clique no separador Products. Encontre Share on LinkedIn e clique em Request access. Normalmente é aprovado de imediato.
4

Adicione o seu redirect URI

Vá ao separador Auth. Em OAuth 2.0 settings, adicione este URL de redirecionamento:
https://www.linkedin.com/developers/tools/oauth/redirect
Clique em Update.
5

Gere o token de acesso

Vá a linkedin.com/developers/tools/oauth/token-generator. Selecione a sua app, assinale w_member_social (e r_liteprofile se disponível), clique em Request access token, clique em Allow. Copie o token — não será mostrado novamente. Este é o seu LINKEDIN_ACCESS_TOKEN.
6

Encontre o seu Member URN

Na mesma ferramenta de token-generator, use o testador de API incluído:
GET https://api.linkedin.com/v2/userinfo
A resposta contém sub — acrescente-lhe o prefixo urn:li:person: para formar o seu URN. Por exemplo, se sub = "ABC123xyz", o seu URN é urn:li:person:ABC123xyz. Este é o seu LINKEDIN_AUTHOR_ID.
Dica: Para publicar a partir de uma LinkedIn Company Page em vez do seu perfil pessoal, use urn:li:organization:COMPANY_PAGE_NUMERIC_ID — o ID numérico é visível no URL de administração da Page.
7

Cole ambos os valores no ContentFlows

No seu painel, vá a Integrations → LinkedIn. Cole o token de acesso no campo Access token e o URN no campo Member URN, depois clique em Save.
Nota: Os tokens de acesso do LinkedIn expiram após 60 days. Repita os passos 5 e 7 de dois em dois months (o URN nunca muda). Defina um lembrete no calendário.

Facebook

O ContentFlows publica numa Facebook Page (não num perfil pessoal). Precisa de um Page access token com permissão pages_manage_posts, além do Page ID numérico.

Campos que o ContentFlows lhe vai pedir

FB_PAGE_ACCESS_TOKEN
Token de acesso de Page de longa duração (60 days) da Meta for Developers.
FB_PAGE_ID
O ID numérico da Facebook Page que gere (por exemplo, 123456789012345).

Pré-requisitos

  • Uma conta Facebook que seja Admin de uma Facebook Page
  • Se ainda não tiver uma Facebook Page, crie uma em facebook.com/pages/create (gratuito, demora 2 minutes)

Passo a passo

1

Abra o portal Meta for Developers

Vá a developers.facebook.com/apps e inicie sessão. Clique em Create App.
2

Selecione o tipo de app e preencha os detalhes

Escolha Business como tipo de app. Preencha o nome da app, o email de contacto e clique em Create App.
3

Adicione o produto Facebook Login

No painel, encontre Facebook Login na lista de produtos e clique em Set up. Não é necessária qualquer configuração extra.
4

Obtenha um token de utilizador no Graph API Explorer

Abra o Graph API Explorer:
  • No menu pendente no canto superior direito, selecione a sua app
  • Clique em Generate Access Token
  • Na janela de permissões, assinale todas estas:
    • pages_manage_postsnecessário para publicar posts (o âmbito em falta mais comum)
    • pages_read_engagement
    • pages_show_list
    • business_management
    • instagram_basic — apenas se tenciona reutilizar este token para o Instagram
    • instagram_content_publish — apenas se tenciona reutilizar este token para o Instagram
  • Clique em Generate Access Token e autorize
Isto dá-lhe um User access token de curta duração (válido ~2 hours). Os passos 5–6 convertem-no num token de acesso Page que nunca expira.
5

Estenda o token de utilizador para longa duração (60 days)

Cole o token de utilizador no Access Token Debugger, clique em Debug e, no fundo, clique em Extend Access Token. Obtém um novo token de utilizador válido por ~60 days. Use este token estendido no passo seguinte.
6

Derive o token de acesso da Page E o Page ID

De volta ao Graph API Explorer, cole o token de utilizador de longa duração do passo 5 no campo Access Token e depois execute:
GET /me/accountsSubmeter
Na resposta JSON, encontre a sua Page. Tem dois campos importantes:
  • access_token → este é o seu FB_PAGE_ACCESS_TOKEN — porque o derivou de um token de utilizador de longa duração, este token de Page nunca expira
  • id → este é o seu FB_PAGE_ID
Copie ambos os valores.
7

Cole ambos os valores no ContentFlows

No seu painel, vá a Integrations → Facebook. Cole o token da Page em Page access token e o ID numérico da Page em Page ID, depois clique em Save.
8

Verifique se o token tem os âmbitos corretos (opcional mas recomendado)

Cole o seu novo token de Page no Access Token Debugger e verifique:
  • Type: PAGE (não USER — se disser USER, copiou o token errado no passo 6)
  • Expires: Never (se mostrar uma data, saltou o passo 5 — o token de utilizador ainda era de curta duração quando chamou /me/accounts)
  • Scopes: tem de incluir pages_manage_posts. Se estiver em falta, não assinalou essa caixa no passo 4 — reinicie a partir do passo 4.
Dica: Causa comum de 403: Se as suas publicações agendadas falharem com {"error":{"message":"(#200) Permissions error"}}, o token quase sempre não tem o âmbito pages_manage_posts. Verifique com o debugger (passo 8) e regenere se necessário.

Instagram

A publicação no Instagram usa a Facebook Graph API, pelo que a sua conta Instagram tem de ser uma Professional account (Business ou Creator) ligada a uma Facebook Page. Contas pessoais do Instagram não podem publicar via API.

Campos que o ContentFlows lhe vai pedir

IG_ACCESS_TOKEN
Opcional — deixe em branco e o ContentFlows recorre ao FB_PAGE_ACCESS_TOKEN. Preencha apenas se tiver um token dedicado do Instagram.
IG_BUSINESS_ACCOUNT_ID
O Instagram Business Account ID ligado à sua Facebook Page (por exemplo, 17841412345678901).

Pré-requisitos

  • Uma conta Instagram Business ou Creator (não uma conta pessoal)
  • Essa conta Instagram ligada a uma Facebook Page que gere
  • Uma app de programador da Meta com permissão instagram_content_publish

Converter para uma Professional account (se necessário)

1

Mude o tipo de conta na aplicação Instagram

No seu telemóvel, vá ao seu perfil do Instagram → toque no menu ☰ → SettingsAccountSwitch to Professional Account. Escolha Business ou Creator.
2

Ligue o Instagram à sua Facebook Page

Ainda nas definições do Instagram, vá a AccountLinked AccountsFacebook. Inicie sessão e selecione a sua Page.

Obter o Instagram Business Account ID

3

Abra o Graph API Explorer

Vá a developers.facebook.com/tools/explorer. Selecione a sua app e gere um token com estas permissões:
instagram_basic, instagram_content_publish, pages_read_engagement, pages_manage_posts
4

Encontre o seu Instagram Business Account ID

Execute GET /me/accounts. Encontre a sua Page e copie o respetivo id. Depois execute:
GET /{page-id}?fields=instagram_business_account
(substitua {page-id} pelo ID da sua Page). A resposta contém um objeto instagram_business_account — copie o respetivo id. Este é o seu IG_BUSINESS_ACCOUNT_ID.
5

Cole os valores no ContentFlows

No seu painel, vá a Integrations → Instagram. Cole o IG Business Account ID em Business Account ID. Deixe o campo Access token em branco para reutilizar o token da Facebook Page que já configurou — esse é o caminho mais simples e o que a maioria das pessoas faz. Clique em Save.
Nota: Se já guardou o Facebook, o token de acesso do Instagram passa por predefinição a ser o token da Page do Facebook. Só precisa de fornecer IG_BUSINESS_ACCOUNT_ID.

YouTube

O ContentFlows usa a YouTube Data API v3 para gerar metadados de vídeo (títulos, descrições, tags) para o seu calendário de conteúdo. Precisa de uma API key da Google Cloud Console e do ID do seu canal.

Campos que o ContentFlows lhe vai pedir

YOUTUBE_API_KEY
API key da Google Cloud com a YouTube Data API v3 ativada. Começa por AIza…
YOUTUBE_CHANNEL_ID
O ID do seu canal YouTube (por exemplo, UCxxxxxxxxxxxxxxxxxxxxxx). Encontre-o em YouTube Studio → Settings → Channel → Advanced settings.

Pré-requisitos

  • Uma conta Google
  • Um canal YouTube ligado a essa conta
  • Um projeto Google Cloud gratuito (cria um durante o primeiro passo)

Passo a passo

1

Crie um projeto Google Cloud

Vá a console.cloud.google.com/projectcreate, dê ao seu projeto qualquer nome (por exemplo, “ContentFlows”) e clique em Create.
2

Ative a YouTube Data API v3

Com o novo projeto selecionado, vá a YouTube Data API v3 e clique em Enable.
3

Crie uma API key

Navegue para APIs & Services → Credentials. Clique em + Create credentials → API key. Copie a chave — esta é a sua YOUTUBE_API_KEY.
Dica: Clique em Restrict key e limite-a à YouTube Data API v3 por segurança.
4

Encontre o seu YouTube Channel ID

Vá a YouTube StudioSettings (ícone de engrenagem no canto inferior esquerdo) → ChannelAdvanced settings. O seu Channel ID está listado ali — copie-o. Começa com UC. Este é o seu YOUTUBE_CHANNEL_ID.
5

Cole ambos os valores no ContentFlows

No seu painel, vá a Integrations → YouTube. Cole a API key em API key e o Channel ID em Channel ID, depois clique em Save.
Nota: A API key é apenas leitura — gera metadados mas NÃO carrega vídeos. O carregamento ainda requer OAuth, o que hoje não faz parte do fluxo de onboarding.


Domínio de envio (DKIM / SPF / DMARC)

Por predefinição, as newsletters são enviadas de noreply@contentflows.cc. Autenticar o seu próprio domínio melhora a entregabilidade (menos mensagens na pasta de spam) porque o endereço From corresponde às assinaturas DKIM e à sua marca visível.

Pré-requisitos

  • É proprietário de um domínio (por exemplo, your-business.com).
  • Pode criar registos DNS no seu registrador (Cloudflare, Route53, GoDaddy, Namecheap, etc.).

Passo a passo

1

Inicie o fluxo

No seu painel, abra Brand → encontre o cartão Sending domain na parte inferior → escreva o seu domínio (por exemplo, your-business.com) → clique em Save & show DNS records.
2

Copie os 5 registos DNS

O cartão mostra agora 5 registos:
  • 3 × CNAME (tokens DKIM)
  • 1 × TXT na raiz (SPF)
  • 1 × TXT em _dmarc.your-domain.com (DMARC)
Use o botão Copy ao lado de cada linha para os obter um a um.
3

Cole no seu fornecedor de DNS

Inicie sessão no seu fornecedor de DNS, crie cada registo com o host/nome e valor exatos como mostrados. Para CNAMEs, não adicione o seu domínio como sufixo — o host mostrado é o nome completo (por exemplo, abc123._domainkey.your-domain.com).
Dica: Utilizadores do Cloudflare: desativem a nuvem laranja (proxy) nos CNAMEs DKIM — o SES precisa do registo em bruto.
4

Verifique

De volta ao painel, clique em I added the records — Verify. O cartão consulta o SES a cada 15 seconds durante até 10 minutes. A propagação global do DNS costuma demorar menos de 2 minutes, mas alguns fornecedores precisam de mais tempo.
5

Concluído

Assim que estiver verificado, todas as newsletters do seu tenant usarão newsletter@your-domain.com como cabeçalho From, com assinaturas DKIM, SPF aprovado e alinhamento DMARC.
Nota: Pode remover o domínio a qualquer momento a partir do mesmo cartão — os emails passam então a usar o remetente partilhado noreply@contentflows.cc.

Importar subscritores

O botão + Import do separador Newsletter abre um modal com três separadores:

Carregamento CSV

Carregue um ficheiro .csv. A linha de cabeçalho é detetada automaticamente (qualquer coluna cujo nome contenha email é tratada como coluna de email; qualquer coluna com name ou first é tratada como nome). Endereços de email inválidos são rejeitados; duplicados são ignorados. Marque a caixa de consentimento antes de o Import ser ativado.

Mailchimp

Cole a sua Mailchimp API key (formato: abc123...-us21 — a parte depois do último hífen é o data center) e o Audience ID (painel do Mailchimp Audience → Settings → Audience name and defaults → Audience ID). O ContentFlows obtém todos os membros subscritos.

ConvertKit

Cole a sua ConvertKit API key (Settings → Advanced → API Key). Todos os subscritores confirmados são importados.

Problemas comuns

  • Mailchimp 401 Unauthorized — a API key está errada ou a conta desativou-a. Regere em Mailchimp → Account → Extras → API keys.
  • “No valid email addresses” — o analisador CSV não detetou uma coluna de email. Confirme que existe uma linha de cabeçalho e uma coluna chamada literalmente email.
  • A importação termina instantaneamente com 0 adicionados — todas as linhas já estavam na sua lista. Isso é normal em repetições.

Problemas comuns

O token é inválido ou expirou

Os tokens de acesso expiram. Os tokens do LinkedIn duram ~60 days. Os tokens de Page do Facebook/Instagram nunca expiram quando derivados de um token de utilizador de longa duração (siga exatamente os passos da secção Facebook). Gere um novo token e atualize-o em Integrations.

Facebook: (#200) Permissions error na publicação

De longe, a causa mais comum: o token da Page não tem o âmbito pages_manage_posts. Este âmbito é fácil de falhar na janela de permissões porque o Graph API Explorer não o ativa por predefinição. Verifique o seu token no Access Token Debugger — se pages_manage_posts não estiver na lista de âmbitos, regenere o token a partir do Passo 4 do guia Facebook e marque explicitamente essa permissão.

LinkedIn: URN inválido

O Member URN tem de começar por urn:li:person: (para perfis pessoais) ou urn:li:organization: (para Company Pages) seguido do ID único da conta. Uma cadeia numérica ou alfanumérica simples não é, por si só, uma URN válida.

Permissões insuficientes no LinkedIn

A sua app LinkedIn não tem o produto Share on LinkedIn aprovado, ou o token foi gerado sem w_member_social. Volte ao passo 3 do guia LinkedIn e depois regenere o token.

Facebook: Page ID incorreto

O Page ID é o campo numérico id de /me/accounts, NÃO o nome de utilizador legível no URL da Page. Se colar o nome de utilizador por engano, as publicações falharão.

Tem de ser administrador da Facebook Page

A conta Facebook que gerou o token não é Admin da Page de destino. Peça ao administrador da Page para gerar o token, ou adicione-se como Admin em facebook.com → Page settings → Page roles.

Instagram: não é uma conta Business ou Creator

Contas pessoais do Instagram não podem usar a Content Publishing API. Siga os passos de conversão acima.

Instagram: conta não ligada a uma Facebook Page

A sua conta Instagram Professional não está ligada a uma Facebook Page. Vá a Instagram Settings → Account → Linked Accounts → Facebook e conclua a ligação.

YouTube: quota da API excedida

A YouTube Data API tem uma quota predefinida de 10,000 units/day, o que é mais do que suficiente para pesquisas de metadados do ContentFlows. Se atingir o limite, é provável que a mesma API key esteja a ser usada noutro lugar — crie uma key dedicada para o ContentFlows.


Ainda está com dificuldades?

Contacte o suporte com a mensagem de erro e indique a plataforma que está a ligar. Inclua o número do passo em que ficou bloqueado.

Relacionado