ContentFlows/दस्तावेज़ीकरण

समस्या निवारण और token guides

LinkedIn, Facebook, Instagram, और YouTube को ContentFlows से जोड़ने के चरण-दर-चरण निर्देश। हर platform के लिए two values चाहिए: एक access token (जो अनुमति देता है) और एक ID (किस account / page / channel पर पब्लिश करना है)। दोनों आपके dashboard में paste किए जाते हैं।

Credentials कैसे संग्रहीत होते हैं

चारों platforms की values AWS Secrets Manager में contentflows/tenants/YOUR_TENANT_ID/social-tokens पर एक single encrypted JSON blob के रूप में saved होती हैं। Secrets कभी log नहीं किए जाते, save करने के बाद फिर कभी दिखाए नहीं जाते, और आपके account के लिए isolated रहते हैं। ContentFlows कभी आपका social media password store नहीं करता।


LinkedIn

ContentFlows आपकी ओर से पब्लिश करने के लिए LinkedIn UGC Posts API का उपयोग करता है। आपको w_member_social permission scope वाला access token चाहिए, साथ में उस account का member URN भी चाहिए जिसके तहत पोस्ट दिखाई देंगी।

वे फ़ील्ड जिनके लिए ContentFlows आपसे पूछेगा

LINKEDIN_ACCESS_TOKEN
OAuth 2.0 access token (60-day lifespan). AQV… या इसी तरह से शुरू होता है।
LINKEDIN_AUTHOR_ID
Member URN — urn:li:person:XXXXXXXXXX या Company Page के लिए urn:li:organization:NNNNNN जैसा दिखता है।

आवश्यकताएँ

  • एक LinkedIn account (personal profile) — पोस्ट इसी account से पब्लिश होंगी
  • एक free LinkedIn developer account — app बनाते समय यह अपने आप बन जाता है

चरण-दर-चरण

1

LinkedIn Developer Portal पर जाएँ

linkedin.com/developers/apps खोलें और लॉग इन करें। Create app पर क्लिक करें।
2

App details भरें

  • App name: कुछ भी — उदा. “ContentFlows Publisher”
  • LinkedIn page: आपको एक LinkedIn Company Page लिंक करनी होगी। यदि आपके पास नहीं है, तो पहले एक basic company page बनाएं (free)।
  • App logo: कोई भी square image अपलोड करें
Create app पर क्लिक करें।
3

'Share on LinkedIn' product का अनुरोध करें

App page पर, Products टैब पर क्लिक करें। Share on LinkedIn ढूँढें और Request access पर क्लिक करें। आमतौर पर यह तुरंत approve हो जाता है।
4

अपना redirect URI जोड़ें

Auth टैब पर जाएँ। OAuth 2.0 settings के अंतर्गत यह redirect URL जोड़ें:
https://www.linkedin.com/developers/tools/oauth/redirect
Update पर क्लिक करें।
5

Access token जनरेट करें

linkedin.com/developers/tools/oauth/token-generator पर जाएँ। अपना app चुनें, w_member_social (और उपलब्ध हो तो r_liteprofile) टिक करें, Request access token पर क्लिक करें, Allow पर क्लिक करें। Token कॉपी करें — यह फिर से नहीं दिखेगा। यह आपका LINKEDIN_ACCESS_TOKEN है।
6

अपना Member URN खोजें

उसी token-generator tool में, bundled API tester का उपयोग करें:
GET https://api.linkedin.com/v2/userinfo
Response में sub होता है — अपना URN बनाने के लिए इसके आगे urn:li:person: जोड़ें। उदाहरण के लिए यदि sub = "ABC123xyz" है, तो आपका URN urn:li:person:ABC123xyz होगा। यह आपका LINKEDIN_AUTHOR_ID है।
टिप: Personal profile की बजाय LinkedIn Company Page से पोस्ट करने के लिए, इसके बजाय urn:li:organization:COMPANY_PAGE_NUMERIC_ID का उपयोग करें — numeric ID Page के admin URL में दिखाई देता है।
7

दोनों values ContentFlows में पेस्ट करें

अपने dashboard में, Integrations → LinkedIn पर जाएँ। Access token को Access token फ़ील्ड में और URN को Member URN फ़ील्ड में पेस्ट करें, फिर Save पर क्लिक करें।
नोट: LinkedIn access tokens 60 days के बाद expire हो जाते हैं। हर दो महीने में steps 5 और 7 दोहराएँ (URN कभी नहीं बदलता)। कैलेंडर reminder सेट करें।

Facebook

ContentFlows एक Facebook Page (personal profile नहीं) पर पब्लिश करता है। आपको pages_manage_posts permission वाला एक Page access token, साथ में numeric Page ID चाहिए।

वे फ़ील्ड जिनके लिए ContentFlows आपसे पूछेगा

FB_PAGE_ACCESS_TOKEN
Meta for Developers से long-lived Page access token (60 days).
FB_PAGE_ID
आपके द्वारा manage किए जाने वाले Facebook Page का numeric ID (उदा. 123456789012345)।

आवश्यकताएँ

  • एक Facebook account जो Facebook Page का Admin हो
  • यदि आपके पास अभी तक Facebook Page नहीं है, तो facebook.com/pages/create पर एक बनाएँ (free, 2 minutes लगते हैं)

चरण-दर-चरण

1

Meta for Developers portal खोलें

developers.facebook.com/apps पर जाएँ और लॉग इन करें। Create App पर क्लिक करें।
2

App type चुनें और विवरण भरें

App type के रूप में Business चुनें। App name, contact email भरें, Create App पर क्लिक करें।
3

Facebook Login product जोड़ें

Dashboard पर, product list में Facebook Login ढूँढें और Set up पर क्लिक करें। किसी अतिरिक्त configuration की आवश्यकता नहीं है।
4

Graph API Explorer से user token प्राप्त करें

Graph API Explorer खोलें:
  • ऊपर-दाएँ dropdown में अपना app चुनें
  • Generate Access Token पर क्लिक करें
  • permissions popup में, इन सभी को check करें:
    • pages_manage_postsposts publish करने के लिए आवश्यक (सबसे आम छूटा हुआ scope)
    • pages_read_engagement
    • pages_show_list
    • business_management
    • instagram_basic — केवल तब यदि आप इस token को Instagram के लिए पुन: उपयोग करने की योजना बना रहे हैं
    • instagram_content_publish — केवल तब यदि आप इस token को Instagram के लिए पुन: उपयोग करने की योजना बना रहे हैं
  • Generate Access Token पर क्लिक करें और authorize करें
इससे आपको एक short-lived User access token मिलता है (~2 hours के लिए वैध)। Steps 5–6 इसे कभी expire न होने वाले Page access token में बदलते हैं।
5

User token को long-lived (60 days) में बढ़ाएँ

User token को Access Token Debugger में पेस्ट करें, Debug पर क्लिक करें, फिर नीचे Extend Access Token पर क्लिक करें। आपको ~60 days के लिए वैध नया user token मिलता है। अगले चरण में इस extended token का उपयोग करें।
6

Page access token और Page ID दोनों निकालें

फिर से Graph API Explorer में, step 5 का long-lived user token Access Token फ़ील्ड में पेस्ट करें, फिर यह चलाएँ:
GET /me/accountsSubmit
JSON response में, अपना Page खोजें। इसके दो महत्वपूर्ण फ़ील्ड होते हैं:
  • access_token → यह आपका FB_PAGE_ACCESS_TOKEN है — क्योंकि आपने इसे long-lived user token से derived किया है, यह Page token कभी expire नहीं होता
  • id → यह आपका FB_PAGE_ID है
दोनों values कॉपी करें।
7

दोनों values ContentFlows में पेस्ट करें

अपने dashboard में, Integrations → Facebook पर जाएँ। Page token को Page access token में और numeric page ID को Page ID में पेस्ट करें, फिर Save पर क्लिक करें।
8

जाँचें कि token में सही scopes हैं (वैकल्पिक लेकिन अनुशंसित)

अपना नया Page token Access Token Debugger में पेस्ट करें और जाँचें:
  • Type: PAGE (USER नहीं — यदि USER दिखता है, तो आपने step 6 में गलत token कॉपी किया है)
  • Expires: Never (यदि तारीख दिखती है, तो आपने step 5 छोड़ दिया — जब आपने /me/accounts कॉल किया था, तब user token अभी भी short-lived था)
  • Scopes: में pages_manage_posts शामिल होना चाहिए। यदि यह गायब है, तो आपने step 4 में वह box check नहीं किया — step 4 से फिर शुरू करें।
टिप: Common 403 cause: यदि आपकी scheduled posts इस त्रुटि के साथ fail होती हैं {"error":{"message":"(#200) Permissions error"}}, तो token में लगभग हमेशा pages_manage_posts missing होता है। Debugger (step 8) से सत्यापित करें और आवश्यकता होने पर फिर से generate करें।

Instagram

Instagram publishing Facebook Graph API का उपयोग करता है, इसलिए आपका Instagram account Facebook Page से जुड़ा हुआ एक Professional account (Business या Creator) होना चाहिए। Personal Instagram accounts API के माध्यम से publish नहीं कर सकते।

वे फ़ील्ड जिनके लिए ContentFlows आपसे पूछेगा

IG_ACCESS_TOKEN
Optional — खाली छोड़ दें और ContentFlows FB_PAGE_ACCESS_TOKEN पर वापस चला जाएगा। केवल तब भरें यदि आपके पास dedicated Instagram token है।
IG_BUSINESS_ACCOUNT_ID
आपके Facebook Page से जुड़ा Instagram Business Account ID (उदा. 17841412345678901)।

आवश्यकताएँ

  • एक Instagram Business या Creator account (personal account नहीं)
  • वह Instagram account जिस Facebook Page को आप manage करते हैं उससे linked होना चाहिए
  • instagram_content_publish permission वाला Meta developer app

Professional account में बदलें (यदि आवश्यक हो)

1

Instagram app में account type बदलें

अपने फोन पर, Instagram profile → ☰ menu पर टैप करें → SettingsAccountSwitch to Professional Account. Business या Creator चुनें।
2

Instagram को अपने Facebook Page से लिंक करें

Instagram Settings में ही, AccountLinked AccountsFacebook पर जाएँ। लॉग इन करें और अपना Page चुनें।

Instagram Business Account ID प्राप्त करें

3

Graph API Explorer खोलें

developers.facebook.com/tools/explorer पर जाएँ। अपना app चुनें और इन permissions के साथ token जनरेट करें:
instagram_basic, instagram_content_publish, pages_read_engagement, pages_manage_posts
4

अपना Instagram Business Account ID खोजें

GET /me/accounts चलाएँ। अपना Page ढूँढें और उसका id कॉपी करें। फिर यह चलाएँ:
GET /{page-id}?fields=instagram_business_account
(replace {page-id} अपने Page ID से). Response में एक instagram_business_account object होता है — उसका id कॉपी करें। यह आपका IG_BUSINESS_ACCOUNT_ID है।
5

Values ContentFlows में पेस्ट करें

अपने dashboard में, Integrations → Instagram पर जाएँ। IG Business Account ID को Business Account ID में पेस्ट करें। Facebook Page token को पुन: उपयोग करने के लिए Access token फ़ील्ड खाली छोड़ दें — यही सबसे सरल तरीका है और अधिकांश लोग यही करते हैं। Save पर क्लिक करें।
नोट: यदि आपने Facebook पहले से save कर लिया है, तो Instagram का access token FB Page token पर default हो जाता है। आपको केवल IG_BUSINESS_ACCOUNT_ID देना होगा।

YouTube

ContentFlows आपके content calendar के लिए वीडियो metadata (titles, descriptions, tags) जनरेट करने हेतु YouTube Data API v3 का उपयोग करता है। आपको Google Cloud Console से एक API key और अपने channel का ID चाहिए।

वे फ़ील्ड जिनके लिए ContentFlows आपसे पूछेगा

YOUTUBE_API_KEY
YouTube Data API v3 enabled वाली Google Cloud API key. AIza… से शुरू होती है।
YOUTUBE_CHANNEL_ID
आपका YouTube channel ID (उदा. UCxxxxxxxxxxxxxxxxxxxxxx). इसे YouTube Studio → Settings → Channel → Advanced settings में खोजें।

आवश्यकताएँ

  • एक Google account
  • उस account से जुड़ा एक YouTube channel
  • एक free Google Cloud project (आप इसे पहले चरण के दौरान बनाते हैं)

चरण-दर-चरण

1

Google Cloud project बनाएं

console.cloud.google.com/projectcreate पर जाएँ, अपने project को कोई भी नाम दें (उदा. “ContentFlows”), और Create पर क्लिक करें।
2

YouTube Data API v3 सक्षम करें

नया project चुने जाने के बाद, YouTube Data API v3 पर जाएँ और Enable पर क्लिक करें।
3

API key बनाएं

APIs & Services → Credentials पर जाएँ। + Create credentials → API key पर क्लिक करें। Key कॉपी करें — यह आपका YOUTUBE_API_KEY है।
टिप: सुरक्षा के लिए Restrict key पर क्लिक करें और इसे केवल YouTube Data API v3 तक सीमित करें।
4

अपना YouTube Channel ID खोजें

YouTube StudioSettings (नीचे-बाएँ gear icon) → ChannelAdvanced settings पर जाएँ। आपका Channel ID वहाँ सूचीबद्ध होगा — उसे कॉपी करें। यह UC से शुरू होता है। यह आपका YOUTUBE_CHANNEL_ID है।
5

दोनों values ContentFlows में पेस्ट करें

अपने dashboard में, Integrations → YouTube पर जाएँ। API key को API key में और channel ID को Channel ID में पेस्ट करें, फिर Save पर क्लिक करें।
नोट: API key read-only है — यह metadata जनरेट करती है लेकिन वीडियो अपलोड नहीं करती। वीडियो अपलोड करने के लिए अभी भी OAuth आवश्यक है, जो आज के onboarding flow का हिस्सा नहीं है।


Sending domain (DKIM / SPF / DMARC)

By default newsletters noreply@contentflows.cc से जाती हैं। अपना domain authenticate करने से deliverability बेहतर होती है (spam-folder में कम जाती हैं) क्योंकि From address DKIM signatures और आपके visible brand से मेल खाती है।

आवश्यकताएँ

  • आपके पास एक domain हो (उदा. your-business.com).
  • आप अपने registrar (Cloudflare, Route53, GoDaddy, Namecheap, आदि) पर DNS records बना सकते हों।

चरण-दर-चरण

1

Flow शुरू करें

अपने dashboard में, Brand खोलें → नीचे Sending domain card ढूँढें → अपना domain टाइप करें (उदा. your-business.com) → Save & show DNS records पर क्लिक करें।
2

5 DNS records कॉपी करें

Card अब 5 records दिखाती है:
  • 3 × CNAME (DKIM tokens)
  • root पर 1 × TXT (SPF)
  • _dmarc.your-domain.com पर 1 × TXT (DMARC)
उन्हें एक-एक करके लेने के लिए हर row के पास Copy button का उपयोग करें।
3

अपने DNS provider में पेस्ट करें

अपने DNS host में लॉग इन करें, प्रत्येक record को बिल्कुल दिखाए गए host/name और value के साथ बनाएं। CNAMEs के लिए, अपने domain को suffix के रूप में न जोड़ें — दिखाया गया host पूरा name है (उदा. abc123._domainkey.your-domain.com)।
टिप: Cloudflare users: DKIM CNAMEs पर orange cloud (proxy) बंद करें — SES को raw record चाहिए।
4

Verify करें

Dashboard में वापस जाकर I added the records — Verify पर क्लिक करें। Card 10 minutes तक हर 15 seconds में SES को poll करती है। Global DNS propagation आमतौर पर 2 minutes से कम होती है, लेकिन कुछ providers को अधिक समय लग सकता है।
5

हो गया

एक बार सत्यापित होने पर, आपके tenant की सभी newsletters From header के रूप में newsletter@your-domain.com का उपयोग करेंगी, DKIM signatures, SPF pass, और DMARC alignment के साथ।
नोट: आप किसी भी समय उसी card से domain हटा सकते हैं — तब emails shared noreply@contentflows.cc sender पर वापस चली जाती हैं।

Subscribers आयात करना

Newsletter टैब का + Import button एक modal खोलता है जिसमें तीन tabs होते हैं:

CSV upload

एक .csv फ़ाइल अपलोड करें। Header row अपने आप detect हो जाती है (जिस भी column के नाम में email होता है, उसे email column माना जाता है; किसी भी column में name या first हो, उसे name माना जाता है)। Invalid email addresses अस्वीकार की जाती हैं; duplicates छोड़ दिए जाते हैं। Import सक्षम होने से पहले consent checkbox टिक करें।

Mailchimp

अपना Mailchimp API key पेस्ट करें (format: abc123...-us21 — आखिरी dash के बाद का भाग data center है) और Audience ID (Mailchimp Audience dashboard → Settings → Audience name and defaults → Audience ID)। ContentFlows सभी subscribed members खींचता है।

ConvertKit

अपना ConvertKit API key पेस्ट करें (Settings → Advanced → API Key)। सभी confirmed subscribers आयात किए जाते हैं।

सामान्य समस्याएँ

  • Mailchimp 401 Unauthorized — API key गलत है या account ने इसे disable कर दिया है। Mailchimp → Account → Extras → API keys में इसे regenerate करें।
  • “No valid email addresses” — CSV parser ने email column detect नहीं किया। सुनिश्चित करें कि header row है और एक column का नाम सचमुच email है।
  • Import finishes instantly with 0 added — हर row पहले से ही आपकी list में थी। Re-runs के लिए यह सामान्य है।

सामान्य समस्याएँ

Token invalid या expired है

Access tokens expire हो जाते हैं। LinkedIn tokens लगभग 60 days तक चलते हैं। Facebook/Instagram Page tokens long-lived user token से derived होने पर कभी expire नहीं होते (Facebook section के चरण बिल्कुल वैसे ही follow करें)। एक नया token generate करें और Integrations में अपडेट करें।

Facebook: publish करते समय (#200) Permissions error

अब तक का सबसे आम कारण: Page token में pages_manage_posts scope गायब है। Graph API Explorer इसे default रूप से सक्षम नहीं करता, इसलिए permissions popup में इसे चूकना आसान है। अपना token Access Token Debugger में verify करें — यदि scopes list में pages_manage_posts नहीं है, तो Facebook guide के Step 4 से token regenerate करें और उस permission को स्पष्ट रूप से check करें।

LinkedIn: invalid URN

Member URN का आरंभ personal profiles के लिए urn:li:person: या Company Pages के लिए urn:li:organization: से होना चाहिए, जिसके बाद account का unique ID आता है। केवल numeric या alphanumeric string अपने आप में वैध URN नहीं है।

LinkedIn पर अपर्याप्त permissions

आपके LinkedIn app में Share on LinkedIn product approved नहीं है, या token w_member_social के बिना जनरेट हुआ था। LinkedIn guide के step 3 पर वापस जाएँ, फिर token regenerate करें।

Facebook: गलत Page ID

Page ID /me/accounts से प्राप्त numeric id field है, Page URL में दिखने वाला human-readable username नहीं। यदि आप गलती से username पेस्ट करते हैं, तो posts fail हो जाएँगी।

आपको Facebook Page का admin होना चाहिए

जिस Facebook account ने token जनरेट किया है, वह target Page का Admin नहीं है। Page admin से token खुद जनरेट करने को कहें, या facebook.com → Page settings → Page roles में खुद को Admin के रूप में जोड़वाएँ।

Instagram: Business या Creator account नहीं है

Personal Instagram accounts Content Publishing API का उपयोग नहीं कर सकते। ऊपर दिए गए conversion steps का पालन करें।

Instagram: account किसी Facebook Page से जुड़ा नहीं है

आपका Instagram Professional account किसी Facebook Page से connected नहीं है। Instagram Settings → Account → Linked Accounts → Facebook पर जाएँ और लिंक पूरा करें।

YouTube: API quota समाप्त हो गई है

YouTube Data API की default quota 10,000 units/day है, जो ContentFlows metadata lookups के लिए पर्याप्त से भी अधिक है। यदि आप limit तक पहुँचते हैं, तो संभवतः वही API key कहीं और उपयोग हो रही है — ContentFlows के लिए एक dedicated key बनाएं।


अभी भी अटके हैं?

सपोर्ट से संपर्क करें error message और यह platform बताकर कि आप किसे connect कर रहे हैं। उस step number को भी शामिल करें जहाँ आप अटक गए थे।

संबंधित