โพสต์บล็อกของตัวเองลงโซเชียลทุกวันมันกินเวลากว่าที่คิด เขียนแคปชั่นสองภาษา หารูป วางลิงก์ให้ถูกที่ กดทีละแพลตฟอร์ม วันละครึ่งชั่วโมงที่ควรเอาไปทำของจริง
เราอยากให้ผู้ช่วย AI ทำแทน แต่มีจังหวะนึงยังติดในหัว มันเคยบอกว่าโพสต์เรียบร้อยแล้วทั้งที่ยังไม่ได้ขึ้น พอเชื่อคำว่าเสร็จโดยไม่ตรวจ ก็เพิ่งมารู้ทีหลังว่าหาย
โจทย์จริงคืองานโพสต์สาธารณะมันกดแล้วถอนยาก คนเห็นไปแล้ว เพราะงั้นคำว่าอัตโนมัติกับงานแบบนี้ไม่ใช่แค่เขียนสคริปต์ให้ยิงได้ แต่ต้องวางด่านกันพังไว้ด้วย โพสต์นี้เล่าทั้งวิธีตั้งค่าจริงทีละขั้นแบบทำตามได้ และสามด่านที่ทำให้ปล่อยให้ระบบโพสต์แทนได้โดยไม่ต้องลุ้น ทุกอย่างทำเองจริง รวมถึงจุดที่เราติดระหว่างทางด้วย
ช่วงที่ 1สองแพลตฟอร์ม คนละกติกา
อย่าคิดว่า Facebook กับ LinkedIn เหมือนกันแค่เปลี่ยนปลายทาง สามจุดที่ต่างจริงและพลาดง่าย
หนึ่ง Facebook โพสต์ผ่าน API ได้เฉพาะเพจ ลงโปรไฟล์ส่วนตัวไม่ได้ ส่วน LinkedIn กลับกัน โพสต์ลงโปรไฟล์ส่วนตัวได้ผ่านสิทธิ์ชื่อ w_member_social
สอง ลิงก์บทความวางคนละที่ Facebook ลดการมองเห็นโพสต์ที่มีลิงก์ในตัวข้อความ ลิงก์เลยควรไปอยู่ในคอมเมนต์แรก ส่วน LinkedIn ลิงก์ในตัวโพสต์ก็โดนลด ทางที่เจ็บน้อยกว่าคือไปไว้ที่ส่วน Featured หรือไบโอ กติกาเรื่องลิงก์เป็นของใครของมัน
สาม เลขระบุเพจของ Facebook มีสองตัว ตัวที่เห็นใน URL หน้าเพจ กับตัวที่ API ใช้จริง คนละเลขกัน หยิบผิดยิงไม่ออก
ช่วงที่ 2ตั้งค่า Facebook ทีละขั้น
- สร้างแอปที่ developers.facebook.com เลือกชนิด Business ตราบใดที่เราเป็นแอดมินเพจเอง โหมด Development โพสต์ลงเพจตัวเองได้เลย ไม่ต้องรอ App Review
- เปิด Graph API Explorer ขอสิทธิ์
pages_show_listpages_manage_postspages_read_engagementแล้วกด Generate Access Token จะได้ token ของผู้ใช้ อายุสั้นประมาณหนึ่งถึงสองชั่วโมง จุดที่เราเสียเวลาหา คือเมนู User Token ใน dropdown ไม่ต้องไปตามหามัน กด Generate Access Token ตรง ๆ ได้เลย dropdown ตัวนั้นมีไว้สลับชนิด token หลังจากมี token แล้ว ไม่ใช่ก่อนสร้าง - แลกให้เป็น token ถาวร เอา token สั้นไปแลกเป็น token ยาวอายุหกสิบวันก่อน แล้วเรียก
/me/accountsด้วย token ยาวนั้น มันจะคืน token ของเพจที่ไม่หมดอายุมาให้ เก็บตัวนี้ไว้ใช้โพสต์ - จุดที่พลาดง่าย เลขเพจที่
/me/accountsคืนมา คือเลขที่ API ใช้จริง อย่าหยิบเลขจาก URL หน้าเพจ มันคนละตัวกัน ให้ระบบดึงเลขที่ถูกมาเอง ดีกว่าตาเราเดา - โพสต์ ยิง
POST /{page-id}/photosพร้อมข้อความและ url ของรูป (โพสต์มีรูปถูกดันมากกว่าตัวอักษรล้วน) จะได้เลข post กลับมา แล้วยิงPOST /{post-id}/commentsวางลิงก์บทความเป็นคอมเมนต์แรก - ตรวจ อ่านโพสต์นั้นกลับมาจาก Facebook ยืนยันว่ามีข้อความ มีรูป มีคอมเมนต์จริง
ช่วงที่ 3ตั้งค่า LinkedIn ทีละขั้น
LinkedIn ยุ่งกว่าหนึ่งสเต็ปเพราะใช้ OAuth เต็มรูปแบบ
- สร้างแอปที่ linkedin.com/developers ระบบบังคับให้ผูกกับ Company Page สร้างเพจเปล่าไว้ก่อนได้ โพสต์จริงลงโปรไฟล์เรา ไม่ได้ลงเพจนี้
- ยืนยันแอปในแท็บ Settings ข้อนี้สำคัญและคนข้ามบ่อย ถ้าไม่ยืนยัน product จะยังไม่ทำงาน
- แท็บ Products เพิ่มสองตัว
Share on LinkedInปลดสิทธิ์โพสต์w_member_socialและSign In with LinkedIn using OpenID Connectปลดสิทธิ์ดึงรหัสตัวตนของเรา - แท็บ Auth เก็บ Client ID กับ Client Secret และใส่ redirect URL ให้ตรงเป๊ะกับที่จะใช้
- ทำ OAuth เปิดลิงก์ขออนุญาตในเบราว์เซอร์ กดอนุมัติ จะได้ code กลับมา แล้วเอา code ไปแลกเป็น token ที่ฝั่งเซิร์ฟเวอร์ จากนั้นเรียก
/v2/userinfoเพื่อเอารหัสตัวตน (person URN) มาระบุว่าใครเป็นคนโพสต์ - โพสต์ ยิง
POST /v2/ugcPostsอย่าลืมใส่ headerX-Restli-Protocol-Version: 2.0.0
จุดที่เราติดนานที่สุดทั้ง session คือ step 5 เปิดลิงก์ขออนุญาตแล้วเจอ unauthorized_scope_error หรือหน้า Bummer something went wrong ค้างหลายรอบ สิ่งที่ได้เรียนตามลำดับ
- หน้า error นี้เป็นแบบรวม ขึ้นได้ทั้งกรณีสิทธิ์ไม่พอและ redirect URL ไม่ตรง อาการเดียวสาเหตุได้หลายอย่าง อย่าด่วนสรุป
- LinkedIn ปฏิเสธทั้งชุดถ้าสิทธิ์ที่ขอขาดแม้แต่ตัวเดียว วิธีหาตัวที่ขาดแบบชี้ชัดคือลองเปิดลิงก์ที่ขอทีละสิทธิ์ ตัวไหนพังคือ product ตัวนั้นยังไม่ติด เป็นการตัดตัวแปรทีละตัวแทนการเดา
- สิทธิ์จะโผล่ในแท็บ Auth ก็ต่อเมื่อ product ถูกเพิ่มแล้ว ถ้าไปหา scope ก่อนเพิ่ม product จะว่างเปล่าแล้วงงว่าหายไปไหน
- ตัวที่คนข้ามบ่อยสุดคือยืนยันแอปในแท็บ Settings แต่กรณีของเราตลกตรงที่ product ขึ้นว่าเพิ่มแล้วทั้งคู่ แต่ยังพังอยู่ดี ตัวการจริงกลายเป็น redirect URL ที่ยังไม่ได้ลงทะเบียนให้ตรงเป๊ะ พอใส่ให้ตรงก็ผ่านทันที บทเรียนคือเช็คให้ครบทุกชั้น อย่าหยุดที่สมมติฐานแรก
อีกข้อจำกัดที่เจอตอนใช้จริง ให้ AI ไปคอมเมนต์ลิงก์บนโพสต์ตัวเองผ่าน API ทำไม่ได้ ถ้าแอปไม่ได้เป็น partner ของ LinkedIn (Marketing Developer Platform) สิทธิ์ w_member_social โพสต์ share ได้แต่คอมเมนต์ไม่ได้ (เจอ 403) ทางที่ง่ายสุดสำหรับคนทำเองคือใส่ลิงก์ไว้ในตัวแคปชั่นเลย ต่างจาก Facebook ที่คอมเมนต์บนเพจตัวเองได้ฟรี
ช่วงที่ 4ทำให้มันอัตโนมัติ และ 3 ด่านกันพัง
ขั้นสุดท้ายคือให้มันยิงเองตามเวลา ใช้เครื่องที่เปิดทั้งวันตั้ง cron แต่ตรงนี้แหละที่ด่านกันพังสำคัญกว่าตัวสคริปต์
ด่าน 1 อัตโนมัติที่เวลา ไม่ใช่ที่การตัดสินใจ
กับดักที่ดึงดูดสุดคือให้ AI เขียนแคปชั่นเองแล้วโพสต์เองรวดเดียว นั่นคือยกการตัดสินใจที่ถอนไม่ได้ให้เครื่อง เส้นที่เราขีดคือแยกสองอย่าง การตัดสินว่าข้อความนี้ควรขึ้นสาธารณะไหมเป็นของคน ส่วนยิงตอนสิบโมงเป็นของเครื่อง วิธีทำคือมีคิวที่อนุมัติแล้ว แคปชั่นที่ผ่านตาเราเข้าคิวเท่ากับอนุมัติ cron แค่หยิบอันถึงคิวไปยิง คนยังอยู่ในลูปเรื่องเนื้อหา เครื่องรับแค่จังหวะเวลา อีกรายละเอียดคือสองแพลตฟอร์มยิงคนละเวลาเพราะคนอ่านคนละโซน ตั้งเวลาผูกกับเขตเวลาผู้อ่าน ไม่ใช่เวลากลางแล้วคำนวณเอง เพราะบางประเทศปรับเวลาตามฤดู ตั้งตายตัวจะเพี้ยนปีละสองครั้งแบบเงียบ ให้ตัวตั้งเวลารู้จักเขตเวลาเอง
ด่าน 2 เชื่อของจริง ไม่ใช่เชื่อคำตอบของตัวเอง
ย้อนกลับไปที่ AI บอกว่าเสร็จทั้งที่ยังไม่เสร็จ ตอนยิงคำสั่ง แพลตฟอร์มตอบว่ารับแล้ว แต่คำตอบตอนยิงกับสิ่งที่ขึ้นจริงบนหน้าเพจคนละเรื่องกัน ด่านนี้บังคับขั้นเดียว หลังโพสต์ให้อ่านกลับมาจากแพลตฟอร์มอีกที เห็นข้อความจริงรูปจริงคอมเมนต์จริงค่อยนับว่าเสร็จ ไม่มีอะไรจริงเพราะระบบบอกว่าจริง มันจริงเมื่อชี้หลักฐานที่ดูได้
ด่าน 3 รั่วแล้วเปลี่ยนกุญแจ ไม่ใช่ลบประวัติ
token ที่ใช้โพสต์เป็นความลับ ระหว่างตั้งระบบ มันถูกเขียนลงไฟล์ในโฟลเดอร์ที่ซิงค์ขึ้นที่เก็บโค้ดอัตโนมัติ ไม่กี่นาทีก็ถูกบันทึกและอัปขึ้นไปทั้งที่ยังไม่ทันรู้ตัว บทเรียนสองครึ่ง ครึ่งแรกกันไว้ก่อน ก่อนเขียนความลับลงที่ไหนที่มีการซิงค์อัตโนมัติ สั่งให้ที่นั่นเมินไฟล์ความลับก่อน ยืนยันว่ากฎมีผลจริง แล้วค่อยเขียน ลำดับสลับไม่ได้ ครึ่งหลังเมื่อรั่วไปแล้ว ของลับที่หลุดขึ้นที่เก็บโค้ด ต่อให้ลบไฟล์ทีหลัง ค่าที่หลุดยังอยู่ในประวัติ ทางแก้จริงคือเปลี่ยนกุญแจ ยกเลิก token เดิมให้ใช้ไม่ได้แล้วออกใหม่ พิสูจน์ว่าตัวเก่าตายจริงด้วยการลองเรียกแล้วต้องถูกปฏิเสธ พอตัวเก่าใช้ไม่ได้ ค่าที่ค้างในประวัติก็เป็นขยะ ไม่ใช่ความเสี่ยงอีกต่อไป
สรุปให้เอาไปใช้
ตั้งค่าให้ยิงได้คือครึ่งเดียว อีกครึ่งคือสามด่าน
- อัตโนมัติที่เวลา ไม่ใช่ที่การตัดสินใจ งานที่ถอนไม่ได้ ให้คนคุมจุดอนุมัติ เครื่องคุมจังหวะ
- เชื่อของจริง อ่านผลกลับมาจากปลายทาง อย่าเชื่อแค่คำตอบตอนสั่ง
- รั่วแล้วเปลี่ยนกุญแจ กันด้วยลำดับที่ถูกก่อนเขียนความลับ พลาดแล้วหมุน token ไม่ใช่ลบประวัติ
ถ้าคุณกำลังจะให้ AI หรือสคริปต์ทำงานที่ส่งผลออกสาธารณะแทน เริ่มจากถามว่าอะไรคือจุดที่ถอนคืนไม่ได้ แล้ววางคนไว้ตรงนั้นจุดเดียว ที่เหลือให้เครื่องวิ่งเต็มที่ ระบบจะเร็วขึ้นโดยที่ยังคุมได้
- ทุกขั้นตอนและด่านตรวจในโพสต์นี้มาจากการทำเองจริงบน productize.life (มิ.ย. 2026) รวมถึงตอนที่ติด
unauthorized_scope_errorของ LinkedIn และตอนที่ token หลุดขึ้นที่เก็บโค้ดโดยไม่ตั้งใจ - การโพสต์ลงเพจ Facebook ผ่าน API อ้างอิงเอกสารทางการ Meta, "Pages API" และ "Page Photos" developers.facebook.com/docs/pages-api/posts
- การโพสต์ลงโปรไฟล์ LinkedIn ผ่าน
w_member_socialและ/v2/ugcPostsอ้างอิง Microsoft Learn, "Share on LinkedIn" learn.microsoft.com/.../share-on-linkedin