Dépannage et guides de jetons
Instructions étape par étape pour connecter LinkedIn, Facebook, Instagram et YouTube à ContentFlows. Chaque plateforme nécessite deux valeurs : un jeton d’accès (qui autorise) et un ID (le compte / la page / le canal de publication). Les deux sont saisies dans votre tableau de bord.
Comment les identifiants sont stockés
Les valeurs des quatre plateformes sont enregistrées sous forme d’un seul blob JSON chiffré dans AWS Secrets Manager à contentflows/tenants/YOUR_TENANT_ID/social-tokens. Les secrets ne sont jamais consignés, ne sont plus jamais affichés après enregistrement, et sont isolés à votre compte. ContentFlows ne stocke jamais votre mot de passe de réseau social.
ContentFlows utilise l’API LinkedIn UGC Posts pour publier en votre nom. Vous avez besoin d’un jeton d’accès avec le scope d’autorisation w_member_social, ainsi que de l’URN du membre du compte sous lequel les publications doivent apparaître.
Champs que ContentFlows vous demandera
LINKEDIN_ACCESS_TOKEN- Jeton d’accès OAuth 2.0 (durée de vie de 60 jours). Commence par AQV… ou similaire.
LINKEDIN_AUTHOR_ID- URN du membre — ressemble à urn:li:person:XXXXXXXXXX ou urn:li:organization:NNNNNN pour une Page d’entreprise.
Prérequis
- Un compte LinkedIn (profil personnel) — les publications seront publiées depuis ce compte
- Un compte développeur LinkedIn gratuit — vous en créez un automatiquement lorsque vous créez une application
Étape par étape
Accédez au LinkedIn Developer Portal
Renseignez les détails de l’application
- App name: peu importe — par ex. « ContentFlows Publisher »
- LinkedIn page: vous devez associer une Page LinkedIn d’entreprise. Si vous n’en avez pas, créez d’abord une Page entreprise de base (gratuit).
- App logo: téléversez n’importe quelle image carrée
Demandez le produit 'Share on LinkedIn'
Ajoutez votre URI de redirection
https://www.linkedin.com/developers/tools/oauth/redirectCliquez sur Update.
Générez le jeton d’accès
w_member_social (et r_liteprofile si disponible), cliquez sur Request access token, puis sur Allow. Copiez le jeton — il ne sera plus affiché. Il s’agit de votre LINKEDIN_ACCESS_TOKEN.Trouvez votre URN de membre
GET https://api.linkedin.com/v2/userinfoLa réponse contient
sub — préfixez-le avec urn:li:person: pour former votre URN. Par exemple, si sub = "ABC123xyz", votre URN est urn:li:person:ABC123xyz. Il s’agit de votre LINKEDIN_AUTHOR_ID.urn:li:organization:COMPANY_PAGE_NUMERIC_ID — l’ID numérique est visible dans l’URL d’administration de la Page.Collez les deux valeurs dans ContentFlows
ContentFlows publie sur une Facebook Page (et non sur un profil personnel). Vous avez besoin d’un Page access token avec l’autorisation pages_manage_posts, ainsi que de l’Page ID numérique.
Champs que ContentFlows vous demandera
FB_PAGE_ACCESS_TOKEN- Jeton d’accès de Page longue durée (60 jours) provenant de Meta for Developers.
FB_PAGE_ID- L’ID numérique de la Page Facebook que vous gérez (par ex. 123456789012345).
Prérequis
- Un compte Facebook qui est Admin d’une Page Facebook
- Si vous n’avez pas encore de Page Facebook, créez-en une sur facebook.com/pages/create (gratuit, prend 2 minutes)
Étape par étape
Ouvrez le portail Meta for Developers
Sélectionnez le type d’application et renseignez les détails
Ajoutez le produit Facebook Login
Obtenez un jeton utilisateur via Graph API Explorer
- Dans la liste déroulante en haut à droite, sélectionnez votre application
- Cliquez sur Generate Access Token
- Dans la fenêtre des autorisations, cochez toutes celles-ci :
pages_manage_posts— requis pour publier des posts (le scope le plus souvent oublié)pages_read_engagementpages_show_listbusiness_managementinstagram_basic— uniquement si vous prévoyez de réutiliser ce jeton pour Instagraminstagram_content_publish— uniquement si vous prévoyez de réutiliser ce jeton pour Instagram
- Cliquez sur Generate Access Token et autorisez
Prolongez le jeton utilisateur en jeton longue durée (60 jours)
Dérivez le jeton d’accès de Page ET l’ID de Page
GET /me/accounts → SubmitDans la réponse JSON, trouvez votre Page. Elle comporte deux champs importants :
access_token→ il s’agit de votreFB_PAGE_ACCESS_TOKEN— comme il est dérivé d’un jeton utilisateur longue durée, ce jeton de Page n’expire jamaisid→ il s’agit de votreFB_PAGE_ID
Collez les deux valeurs dans ContentFlows
Vérifiez que le jeton possède les bons scopes (facultatif mais recommandé)
- Type :
PAGE(et nonUSER— si c’est USER, vous avez copié le mauvais jeton à l’étape 6) - Expires : Never (si une date s’affiche, vous avez sauté l’étape 5 — le jeton utilisateur était encore de courte durée quand vous avez appelé
/me/accounts) - Scopes : doit inclure
pages_manage_posts. S’il manque, vous n’avez pas coché cette case à l’étape 4 — recommencez à partir de l’étape 4.
{"error":{"message":"(#200) Permissions error"}}, le jeton manque presque toujours de pages_manage_posts. Vérifiez-le avec le debugger (étape 8) et régénérez-le si nécessaire.La publication Instagram utilise la Facebook Graph API, donc votre compte Instagram doit être un compte Professionnel (Business ou Creator) lié à une Page Facebook. Les comptes Instagram personnels ne peuvent pas publier via API.
Champs que ContentFlows vous demandera
IG_ACCESS_TOKEN- Facultatif — laissez vide et ContentFlows bascule sur FB_PAGE_ACCESS_TOKEN. Renseignez-le uniquement si vous disposez d’un jeton Instagram dédié.
IG_BUSINESS_ACCOUNT_ID- L’ID du compte Instagram Business lié à votre Page Facebook (par ex. 17841412345678901).
Prérequis
- Un compte Instagram Business ou Creator (pas un compte personnel)
- Ce compte Instagram lié à une Page Facebook que vous gérez
- Une application développeur Meta avec l’autorisation
instagram_content_publish
Convertir en compte Professionnel (si nécessaire)
Changez le type de compte dans l’application Instagram
Liez Instagram à votre Page Facebook
Obtenir l’ID du compte Instagram Business
Ouvrez Graph API Explorer
instagram_basic, instagram_content_publish, pages_read_engagement, pages_manage_postsTrouvez l’ID de votre compte Instagram Business
GET /me/accounts. Trouvez votre Page et copiez son id. Puis exécutez :GET /{page-id}?fields=instagram_business_account(remplacez
{page-id} par l’ID de votre Page). La réponse contient un objet instagram_business_account — copiez son id. Il s’agit de votre IG_BUSINESS_ACCOUNT_ID.Collez les valeurs dans ContentFlows
IG_BUSINESS_ACCOUNT_ID.YouTube
ContentFlows utilise l’API YouTube Data v3 pour générer des métadonnées vidéo (titres, descriptions, balises) pour votre calendrier de contenu. Vous avez besoin d’une clé API depuis Google Cloud Console et de l’ID de votre chaîne.
Champs que ContentFlows vous demandera
YOUTUBE_API_KEY- Clé API Google Cloud avec YouTube Data API v3 activée. Commence par AIza…
YOUTUBE_CHANNEL_ID- L’ID de votre chaîne YouTube (par ex. UCxxxxxxxxxxxxxxxxxxxxxx). Trouvez-le dans YouTube Studio → Settings → Channel → Advanced settings.
Prérequis
- Un compte Google
- Une chaîne YouTube liée à ce compte
- Un projet Google Cloud gratuit (vous en créez un lors de la première étape)
Étape par étape
Créez un projet Google Cloud
Activez l’API YouTube Data v3
Créez une clé API
YOUTUBE_API_KEY.Trouvez l’ID de votre chaîne YouTube
UC. Il s’agit de votre YOUTUBE_CHANNEL_ID.Collez les deux valeurs dans ContentFlows
Domaine d’envoi (DKIM / SPF / DMARC)
Par défaut, les newsletters sont envoyées depuis noreply@contentflows.cc. Authentifier votre propre domaine améliore la délivrabilité (moins d’e-mails dans les spams) car l’adresse From correspond aux signatures DKIM et à votre marque visible.
Prérequis
- Vous possédez un domaine (par ex.
your-business.com). - Vous pouvez créer des enregistrements DNS chez votre registrar (Cloudflare, Route53, GoDaddy, Namecheap, etc.).
Étape par étape
Lancez le processus
your-business.com) → cliquez sur Save & show DNS records.Copiez les 5 enregistrements DNS
- 3 × CNAME (jetons DKIM)
- 1 × TXT à la racine (SPF)
- 1 × TXT à
_dmarc.your-domain.com(DMARC)
Collez-les chez votre fournisseur DNS
abc123._domainkey.your-domain.com).Vérifiez
Terminé
newsletter@your-domain.com comme en-tête From, avec signatures DKIM, validation SPF et alignement DMARC.noreply@contentflows.cc.Importation d’abonnés
Le bouton + Import de l’onglet Newsletter ouvre une fenêtre modale avec trois onglets :
Import CSV
Téléversez un fichier .csv. La ligne d’en-tête est détectée automatiquement (toute colonne dont le nom contient email est traitée comme colonne e-mail ; toute colonne contenant name ou first est traitée comme le nom). Les adresses e-mail invalides sont rejetées ; les doublons sont ignorés. Cochez la case de consentement avant que Import ne soit activé.
Mailchimp
Collez votre clé API Mailchimp (format : abc123...-us21 — la partie après le dernier tiret correspond au data center) et l’Audience ID (tableau de bord Mailchimp Audience → Settings → Audience name and defaults → Audience ID). ContentFlows récupère tous les membres abonnés.
ConvertKit
Collez votre clé API ConvertKit (Settings → Advanced → API Key). Tous les abonnés confirmés sont importés.
Problèmes courants
- Mailchimp 401 Unauthorized — la clé API est incorrecte ou le compte l’a désactivée. Régénérez-la dans Mailchimp → Account → Extras → API keys.
- « No valid email addresses » — le parseur CSV n’a pas détecté de colonne e-mail. Vérifiez qu’il y a bien une ligne d’en-tête et une colonne nommée littéralement
email. - Import finishes instantly with 0 added — chaque ligne était déjà dans votre liste. C’est normal lors de réimportations.
Problèmes courants
Le jeton est invalide ou expiré
Les jetons d’accès expirent. Les jetons LinkedIn durent environ 60 jours. Les jetons de Page Facebook/Instagram n’expirent jamais lorsqu’ils sont dérivés d’un jeton utilisateur longue durée (suivez exactement les étapes de la section Facebook). Générez un nouveau jeton et mettez-le à jour dans Integrations.
Facebook : (#200) Permissions error lors de la publication
De loin la cause la plus fréquente : le jeton de Page ne comporte pas le scope pages_manage_posts. Ce scope est facile à oublier dans la fenêtre des autorisations, car Graph API Explorer ne l’active pas par défaut. Vérifiez votre jeton dans le Access Token Debugger — si pages_manage_posts ne figure pas dans la liste des scopes, régénérez le jeton en repartant de l’étape 4 du guide Facebook et cochez explicitement cette autorisation.
LinkedIn : URN invalide
L’URN du membre doit commencer par urn:li:person: (pour les profils personnels) ou urn:li:organization: (pour les Pages d’entreprise), suivi de l’identifiant unique du compte. Une simple chaîne numérique ou alphanumérique n’est pas une URN valide à elle seule.
Autorisations insuffisantes sur LinkedIn
Votre application LinkedIn n’a pas obtenu l’approbation du produit Share on LinkedIn, ou le jeton a été généré sans w_member_social. Retournez à l’étape 3 du guide LinkedIn, puis régénérez le jeton.
Facebook : mauvais ID de Page
L’ID de Page est le champ numérique id de /me/accounts, et NON le nom d’utilisateur lisible dans l’URL de la Page. Si vous collez le nom d’utilisateur par erreur, les publications échoueront.
Vous devez être administrateur de la Page Facebook
Le compte Facebook qui a généré le jeton n’est pas Administrateur de la Page cible. Demandez à l’admin de la Page de générer le jeton lui-même, ou faites-vous ajouter comme Admin sur facebook.com → Page settings → Page roles.
Instagram : compte non Business ou Creator
Les comptes Instagram personnels ne peuvent pas utiliser l’API de publication de contenu. Suivez les étapes de conversion ci-dessus.
Instagram : compte non lié à une Page Facebook
Votre compte Instagram Professionnel n’est pas connecté à une Page Facebook. Allez dans Instagram Settings → Account → Linked Accounts → Facebook et finalisez la liaison.
YouTube : quota API dépassé
YouTube Data API dispose par défaut d’un quota de 10,000 unités/jour, ce qui est largement suffisant pour les recherches de métadonnées de ContentFlows. Si vous atteignez la limite, il est probable que la même clé API soit utilisée ailleurs — créez une clé dédiée à ContentFlows.
Toujours bloqué ?
Contactez le support avec le message d’erreur et la plateforme que vous connectez. Indiquez le numéro de l’étape où vous êtes bloqué.