เวิร์กโฟลว์ OAuth v2
การติดตั้ง
หัวข้อที่มีชื่อว่า “การติดตั้ง”npm install --global @anakonn/ankk@0.5.1ankk --versionเข้าสู่ระบบและเลือกแบรนด์
หัวข้อที่มีชื่อว่า “เข้าสู่ระบบและเลือกแบรนด์”ANKK v2 ใช้บัญชีผู้ใช้ของคุณผ่าน OAuth ในเบราว์เซอร์ สิทธิ์เดิมของคุณมีผลกับทุกคำขอ การเชื่อมต่อแอปไม่ได้ให้สิทธิ์แบรนด์เพิ่มเติม เลือกแบรนด์เมื่อทำงาน การอนุญาต OAuth ไม่ได้เลือกแบรนด์
ใช้ CLI 0.5.1 กับ Node.js 24 ขึ้นไป ID ไคลเอนต์สาธารณะนี้ระบุ ANKK CLI และไม่ใช่ข้อมูลลับ
export ANKK_OAUTH_CLIENT_ID=ankk-cli-productionankk --json auth login --environment productionankk auth status --environment production --connection OAUTH_CONNECTION_IDankk --json brands list --environment production --connection OAUTH_CONNECTION_ID --allankk --json connections list --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --allแทนตัวระบุอักษรตัวใหญ่ด้วย ID ที่คำขอของคุณเองส่งกลับมา ID การเชื่อมต่อ OAuth ใช้เลือกการเข้าสู่ระบบ ID บัญชี SNS ระบุเป้าหมายที่จะโพสต์ ซึ่งต่างจากทั้งการเชื่อมต่อ OAuth และ ID บัญชีของผู้ให้บริการ ใช้สภาพแวดล้อมและแบรนด์เดียวกันตลอดเวิร์กโฟลว์ ตัวอย่างเหล่านี้ระบุทั้งสองอย่างชัดเจน แม้คุณจะตั้งแบรนด์เริ่มต้นไว้ในเครื่องแล้วก็ตาม
สำหรับเทอร์มินัลที่ไม่เปิดเบราว์เซอร์อัตโนมัติ ให้ใช้ ankk auth login --environment production --device --no-open และทำตามคำแนะนำการยืนยันที่แสดง โทเค็นเก็บอยู่ในที่เก็บข้อมูลรับรองของระบบปฏิบัติการ หากใช้ที่เก็บนั้นไม่ได้ ให้กู้คืนให้ใช้งานได้ก่อนเข้าสู่ระบบ ห้ามวางโทเค็นในแชตหรือบันทึกไว้ในไฟล์ JSON สำหรับเผยแพร่
อ่านผลการดำเนินงานและโพสต์ที่จัดเก็บ
หัวข้อที่มีชื่อว่า “อ่านผลการดำเนินงานและโพสต์ที่จัดเก็บ”ankk --json analytics get --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --from 2026-10-01T00:00:00Z --to 2026-10-02T00:00:00Zankk --json posts list --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --allเลือกช่วงรายงานจริง รวมเวลาเริ่มต้นแต่ไม่รวมเวลาสิ้นสุด โดยใช้เวลาประทับ UTC แปลงวันที่ท้องถิ่นของผู้ใช้เป็น UTC ก่อนค้นหา เพิ่ม --sns-account SNS_ACCOUNT_ID เพื่อจำกัดผลลัพธ์ไว้ที่บัญชีเดียว
ผลลัพธ์อธิบายข้อมูลการสังเกตที่จัดเก็บไว้ ตรวจสอบความครอบคลุมและเวลาที่สังเกตก่อนเปรียบเทียบช่วงเวลา ข้อมูลที่ขาดไม่ใช่ศูนย์ สแนปช็อตบัญชีล่าสุดมีเวลาวัดของตัวเอง และไม่จำเป็นต้องเป็นยอดรวมของช่วงเวลา ข้อมูลเชิงลึก Instagram ของช่วงเวลาที่ระบุแน่นอนแยกจากการสังเกตสะสม การอ่านไม่ได้เริ่มเก็บข้อมูลจากผู้ให้บริการ posts refresh เป็นการดำเนินการแยกสำหรับข้อมูลโพสต์/ความคิดเห็น ไม่ใช่คำขอรีเฟรชการวิเคราะห์
รายการใช้เคอร์เซอร์ --all จะอ่านต่อทีละหน้า ข้อมูลอาจเปลี่ยนระหว่างแบ่งหน้า ดังนั้นผลลัพธ์จึงไม่ใช่สแนปช็อต ณ เวลาเดียวกัน หากเคอร์เซอร์หมดอายุ ให้รายงานว่าผลลัพธ์ไม่ครบและเริ่มอ่านรายการใหม่โดยตั้งใจ แทนการนำไปรวมกับหน้าเดิมอย่างเงียบ ๆ
เตรียมไฟล์ก่อนเผยแพร่
หัวข้อที่มีชื่อว่า “เตรียมไฟล์ก่อนเผยแพร่”ankk --json media create-upload --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --file ./photo.jpg --idempotency-key UPLOAD_KEYankk --json media complete-upload MEDIA_ID --environment production --connection OAUTH_CONNECTION_ID --brand BRAND_ID --idempotency-key INSPECTION_KEY --wait --wait-timeout 180ankk --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 สื่อเดิมเพื่อตรวจสอบความพร้อม
ตรวจทานและเผยแพร่
หัวข้อที่มีชื่อว่า “ตรวจทานและเผยแพร่”ยืนยันแบรนด์ บัญชี ข้อความทั้งหมด ลำดับส่วนต่าง ๆ ของเธรด ไฟล์แนบ ตัวเลือกผู้ให้บริการ และเวลาทำงานก่อนเผยแพร่เนื้อหาที่ 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 ที่ตั้งเวลาไว้เผยแพร่แล้ว
ติดตามผลลัพธ์
หัวข้อที่มีชื่อว่า “ติดตามผลลัพธ์”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 หรือสถานะที่ยังไม่ยุติไม่ใช่หลักฐานว่าผู้ให้บริการไม่ได้สร้างอะไร ให้คงผลที่กำลังตรวจสอบความสอดคล้องและผลที่ไม่ทราบไว้เป็นยังไม่ยุติ จนกว่างานเดิมจะให้หลักฐาน
เปลี่ยนเวลาที่จองไว้หรือกู้คืนจากความล้มเหลว
หัวข้อที่มีชื่อว่า “เปลี่ยนเวลาที่จองไว้หรือกู้คืนจากความล้มเหลว”อ่าน 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 จะส่งกลับเฉพาะอินพุตที่แก้ไขได้ ให้ตรวจทานแล้วส่งการเผยแพร่ใหม่ที่อนุมัติ
การทิ้งรายการคิวที่ล้มเหลวและเข้าเกณฑ์จะซ่อนรายการจากคิวงาน ไม่ได้ลบโพสต์ ลบประวัติการทำงาน หรือลองงานใดใหม่ การยกเลิกจำนวนมากอาจส่งทั้งกลุ่มที่ยอมรับและปฏิเสธกลับมาพร้อมกัน ให้ติดตามการดำเนินการเผยแพร่แต่ละรายการที่ยอมรับ การทิ้งจำนวนมากเสร็จแบบซิงโครนัส ให้ตรวจสอบกลุ่มที่ทิ้งแล้วและปฏิเสธในใบรับผล โดยไม่รอการดำเนินการใหม่ ทั้งสองกรณีให้อ่านใบรับผลทั้งหมด แทนการถือว่ารหัสจบหมายถึงสำเร็จทั้งหมดหรือล้มเหลวทั้งหมด
จัดการข้อผิดพลาดของคำขอและตัดการเชื่อมต่อ
หัวข้อที่มีชื่อว่า “จัดการข้อผิดพลาดของคำขอและตัดการเชื่อมต่อ”อ่านรหัสข้อผิดพลาดแบบมีโครงสร้าง ID คำขอ ID การดำเนินการถ้ามี next_action และ retry_at การกู้คืนการยืนยันตัวตนต้องกลับสู่การดำเนินการเดิม ข้อผิดพลาดด้านสิทธิ์ต้องแก้ด้วยสิทธิ์เข้าถึงที่ถูกต้อง ไม่ใช่อินเทอร์เฟซอื่น ต้องเคารพขีดจำกัดอัตราและข้อจำกัดความสามารถ คำขอที่ลองใหม่ได้ไม่ได้อนุมัติการเผยแพร่ใหม่หรือคีย์ทดแทน
ankk auth logout --environment production --connection OAUTH_CONNECTION_IDการออกจากระบบรายงานการเพิกถอนบนเซิร์ฟเวอร์แยกจากการลบข้อมูลรับรองในเครื่อง หากยังไม่ยืนยันการเพิกถอนบนเซิร์ฟเวอร์ ให้เพิกถอนการเชื่อมต่อเก่าจากการตั้งค่า ANKK หรือการเชื่อมต่อที่ยังใช้ได้อีกอัน การลบการเชื่อมต่อ OAuth ไม่ยกเลิกการเผยแพร่ที่รับแล้วหรือลบสื่อที่เป็นของแบรนด์
ใช้ MCP และ Skills
หัวข้อที่มีชื่อว่า “ใช้ MCP และ Skills”MCP ใช้ OAuth ของผู้ใช้ที่ https://api.ankk.app/mcp/v2 โฮสต์ต้องมีไคลเอนต์ที่ลงทะเบียน การระบุ 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