इसे छोड़कर कंटेंट पर जाएं

OAuth v2 कार्यप्रवाह

टर्मिनल विंडो
npm install --global @anakonn/ankk@0.5.1
ankk --version

साइन इन करें और ब्रांड चुनें

Section titled “साइन इन करें और ब्रांड चुनें”

ANKK v2 ब्राउज़र OAuth के माध्यम से आपका उपयोगकर्ता खाता इस्तेमाल करता है। आपके मौजूदा अधिकार हर अनुरोध पर लागू होते हैं। ऐप कनेक्ट करने से अतिरिक्त ब्रांड अधिकार नहीं मिलते। काम करते समय ब्रांड चुनें; OAuth प्राधिकरण ब्रांड नहीं चुनता।

Node.js 24 या नए संस्करण के साथ CLI 0.5.1 इस्तेमाल करें। सार्वजनिक क्लाइंट ID ANKK CLI की पहचान है; यह कोई गुप्त मान नहीं है।

टर्मिनल विंडो
export ANKK_OAUTH_CLIENT_ID=ankk-cli-production
टर्मिनल विंडो
ankk --json auth login --environment production
ankk auth status --environment production --connection OAUTH_CONNECTION_ID
ankk --json brands list --environment production --connection OAUTH_CONNECTION_ID --all
ankk --json connections list --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --all

बड़े अक्षरों वाले पहचानकर्ताओं को अपने अनुरोधों से मिले ID से बदलें। OAuth कनेक्शन ID आपका लॉगिन चुनता है। SNS खाता ID पोस्ट करने का लक्ष्य पहचानता है; यह OAuth कनेक्शन और प्रदाता के खाता ID, दोनों से अलग है। पूरे कार्यप्रवाह में एक ही परिवेश और ब्रांड इस्तेमाल करें। स्थानीय डिफ़ॉल्ट ब्रांड सेट होने पर भी ये उदाहरण दोनों को स्पष्ट रूप से निर्दिष्ट करते हैं।

अगर टर्मिनल अपने-आप ब्राउज़र नहीं खोलता, तो ankk auth login --environment production --device --no-open इस्तेमाल करें और दिखाए गए सत्यापन निर्देशों का पालन करें। टोकन OS के क्रेडेंशियल स्टोर में रखे जाते हैं। अगर वह उपलब्ध नहीं है, तो साइन इन करने से पहले उसे ठीक करें; टोकन कभी चैट में न चिपकाएँ और प्रकाशन JSON फ़ाइल में न सहेजें।

प्रदर्शन और संग्रहित पोस्ट पढ़ें

Section titled “प्रदर्शन और संग्रहित पोस्ट पढ़ें”
टर्मिनल विंडो
ankk --json analytics get --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --from 2026-10-01T00:00:00Z --to 2026-10-02T00:00:00Z
ankk --json posts list --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --all

वास्तविक रिपोर्टिंग अवधि चुनें। प्रारंभ समय शामिल होता है और समाप्ति समय शामिल नहीं होता; टाइमस्टैम्प UTC में हैं। क्वेरी करने से पहले उपयोगकर्ता की स्थानीय तारीखें UTC में बदलें। परिणाम को एक खाते तक सीमित करने के लिए --sns-account SNS_ACCOUNT_ID जोड़ें।

परिणाम संग्रहित अवलोकन बताते हैं। अवधियों की तुलना से पहले कवरेज और अवलोकन समय जाँचें। अनुपलब्ध डेटा शून्य नहीं है। खाते के नवीनतम स्नैपशॉट का अपना मापन समय होता है और वह आवश्यक रूप से अवधि का कुल योग नहीं है। Instagram की सटीक अवधि वाली इनसाइट संचित अवलोकनों से अलग हैं। पढ़ने से प्रदाता से डेटा संग्रह शुरू नहीं होता। posts refresh पोस्ट/टिप्पणी डेटा के लिए अलग कार्रवाई है, विश्लेषण रीफ़्रेश करने का अनुरोध नहीं।

सूचियाँ कर्सर इस्तेमाल करती हैं। --all अगले पृष्ठ पढ़ता है; पृष्ठ पढ़ते समय डेटा बदल सकता है, इसलिए परिणाम एक समय का स्नैपशॉट नहीं है। अगर कर्सर की अवधि समाप्त हो जाए, तो अधूरे परिणाम की जानकारी दें और जानबूझकर नई सूची शुरू करें; चुपचाप पुराने पृष्ठों के साथ उसे न मिलाएँ।

प्रकाशन से पहले फ़ाइल तैयार करें

Section titled “प्रकाशन से पहले फ़ाइल तैयार करें”
टर्मिनल विंडो
ankk --json media create-upload --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --file ./photo.jpg --idempotency-key UPLOAD_KEY
ankk --json media complete-upload MEDIA_ID --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --idempotency-key INSPECTION_KEY --wait --wait-timeout 180
ankk --json media get MEDIA_ID --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID

पहला कमांड फ़ाइल पंजीकृत और ट्रांसफ़र करता है। ट्रांसफ़र विफल हो या जवाब अनिश्चित हो, तब भी उसका मीडिया ID सहेजें। दूसरा कमांड निरीक्षण माँगता है; मीडिया की अंतिम स्थिति ready होने पर ही उसका इस्तेमाल करें। ये चरण प्रकाशन नहीं करते। मीडिया अपने ब्रांड के भीतर दोबारा इस्तेमाल हो सकता है। दूसरे ब्रांड के लिए अलग अपलोड करें।

अगर केवल अपलोड URL की अवधि समाप्त हुई है, तो उसी परिवेश, लॉगिन और ब्रांड के साथ media refresh-upload MEDIA_ID इस्तेमाल करें। नया URL मूल कार्य की समय-सीमा नहीं बढ़ाता और फ़ाइल नहीं बदलता। अलग बाइट सामग्री के लिए नया मीडिया अपलोड चाहिए। हस्ताक्षरित ट्रांसफ़र URL को क्रेडेंशियल मानें और साझा बातचीत के रिकॉर्ड में न डालें। फ़ाइल ट्रांसफ़र न कर सकने वाले क्लाइंट लौटाए गए ब्राउज़र प्रगति URL का इस्तेमाल कर सकते हैं: साइन इन करके फ़ाइल चुनें, फिर उसी मीडिया ID के साथ वापस आकर तैयारी की स्थिति जाँचें।

समीक्षा करें और प्रकाशित करें

Section titled “समीक्षा करें और प्रकाशित करें”

AI द्वारा तैयार सामग्री प्रकाशित करने से पहले ब्रांड, खाते, पूरा पाठ, थ्रेड खंडों का क्रम, संलग्नक, प्रदाता विकल्प और निष्पादन समय की पुष्टि करें। ठीक उसी मंशा के लिए पहले से मिली स्वीकृति पर्याप्त है। केवल विश्लेषण या मसौदा बनाने का अनुरोध प्रकाशन की अनुमति नहीं है।

तत्काल प्रकाशन के इस न्यूनतम इनपुट को publish.json के रूप में सहेजें। ऐसा खाता चुनें जो प्रस्तावित पाठ और चित्र के संयोजन का समर्थन करता हो; सर्वर वर्तमान क्षमता, मीडिया की तैयारी और अनुमति फिर जाँचता है।

{
"scheduled_at": null,
"targets": [
{
"sns_account_id": "SNS_ACCOUNT_ID",
"text": "The exact text you approved",
"media_ids": ["MEDIA_ID"]
}
]
}
टर्मिनल विंडो
ankk --json contents publish --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --file publish.json --idempotency-key PUBLICATION_KEY

भेजने से पहले इस मंशा के लिए अद्वितीय कुंजी चुनें और सुरक्षित रखें। अनिश्चित जवाब के बाद ठीक वही कुंजी और पेलोड दोबारा इस्तेमाल करें, API, CLI और MCP के बीच बदलते समय भी। केवल कनेक्शन का समय समाप्त होने से दूसरा प्रकाशन न बनाएँ। बदले हुए इनपुट के साथ वही कुंजी इस्तेमाल करने पर टकराव होता है। समाप्त-अवधि की कुंजी नया काम नहीं बनाती: नई मंशा जानबूझकर शुरू करने से पहले पुराना परिणाम जाँचें।

निर्धारित प्रकाशन के लिए scheduled_at: null को भविष्य के स्वीकृत UTC समय से बदलें, जैसे 2026-12-01T09:00:00Z। इस्तेमाल से पहले इस उदाहरण की तारीख बदलें और जाँचें कि वह अभी भी भविष्य में है। पंजीकरण पूरा होने पर अलग publish_operation_id मिलता है; इसका अर्थ नहीं कि निर्धारित SNS पोस्ट प्रकाशित हो चुके हैं।

परिणाम पर नज़र रखें

Section titled “परिणाम पर नज़र रखें”
टर्मिनल विंडो
ankk --json operations get OPERATION_ID --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --wait --wait-timeout 180

तत्काल प्रकाशन के लिए लौटाए गए ऑपरेशन ID को देखें। निर्धारित प्रकाशन के लिए निष्पादन समय पर publish_operation_id को देखें। प्रतीक्षा वैकल्पिक और स्थानीय है। CLI निकास कोड 10 का अर्थ प्रतीक्षा सीमा पूरी हुई; कोड 130 का अर्थ प्रतीक्षा बाधित हुई। इनमें से कोई भी सर्वर कार्य रद्द नहीं करता। वही ऑपरेशन पढ़ते रहें। प्रतीक्षा का निकास कोड 11 विफल, रद्द या आंशिक रूप से सफल अंतिम परिणाम दर्शाता है; प्रति-खाता परिणाम जाँचें। सामान्य स्थिति क्वेरी विफल ऑपरेशन बताते हुए भी 0 के साथ समाप्त हो सकती है, इसलिए स्क्रिप्ट को जवाब की स्थिति भी जाँचनी चाहिए।

हर खाते की अलग रिपोर्ट दें। सफल पोस्ट और उनके URL सुरक्षित रखें। क्रमबद्ध posts ऐरे में थ्रेड की पुष्ट पोस्ट होती हैं; केवल प्रतिनिधि post_url पूरे थ्रेड का वर्णन नहीं कर सकता। URL का न होना या अनिर्णीत स्थिति यह सिद्ध नहीं करती कि प्रदाता ने कुछ नहीं बनाया। सुलह-जाँच में चल रहे और अज्ञात परिणामों को तब तक अनिर्णीत रखें जब तक मौजूदा कार्य प्रमाण न दे।

निर्धारित समय बदलें या विफलता से उबरें

Section titled “निर्धारित समय बदलें या विफलता से उबरें”

सामग्री या समय बदलने से पहले उसी परिवेश, लॉगिन और ब्रांड से contents get CONTENT_ID पढ़ें। उसका वर्तमान संस्करण --expected-version के रूप में दें। contents update योग्य, अभी शुरू न हुए लक्ष्यों को संपादित करता है; contents reschedule उनका UTC समय बदलता है। संस्करण टकराव होने पर फिर पढ़ना और समीक्षा करना ज़रूरी है, चुपचाप अधिलेखन नहीं। contents cancel रद्द करने का अनुरोध करता है; लौटाए गए प्रकाशन ऑपरेशन को तब तक जाँचें जब तक रद्द होने की पुष्टि न हो। निष्पादन रद्द करने से पहले हो सकता है।

केवल चुने हुए विफल खातों पर दोबारा प्रयास करें जिन्हें अभी can_retry चिह्नित किया गया है:

टर्मिनल विंडो
ankk --json contents retry ORIGINAL_OPERATION_ID --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --accounts FAILED_SNS_ACCOUNT_ID --idempotency-key RETRY_KEY

यह नई निष्पादन मंशा है और इसके लिए उपयुक्त नई कुंजी तथा उपयोगकर्ता की स्वीकृति चाहिए, जब तक पहले की स्वीकृति इसे कवर न करती हो। अनिश्चित जवाब के बाद उस दोबारा-प्रयास कुंजी को बनाए रखें। दोबारा प्रयास संग्रहित सामग्री इस्तेमाल करता है और जितनी जल्दी संभव हो निष्पादित होता है; सफल या अनिश्चित लक्ष्यों को कभी फिर प्रकाशित नहीं करता। भविष्य के नए निर्धारित प्रकाशन के लिए contents duplicate केवल संपादन योग्य इनपुट देता है। उसकी समीक्षा करें और नया स्वीकृत प्रकाशन भेजें।

योग्य विफल कतार प्रविष्टियाँ हटाने से वे कार्य कतार में छिप जाती हैं; इससे पोस्ट या निष्पादन इतिहास नहीं मिटते और कोई दोबारा प्रयास नहीं होता। सामूहिक रद्द करने पर स्वीकृत और अस्वीकृत समूह साथ मिल सकते हैं; हर स्वीकृत प्रकाशन ऑपरेशन पर नज़र रखें। सामूहिक त्याग समकालिक रूप से पूरा होता है: नई ऑपरेशन की प्रतीक्षा किए बिना रसीद के त्यागे और अस्वीकृत समूह जाँचें। दोनों स्थितियों में पूरी रसीद पढ़ें; निकास कोड को सब-सफल या सब-विफल परिणाम न मानें।

अनुरोध की त्रुटियाँ सँभालें और कनेक्शन हटाएँ

Section titled “अनुरोध की त्रुटियाँ सँभालें और कनेक्शन हटाएँ”

संरचित त्रुटि कोड, अनुरोध ID, उपलब्ध होने पर ऑपरेशन ID, next_action और retry_at पढ़ें। प्रमाणीकरण की पुनर्प्राप्ति मूल ऑपरेशन पर लौटती है। अनुमति त्रुटियों के लिए वैध पहुँच चाहिए, दूसरा इंटरफ़ेस नहीं। दर सीमाओं और क्षमता प्रतिबंधों का पालन करना चाहिए। दोबारा कोशिश योग्य अनुरोध नया प्रकाशन या प्रतिस्थापन कुंजी अधिकृत नहीं करता।

टर्मिनल विंडो
ankk auth logout --environment production --connection OAUTH_CONNECTION_ID

लॉगआउट सर्वर निरस्तीकरण और स्थानीय क्रेडेंशियल हटाने की अलग जानकारी देता है। अगर सर्वर निरस्तीकरण की पुष्टि नहीं हुई, तो ANKK सेटिंग या अन्य वैध कनेक्शन से पुराना कनेक्शन रद्द करें। OAuth कनेक्शन हटाने से पहले स्वीकार किए गए प्रकाशन रद्द नहीं होते और ब्रांड के मीडिया नहीं मिटते।

MCP और Skills इस्तेमाल करें

Section titled “MCP और Skills इस्तेमाल करें”

MCP https://api.ankk.app/mcp/v2 पर उपयोगकर्ता OAuth इस्तेमाल करता है। होस्ट को पंजीकृत क्लाइंट चाहिए; केवल URL से कनेक्शन पूरा नहीं होता। ChatGPT और Claude की आधिकारिक निर्देशिकाओं में सूची उपलब्ध नहीं है। कार्ड उपलब्ध न हों तो टेक्स्ट और संरचित परिणाम इस्तेमाल करें। केवल बातचीत के सारांश पर निर्भर रहने के बजाय मान और अवलोकन समय जाँचें।

Skills प्रक्रियाएँ देता है, अनुमतियाँ या क्रेडेंशियल नहीं। नीचे दिया निश्चित उम्मीदवार टैग इंस्टॉल करें और ब्रांड, स्वीकृति तथा अंतिम परिणाम जाँचें।

टर्मिनल विंडो
npx skills add https://github.com/Anakonn/ankk-skills/tree/v0.1.0-rc.1 --skill ankk-analyze --skill ankk-publish