トラブルシューティングとトークンガイド
LinkedIn、Facebook、Instagram、YouTube を ContentFlows に接続するための手順を、ステップごとに説明します。各プラットフォームには 2つの値 が必要です。アクセスを許可するアクセストークンと、公開先のアカウント / ページ / チャネルを示すIDです。どちらもダッシュボードに貼り付けます。
認証情報の保存方法
4つのプラットフォームの値はすべて、AWS Secrets Manager の contentflows/tenants/YOUR_TENANT_ID/social-tokens にある1つの暗号化JSON blobとして保存されます。シークレットはログに出力されることも、保存後に再表示されることもなく、アカウント内で分離されます。ContentFlows がSNSのパスワードを保存することはありません。
ContentFlows は LinkedIn UGC Posts API を使って、あなたに代わって投稿します。w_member_social 権限スコープを持つアクセストークンに加え、投稿の表示先となるアカウントの member URN が必要です。
ContentFlows が入力を求める項目
LINKEDIN_ACCESS_TOKEN- OAuth 2.0 アクセストークン(有効期間60日)。AQV… などで始まります。
LINKEDIN_AUTHOR_ID- Member URN — urn:li:person:XXXXXXXXXX または Company Page の urn:li:organization:NNNNNN のような形式です。
前提条件
- LinkedIn アカウント(個人プロフィール) — 投稿はこのアカウントから公開されます
- 無料の LinkedIn 開発者アカウント — アプリ作成時に自動で作成されます
ステップごとの手順
LinkedIn Developer Portal を開く
アプリ詳細を入力する
- App name: 何でも構いません — 例: “ContentFlows Publisher”
- LinkedIn page: LinkedIn Company Page をリンクする必要があります。まだない場合は、まず基本の会社ページを作成してください(無料)。
- App logo: 任意の正方形画像をアップロードします
「Share on LinkedIn」製品をリクエストする
リダイレクトURIを追加する
https://www.linkedin.com/developers/tools/oauth/redirectUpdate をクリックします。
アクセストークンを生成する
w_member_social(利用可能なら r_liteprofile も)にチェックを入れ、Request access token をクリックし、Allow をクリックします。トークンをコピーしてください。再表示されません。これが LINKEDIN_ACCESS_TOKEN です。Member URN を見つける
GET https://api.linkedin.com/v2/userinfoレスポンスには
sub が含まれます。urn:li:person: を前に付けてURNを作成します。たとえば sub = "ABC123xyz" の場合、URN は urn:li:person:ABC123xyz です。これが LINKEDIN_AUTHOR_ID です。urn:li:organization:COMPANY_PAGE_NUMERIC_ID を使用してください。数値IDはページの管理者URLで確認できます。両方の値を ContentFlows に貼り付ける
ContentFlows は Facebook Page に公開します(個人プロフィールではありません)。pages_manage_posts 権限を持つ Page access token と、数値の Page ID が必要です。
ContentFlows が入力を求める項目
FB_PAGE_ACCESS_TOKEN- Meta for Developers から取得した長期有効な Page アクセストークン(60日)。
FB_PAGE_ID- 管理している Facebook Page の数値ID(例: 123456789012345)。
前提条件
- Facebook Page の Admin である Facebook アカウント
- まだ Facebook Page がない場合は、facebook.com/pages/create で作成できます(無料、2分ほど)
ステップごとの手順
Meta for Developers ポータルを開く
アプリタイプを選択して詳細を入力する
Facebook Login 製品を追加する
Graph API Explorer でユーザートークンを取得する
- 右上のドロップダウンでアプリを選択します
- Generate Access Token をクリックします
- 権限ポップアップで、次のすべてにチェックを入れます:
pages_manage_posts— 投稿を公開するために必須(最も見落とされやすいスコープ)pages_read_engagementpages_show_listbusiness_managementinstagram_basic— このトークンを Instagram でも使う予定がある場合のみinstagram_content_publish— このトークンを Instagram でも使う予定がある場合のみ
- Generate Access Token をクリックして認可します
ユーザートークンを長期有効(60日)にする
Page access token と Page ID を取得する
GET /me/accounts → 送信JSONレスポンスで Page を見つけます。重要なフィールドは2つあります:
access_token→ これがFB_PAGE_ACCESS_TOKENです。長期有効なユーザートークンから派生しているため、この Page トークンは期限切れになりませんid→ これがFB_PAGE_IDです
両方の値を ContentFlows に貼り付ける
トークンに正しいスコープがあるか確認する(任意だが推奨)
- Type:
PAGE(USERではありません。USER と表示される場合、手順6で誤ったトークンをコピーしています) - Expires: Never(日付が表示される場合は、手順5を飛ばしています。
/me/accountsを呼び出した時点でユーザートークンがまだ短命でした) - Scopes:
pages_manage_postsを含む必要があります。含まれていない場合は、手順4でそのチェックを入れていません。手順4からやり直してください。
{"error":{"message":"(#200) Permissions error"}} が表示される場合、トークンにはほぼ確実に pages_manage_posts がありません。デバッガー(手順8)で確認し、必要なら再生成してください。Instagram の公開には Facebook Graph API を使用するため、Instagram アカウントは Facebook Page にリンクされた Professional アカウント(Business または Creator)である必要があります。個人InstagramアカウントはAPI経由で公開できません。
ContentFlows が入力を求める項目
IG_ACCESS_TOKEN- 任意 — 空欄のままにすると、ContentFlows は FB_PAGE_ACCESS_TOKEN にフォールバックします。専用のInstagramトークンを持っている場合のみ入力してください。
IG_BUSINESS_ACCOUNT_ID- Facebook Page にリンクされた Instagram Business Account のID(例: 17841412345678901)。
前提条件
- Instagram の Business または Creator アカウント(個人アカウントではありません)
- その Instagram アカウントが、あなたが管理する Facebook Page にリンクされていること
instagram_content_publish権限を持つ Meta 開発者アプリ
Professionalアカウントに切り替える(必要な場合)
Instagramアプリでアカウント種別を切り替える
Instagram を Facebook Page にリンクする
Instagram Business Account ID を取得する
Graph API Explorer を開く
instagram_basic, instagram_content_publish, pages_read_engagement, pages_manage_postsInstagram Business Account ID を見つける
GET /me/accounts を実行します。Page を見つけて id をコピーします。次に次を実行します:GET /{page-id}?fields=instagram_business_account(
{page-id} を Page ID に置き換えてください)。レスポンスには instagram_business_account オブジェクトが含まれます。そこから id をコピーしてください。これが IG_BUSINESS_ACCOUNT_ID です。値を ContentFlows に貼り付ける
IG_BUSINESS_ACCOUNT_ID のみです。YouTube
ContentFlows は YouTube Data API v3 を使って、コンテンツカレンダー用の動画メタデータ(タイトル、説明、タグ)を生成します。Google Cloud Console のAPIキーとチャンネルIDが必要です。
ContentFlows が入力を求める項目
YOUTUBE_API_KEY- YouTube Data API v3 を有効にした Google Cloud API キー。AIza… で始まります。
YOUTUBE_CHANNEL_ID- YouTube チャンネルID(例: UCxxxxxxxxxxxxxxxxxxxxxx)。YouTube Studio → Settings → Channel → Advanced settings で確認できます。
前提条件
- Google アカウント
- そのアカウントにリンクされた YouTube チャンネル
- 無料の Google Cloud プロジェクト(最初のステップで作成します)
ステップごとの手順
Google Cloud プロジェクトを作成する
YouTube Data API v3 を有効にする
APIキーを作成する
YOUTUBE_API_KEY です。YouTube Channel ID を見つける
UC で始まります。これが YOUTUBE_CHANNEL_ID です。両方の値を ContentFlows に貼り付ける
送信ドメイン(DKIM / SPF / DMARC)
デフォルトではニュースレターは noreply@contentflows.cc から送信されます。ご自身のドメインを認証すると、FromアドレスがDKIM署名や表示ブランドと一致するため、配信到達率が向上します(迷惑メール入りが減ります)。
前提条件
- ドメインを所有していること(例:
your-business.com)。 - レジストラ(Cloudflare、Route53、GoDaddy、Namecheap など)でDNSレコードを作成できること。
ステップごとの手順
フローを開始する
your-business.com)を入力し、Save & show DNS records をクリックします。5つのDNSレコードをコピーする
- CNAME ×3(DKIMトークン)
- ルートの TXT ×1(SPF)
_dmarc.your-domain.comの TXT ×1(DMARC)
DNSプロバイダに貼り付ける
abc123._domainkey.your-domain.com)。検証する
完了
newsletter@your-domain.com を From ヘッダーとして使用し、DKIM署名、SPF合格、DMARC整合が有効になります。noreply@contentflows.cc に戻ります。購読者のインポート
Newsletter タブの + Import ボタンを押すと、3つのタブがあるモーダルが開きます:
CSVアップロード
.csv ファイルをアップロードします。ヘッダー行は自動検出されます(名前に email を含む列はメール列として扱われ、name または first を含む列は名前として扱われます)。無効なメールアドレスは拒否され、重複はスキップされます。Import が有効になる前に、同意チェックボックスにチェックを入れてください。
Mailchimp
Mailchimp APIキー(形式: abc123...-us21 — 最後のハイフン以降がデータセンター)と Audience ID(Mailchimp Audience dashboard → Settings → Audience name and defaults → Audience ID)を貼り付けます。ContentFlows は購読中のメンバーをすべて取得します。
ConvertKit
ConvertKit APIキー(Settings → Advanced → API Key)を貼り付けます。確認済み購読者がすべてインポートされます。
よくある問題
- Mailchimp 401 Unauthorized — APIキーが正しくないか、アカウントで無効化されています。Mailchimp → Account → Extras → API keys で再生成してください。
- 「有効なメールアドレスがありません」 — CSVパーサーがメール列を検出できませんでした。ヘッダー行があり、列名が文字通り
emailであることを確認してください。 - Import finishes instantly with 0 added — すべての行がすでにリストに含まれていました。再実行時には正常です。
よくある問題
トークンが無効または期限切れです
アクセストークンには期限があります。LinkedIn トークンは約60日有効です。Facebook/Instagram の Page トークンは、長期有効なユーザートークンから派生した場合 期限切れになりません(Facebookセクションの手順を正確に実行してください)。新しいトークンを生成し、Integrations で更新してください。
Facebook: (#200) Permissions error on publish
圧倒的に多い原因は、Pageトークンに pages_manage_posts スコープがないことです。このスコープは Graph API Explorer の権限ポップアップで見落としやすく、デフォルトでは有効になりません。Access Token Debugger でトークンを確認してください。pages_manage_posts がスコープ一覧にない場合は、Facebookガイドの手順4からトークンを再生成し、その権限に 明示的にチェック を入れてください。
LinkedIn: 無効なURN
Member URN は、urn:li:person:(個人プロフィール)または urn:li:organization:(Company Page)の後に、アカウント固有のIDが続く必要があります。単なる数値や英数字の文字列だけでは、URNとして有効ではありません。
LinkedIn の権限が不足しています
LinkedIn アプリで Share on LinkedIn 製品の承認がないか、トークンが w_member_social なしで生成されています。LinkedInガイドの手順3に戻り、トークンを再生成してください。
Facebook: Page ID が違います
Page ID は /me/accounts の数値 id フィールドであり、Page URL に表示される人間向けのユーザー名ではありません。誤ってユーザー名を貼り付けると、投稿は失敗します。
Facebook Page の管理者である必要があります
トークンを生成した Facebook アカウントは、対象 Page の Admin ではありません。Page 管理者に自分でトークンを生成してもらうか、facebook.com → Page settings → Page roles で Admin に追加してもらってください。
Instagram: Business または Creator アカウントではありません
個人のInstagramアカウントは Content Publishing API を利用できません。上記の切り替え手順に従ってください。
Instagram: アカウントがFacebook Pageにリンクされていません
Instagram Professional アカウントが Facebook Page に接続されていません。Instagram Settings → Account → Linked Accounts → Facebook に移動し、リンクを完了してください。
YouTube: API quota exceeded
YouTube Data API のデフォルトクォータは 10,000 units/day で、ContentFlows のメタデータ検索には十分すぎるほどです。上限に達した場合は、同じAPIキーが他でも使われている可能性が高いです。ContentFlows 用に専用キーを作成してください。
まだ解決しませんか?
サポートに連絡して、エラーメッセージと接続しているプラットフォームをお知らせください。どの手順で止まったかも含めてください。