ContentFlows/Documentation

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.


LinkedIn

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

1

Accédez au LinkedIn Developer Portal

Ouvrez linkedin.com/developers/apps et connectez-vous. Cliquez sur Create app.
2

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
Cliquez sur Create app.
3

Demandez le produit 'Share on LinkedIn'

Sur la page de l’application, cliquez sur l’onglet Products. Trouvez Share on LinkedIn et cliquez sur Request access. L’approbation est généralement instantanée.
4

Ajoutez votre URI de redirection

Accédez à l’onglet Auth. Sous OAuth 2.0 settings, ajoutez cette URL de redirection :
https://www.linkedin.com/developers/tools/oauth/redirect
Cliquez sur Update.
5

Générez le jeton d’accès

Rendez-vous sur linkedin.com/developers/tools/oauth/token-generator. Sélectionnez votre application, cochez 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.
6

Trouvez votre URN de membre

Dans le même outil token-generator, utilisez le testeur d’API intégré :
GET https://api.linkedin.com/v2/userinfo
La 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.
Astuce : Pour publier depuis une Page LinkedIn d’entreprise plutôt que depuis votre profil personnel, utilisez à la place urn:li:organization:COMPANY_PAGE_NUMERIC_ID — l’ID numérique est visible dans l’URL d’administration de la Page.
7

Collez les deux valeurs dans ContentFlows

Dans votre tableau de bord, allez dans Integrations → LinkedIn. Collez le jeton d’accès dans le champ Access token et l’URN dans le champ Member URN, puis cliquez sur Save.
Remarque : Les jetons d’accès LinkedIn expirent après 60 days. Répétez les étapes 5 et 7 tous les deux mois (l’URN ne change jamais). Programmez un rappel dans votre agenda.

Facebook

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

1

Ouvrez le portail Meta for Developers

Rendez-vous sur developers.facebook.com/apps et connectez-vous. Cliquez sur Create App.
2

Sélectionnez le type d’application et renseignez les détails

Choisissez Business comme type d’application. Renseignez le nom de l’application, l’e-mail de contact, puis cliquez sur Create App.
3

Ajoutez le produit Facebook Login

Dans le tableau de bord, trouvez Facebook Login dans la liste des produits et cliquez sur Set up. Aucune configuration supplémentaire n’est nécessaire.
4

Obtenez un jeton utilisateur via Graph API Explorer

Ouvrez le 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_postsrequis pour publier des posts (le scope le plus souvent oublié)
    • pages_read_engagement
    • pages_show_list
    • business_management
    • instagram_basic — uniquement si vous prévoyez de réutiliser ce jeton pour Instagram
    • instagram_content_publish — uniquement si vous prévoyez de réutiliser ce jeton pour Instagram
  • Cliquez sur Generate Access Token et autorisez
Cela vous donne un User access token de courte durée (valide environ 2 heures). Les étapes 5–6 le convertissent en jeton d’accès Page sans expiration.
5

Prolongez le jeton utilisateur en jeton longue durée (60 jours)

Collez le jeton utilisateur dans le Access Token Debugger, cliquez sur Debug, puis cliquez sur Extend Access Token en bas. Vous obtenez un nouveau jeton utilisateur valide environ 60 jours. Utilisez ce jeton prolongé à l’étape suivante.
6

Dérivez le jeton d’accès de Page ET l’ID de Page

Retournez dans Graph API Explorer, collez le jeton utilisateur longue durée de l’étape 5 dans le champ Access Token, puis exécutez :
GET /me/accountsSubmit
Dans la réponse JSON, trouvez votre Page. Elle comporte deux champs importants :
  • access_token → il s’agit de votre FB_PAGE_ACCESS_TOKEN — comme il est dérivé d’un jeton utilisateur longue durée, ce jeton de Page n’expire jamais
  • id → il s’agit de votre FB_PAGE_ID
Copiez les deux valeurs.
7

Collez les deux valeurs dans ContentFlows

Dans votre tableau de bord, allez dans Integrations → Facebook. Collez le jeton de Page dans Page access token et l’ID numérique de la Page dans Page ID, puis cliquez sur Save.
8

Vérifiez que le jeton possède les bons scopes (facultatif mais recommandé)

Collez votre nouveau jeton de Page dans le Access Token Debugger et vérifiez :
  • Type : PAGE (et non USER — 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.
Astuce : Cause la plus fréquente du 403 : Si vos publications planifiées échouent avec {"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.

Instagram

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)

1

Changez le type de compte dans l’application Instagram

Sur votre téléphone, allez sur votre profil Instagram → appuyez sur le menu ☰ → SettingsAccountSwitch to Professional Account. Choisissez Business ou Creator.
2

Liez Instagram à votre Page Facebook

Toujours dans les paramètres Instagram, allez dans AccountLinked AccountsFacebook. Connectez-vous et sélectionnez votre Page.

Obtenir l’ID du compte Instagram Business

3

Ouvrez Graph API Explorer

Rendez-vous sur developers.facebook.com/tools/explorer. Sélectionnez votre application et générez un jeton avec ces autorisations :
instagram_basic, instagram_content_publish, pages_read_engagement, pages_manage_posts
4

Trouvez l’ID de votre compte Instagram Business

Exécutez 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.
5

Collez les valeurs dans ContentFlows

Dans votre tableau de bord, allez dans Integrations → Instagram. Collez l’ID du compte IG Business dans Business Account ID. Laissez le champ Access token vide pour réutiliser le jeton de la Page Facebook déjà configuré — c’est l’option la plus simple et celle que la plupart des gens utilisent. Cliquez sur Save.
Remarque : Si vous avez déjà enregistré Facebook, le jeton d’accès d’Instagram utilise par défaut le jeton de la Page FB. Vous n’avez qu’à fournir 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

1

Créez un projet Google Cloud

Rendez-vous sur console.cloud.google.com/projectcreate, donnez un nom à votre projet (par ex. « ContentFlows »), puis cliquez sur Create.
2

Activez l’API YouTube Data v3

Une fois le nouveau projet sélectionné, allez sur YouTube Data API v3 et cliquez sur Enable.
3

Créez une clé API

Accédez à APIs & Services → Credentials. Cliquez sur + Create credentials → API key. Copiez la clé — il s’agit de votre YOUTUBE_API_KEY.
Astuce : Cliquez sur Restrict key et limitez-la à YouTube Data API v3 pour plus de sécurité.
4

Trouvez l’ID de votre chaîne YouTube

Allez dans YouTube StudioSettings (icône engrenage en bas à gauche) → ChannelAdvanced settings. Votre Channel ID y est indiqué — copiez-le. Il commence par UC. Il s’agit de votre YOUTUBE_CHANNEL_ID.
5

Collez les deux valeurs dans ContentFlows

Dans votre tableau de bord, allez dans Integrations → YouTube. Collez la clé API dans API key et l’ID de la chaîne dans Channel ID, puis cliquez sur Save.
Remarque : La clé API est en lecture seule — elle génère des métadonnées mais ne téléverse PAS de vidéos. Le téléversement nécessite toujours OAuth, ce qui ne fait pas partie du parcours d’onboarding actuel.


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

1

Lancez le processus

Dans votre tableau de bord, ouvrez Brand → trouvez la carte Sending domain en bas → saisissez votre domaine (par ex. your-business.com) → cliquez sur Save & show DNS records.
2

Copiez les 5 enregistrements DNS

La carte affiche maintenant 5 enregistrements :
  • 3 × CNAME (jetons DKIM)
  • 1 × TXT à la racine (SPF)
  • 1 × TXT à _dmarc.your-domain.com (DMARC)
Utilisez le bouton Copy à côté de chaque ligne pour les récupérer un par un.
3

Collez-les chez votre fournisseur DNS

Connectez-vous à votre hébergeur DNS, créez chaque enregistrement avec le host/name et la valeur exacts tels qu’affichés. Pour les CNAME, n’ajoutez pas votre domaine en suffixe — le host affiché est le nom complet (par ex. abc123._domainkey.your-domain.com).
Astuce : Utilisateurs Cloudflare : désactivez le nuage orange (proxy) sur les CNAME DKIM — SES a besoin de l’enregistrement brut.
4

Vérifiez

De retour dans le tableau de bord, cliquez sur I added the records — Verify. La carte interroge SES toutes les 15 secondes pendant jusqu’à 10 minutes. La propagation DNS mondiale prend généralement moins de 2 minutes, mais certains fournisseurs peuvent être plus lents.
5

Terminé

Une fois vérifiées, toutes les newsletters de votre tenant utiliseront newsletter@your-domain.com comme en-tête From, avec signatures DKIM, validation SPF et alignement DMARC.
Remarque : Vous pouvez supprimer le domaine à tout moment depuis la même carte — les e-mails reviennent alors à l’expéditeur partagé 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é.

Articles associés