Facebook Stories API จาก Meta

เอกสารนี้จะแสดงวิธีใช้ Facebook Stories API เพื่อเผยแพร่สตอรี่บนเพจ Facebook

เมื่อต้องการเผยแพร่สตอรี่ แอพของคุณจะต้องทำตามขั้นตอนต่อไปนี้

  1. อัพโหลดสื่อของผู้ใช้แอพไปยังเซิร์ฟเวอร์ Meta
  2. เผยแพร่สื่อดังกล่าวไปยังเพจของผู้ใช้แอพเป็นสตอรี่

ก่อนเริ่มต้น

คู่มือนี้จะถือว่าคุณได้อ่านภาพรวมของ API เพจ และใช้ส่วนประกอบที่จำเป็น รวมถึงทำความเข้าใจคู่มือเริ่มต้นใช้งานเรียบร้อยแล้ว

  • คุณจะต้องดำเนินการเข้าสู่ระบบด้วย Facebook หรือการเข้าสู่ระบบด้วย Facebook สำหรับธุรกิจ เพื่อขอสิทธิ์การอนุญาตที่จำเป็นในการเข้าถึงเพจ Facebook จากผู้ใช้แอพของคุณ และรับโทเค็นการเข้าถึงเพจ
    • ผู้ใช้แอพของคุณจะต้องสามารถดำเนินงาน CREATE_CONTENT บนเพจที่แสดงในโทเค็นการเข้าถึงเพจ และให้สิทธิ์การอนุญาตแก่แอพของคุณดังต่อไปนี้

      • pages_manage_posts
      • pages_read_engagement
      • pages_show_list

    หากคุณใช้ผู้ใช้ระบบธุรกิจในคำขอ API ของคุณ จำเป็นต้องมีสิทธิ์การอนุญาต business_management ด้วย

    ข้อกำหนดของสื่อ

    คุณต้องจัดเตรียมภาพถ่ายหรือวิดีโอที่ตรงตามข้อกำหนดต่อไปนี้

    ข้อกำหนดเฉพาะของรูปภาพ

    คุณสมบัติข้อกำหนดเฉพาะ

    ประเภทไฟล์

    .jpeg, .bmp, .png, .gif, .tiff

    ขนาดไฟล์

    ไฟล์ต้องมีขนาดไม่เกิน 4 MB สำหรับไฟล์ .png เราขอแนะนำว่าไม่ควรมีขนาดเกิน 1 MB ไม่เช่นนั้นรูปภาพอาจแตกเป็นพิกเซล

    ข้อกำหนดเฉพาะของวิดีโอ

    คุณสมบัติข้อกำหนดเฉพาะ

    ประเภทไฟล์

    แนะนำให้ใช้ .mp4

    อัตราส่วนกว้างยาว

    9 x 16

    ความละเอียด

    แนะนำว่าควรมีความละเอียดที่ 1080 x 1920 พิกเซล ความละเอียดขั้นต่ำคือ 540 x 960 พิกเซล

    อัตราเฟรม

    24 ถึง 60 เฟรมต่อวินาที

    ระยะเวลา

    3 ถึง 90 วินาที

    คลิป Reels ที่เผยแพร่เป็นสตอรี่บนเพจ Facebook จะต้องมีความยาวไม่เกิน 60 วินาที

    การตั้งค่าวิดีโอ

    • ระบบการเก็บข้อมูลสีแบบดิจิทัล: 4:2:0
    • กลุ่มเฟรมภาพ (GOP) แบบปิด (2-5 วินาที)
    • การบีบอัด – H.264, H.265 (และยังรองรับ VP9, AV1 อีกด้วย)
    • อัตราเฟรมคงที่
    • การสแกนแบบโพรเกรสซีฟ

    การตั้งค่าเสียง

    • อัตราบิตของเสียง – 128kbs+
    • ช่องสัญญาณ – Stereo
    • การเข้ารหัส – AAC แบบ Low Complexity
    • อัตราความถี่ – 48kHz

    ข้อจำกัด

    • คุณไม่สามารถใช้รูปภาพหรือวิดีโอที่อัพโหลดเป็นสตอรี่ในโพสต์ที่เผยแพร่ก่อนหน้านี้ได้
    • สตอรี่แบบวิดีโอต้องมีความยาวไม่เกิน 60 วินาที
    • หากต้องการรวมสตอรี่ที่จัดเก็บไว้ในคำขอ GET เพื่อดูรายการสตอรี่ คุณจะต้องเปิดคลังสตอรี่ Facebook

    หลักปฏิบัติที่ดีที่สุด

    เมื่อทดสอบการเรียกใช้ API คุณสามารถเพิ่มพารามิเตอร์ access_token ที่ตั้งเป็นโทเค็นการเข้าถึงของคุณได้ ทั้งนี้ เมื่อดำเนินการเรียกใช้แบบปลอดภัยจากแอพของคุณ ให้ใช้คลาสโทเค็นการเข้าถึง

    ตัวอย่างโค้ดภายในเอกสารนี้มีการจัดรูปแบบเพื่อให้อ่านง่าย แทนที่ค่าที่เป็นตัวหนาและตัวเอียง เช่น page_id ด้วยค่าของคุณ

    สตอรี่แบบวิดีโอ

    เมื่อต้องการเผยแพร่สตอรี่แบบวิดีโอบนเพจ Facebook คุณจะต้องเริ่มต้นเซสชั่นการอัพโหลดวิดีโอด้วยเซิร์ฟเวอร์ Meta แล้วอัะโหลดวิดีโอไปยังเซิร์ฟเวอร์ Meta จากนั้นก็เผยแพร่สตอรี่แบบวิดีโอ

    ขั้นตอนที่ 1: เริ่มต้นเซสชั่น

    เมื่อต้องการเริ่มต้นเซสชั่นการอัพโหลด ให้ส่งคำขอ POST ไปยังตำแหน่งข้อมูล /page_id/video_stories โดยที่ page_id คือ ID เพจ Facebook ของคุณ โดยตั้งค่าพารามิเตอร์ upload_phase เป็น start

    ตัวอย่างคำขอ

    curl -X POST "https://graph.facebook.com/v24.0/page_id/video_stories" \
          -d '{
               "upload_phase":"start",
             }'
    

    หากทำสำเร็จ แอพของคุณจะได้รับการตอบกลับแบบ JSON ที่มี ID สำหรับวิดีโอและ URL ของ Facebook ที่คุณจะอัพโหลดวิดีโอ

    ตัวอย่างการตอบกลับ

    {
      "video_id": "video_id",
      "upload_url": "https://rupload.facebook.com/video-upload/v24.0/video_id",
    }  

    ขั้นตอนที่ 2: อัพโหลดวิดีโอ

    ตอนนี้เมื่อคุณเริ่มต้นเซสชั่นการอัพโหลดและได้รับ URL การอัพโหลดแล้ว คุณก็จะสามารถอัพโหลดวิดีโอของคุณได้ โดยคุณสามารถอัพโหลดได้ดังนี้

    อัพโหลดไฟล์ที่โฮสต์

    เมื่อต้องการอัพโหลดไฟล์ที่โฮสต์ ให้ส่งคำขอ POST ไปยังตำแหน่งข้อมูล upload_url ที่คุณได้รับในขั้นตอนการเริ่มต้นพร้อมด้วยพารามิเตอร์ต่อไปนี้

    • file_url ที่ตั้งค่าเป็น URL สำหรับไฟล์วิดีโอของคุณ

    ดูให้แน่ใจว่าโฮสต์คือ rupload.facebook.com

    ตอนนี้ API จะปฏิเสธไฟล์ที่โฮสต์บนเว็บไซต์ที่จำกัดการเข้าถึงผ่าน robots.txt ผู้พัฒนาต้องตรวจสอบให้แน่ใจว่าเว็บไซต์ที่โฮสต์อนุญาตให้ตัวแทนผู้ใช้ “facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)” ดึงไฟล์ที่โฮสต์ได้

    ไฟล์ที่โฮสต์บน Meta CDN (เช่น URL fbcdn) จะถูกปฏิเสธ ผู้พัฒนาสามารถใช้ฟีเจอร์โพสต์ข้ามเพื่อเผยแพร่วิดีโอในหลายๆ เพจแทนได้โดยไม่ต้องอัพโหลดวิดีโอลงทีละเพจ โปรดดูคำแนะนำโดยละเอียดเกี่ยวกับการโพสต์ข้าม

    ตัวอย่างคำขอ
    curl -X POST "https://rupload.facebook.com/video-upload/v24.0/video_id" \
    	-H "file_url: https://some.cdn.url/video.mp4"
    

    อัพโหลดไฟล์จากในเครื่อง

    เมื่อต้องการอัพโหลดไฟล์จากในเครื่อง ให้ส่งคำขอ POST ไปยังตำแหน่งข้อมูล upload_url ที่คุณได้รับในขั้นตอนการเริ่มต้นพร้อมด้วยพารามิเตอร์ต่อไปนี้

    • offset ที่ตั้งค่าเป็น 0
    • file_size ที่ตั้งเป็นขนาดของวิดีโอที่จะอัพโหลดโดยมีหน่วยเป็นไบต์
    ตัวอย่างคำขอ
    curl -X POST "https://rupload.facebook.com/video-upload/v24.0/video_id" \
    	-H "offset: 0" \
            -H "file_size: file_size_in_bytes" \
    	--data-binary "@/path/to/file/my_video_file.mp4"
    

    เมื่ออัพโหลดเสร็จ แอพของคุณจะได้รับการตอบกลับแบบ JSON โดยที่ตั้งค่า success เป็น true

    ตัวอย่างการตอบกลับของการอัพโหลด
    {
        "success": true
    }  

    การอัพโหลดหยุดชะงัก

    หากการอัพโหลดวิดีโอหยุดชะงัก คุณสามารถเริ่มอัพโหลดใหม่หรือดำเนินการอัพโหลดต่อจากที่ค้างไว้ก็ได้

    • หากต้องการเริ่มอัพโหลดใหม่ ให้ส่งคำขอ POST อีกครั้งและตั้งค่า offset เป็น 0
    • หากต้องการดำเนินการอัพโหลดต่อจากที่ค้างไว้ ให้ส่งคำขอ POST อีกครั้งโดยตั้งค่า offset เป็นค่า bytes_transfered จากการตรวจสอบสถานะ

    ดูสถานะการอัพโหลด

    หากต้องการตรวจสอบสถานะวิดีโอของคุณในระหว่างการอัพโหลดการหรือเผยแพร่ ให้ส่งคำขอ GET ไปยังตำแหน่งข้อมูล /video_id พร้อมด้วยพารามิเตอร์ต่อไปนี้

    • fields ที่ตั้งค่าเป็น status
    ตัวอย่างคำขอ
    curl -X GET "https://graph.facebook.com/v24.0/video_id" \
    	-d "fields=status"
    

    เมื่อดำเนินการสำเร็จ แอพของคุณจะได้รับการตอบกลับแบบ JSON ที่มีองค์ประกอบดังต่อไปนี้

    • อ็อบเจ็กต์ status ที่ประกอบด้วย
      • video_status ที่มีค่าเป็น ready, processing, expired หรือ error
      • อ็อบเจ็กต์ uploading_phase ที่มีคู่คีย์-ค่าต่อไปนี้
        • status ที่ตั้งค่าเป็น in_progress, not_started, complete หรือ error
        • bytes_transfered ที่ตั้งค่าเป็นไบต์ที่ได้รับการอัพโหลด โดยสามารถใช้เป็นค่าสำหรับ offset ได้หากการอัพโหลดหยุดชะงัก
      • อ็อบเจ็กต์ processing_phase ที่มีคู่คีย์-ค่าต่อไปนี้
        • status ที่ตั้งค่าเป็น in_progress, not_started, complete หรือ error
      • อ็อบเจ็กต์ processing_phase ที่มีคู่คีย์-ค่าต่อไปนี้
        • status ที่ตั้งค่าเป็น in_progress, not_started, complete หรือ error
        • publish_status ที่ตั้งค่าเป็น published หรือ not_published
        • publish_time ที่ตั้งค่าเป็นการประทับเวลา UNIX ของเวลาจริงหรือเวลาที่เผยแพร่
    ตัวอย่างการตอบกลับ
    การตอบกลับต่อไปนี้จะแสดงไฟล์ที่อัพโหลดสำเร็จแล้ว
    {
      "status": {
        "video_status": "processing", 
        "uploading_phase": {
          "status": "in_progress", 
          "bytes_transfered": 50002 
        },
        "processing_phase": {
          "status": "not_started"
        }
        "publishing_phase": {
          "status": "not_started",
          "publish_status": "published",
          "publish_time": 234523452 
        }
      }
    }
    
    การตอบกลับต่อไปนี้จะแสดงว่ามีข้อผิดพลาดเกิดขึ้นในขั้นตอนการประมวลผล
    {
      "status": {
        "video_status": "processing", 
        "uploading_phase": {
          "status": "complete"
        },
        "processing_phase": {
          "status": "not_started",
          "error": {
            "message": "Resolution too low. Video must have a minimum resolution of 540p."
          }
        }
        "publishing_phase": {
          "status": "not_started"
        }
      }
    }
    

    ขั้นตอนที่ 3 เผยแพร่สตอรี่แบบวิดีโอ

    หากต้องการเผยแพร่สตอรี่แบบวิดีโอไปยังเพจของคุณ คุณจะส่งคำขอ POST ไปยังตำแหน่งข้อมูล /page_id/video_stories พร้อมด้วยพารามิเตอร์ต่อไปนี้

    • video_id ที่ตั้งเป็น ID สำหรับวิดีโอที่อัพโหลดของคุณ
    • upload_phase ที่ตั้งค่าเป็น finish

    ตัวอย่างคำขอ

    curl -X POST "https://graph.facebook.com/v24.0/page_id/video_stories" \
          -d '{
               "video_id": "video_id",
               "upload_phase": "finish"
             }'
    

    เมื่อดำเนินการสำเร็จ แอพของคุณจะได้รับการตอบกลับแบบ JSON ที่มีคู่คีย์-ค่าต่อไปนี้

    • success ที่ตั้งเป็น true
    • post_id ที่ตั้งเป็น ID สำหรับโพสต์ที่เป็นสตอรี่ของคุณ

    ตัวอย่างการตอบกลับ

    {
      "success": true,
      "post_id": 1234
    }
    

    สตอรี่แบบรูปภาพ

    ขั้นตอนที่ 1 อัพโหลดรูปภาพ

    ไปที่ข้อมูลอ้างอิงเกี่ยวกับโพสต์บนเพจ เพื่อเรียนรู้วิธีอัพโหลดรูปภาพไปยังเซิร์ฟเวอร์ของ Meta โดยใช้ตำแหน่งข้อมูล /page_id/photos อย่าลืมระบุพารามิเตอร์ published และตั้งค่าเป็น false

    ขั้นตอนที่ 2 เผยแพร่สตอรี่แบบรูปภาพ

    หากต้องการเผยแพร่สตอรี่แบบรูปภาพไปยังเพจของคุณ คุณจะส่งคำขอ POST ไปยังตำแหน่งข้อมูล /page_id/video_stories พร้อมด้วยพารามิเตอร์ต่อไปนี้

    • photo_id ที่ตั้งค่าเป็น ID สำหรับรูปภาพที่อัพโหลดของคุณ

    ตัวอย่างคำขอ

    curl -X POST "https://graph.facebook.com/v24.0/page_id/photo_stories" \
          -d '{
               "photo_id": "photo_id"
             }'
    

    เมื่อดำเนินการสำเร็จ แอพของคุณจะได้รับการตอบกลับแบบ JSON ที่มีคู่คีย์-ค่าต่อไปนี้

    • success ที่ตั้งเป็น true
    • post_id ที่ตั้งเป็น ID สำหรับโพสต์ที่เป็นสตอรี่ของคุณ

    ตัวอย่างการตอบกลับ

    {
      "success": true,
      "post_id": 1234
    }
    

    ดูสตอรี่

    หากต้องการดูรายการสตอรี่ทั้งหมดสำหรับเพจและข้อมูลเกี่ยวกับแต่ละสตอรี่ ให้ส่งคำขอ GET ไปที่ตำแหน่งข้อมูล /page_id/stories โดยที่ page_id คือ ID สำหรับเพจที่คุณต้องการจะดู

    ตัวอย่างคำขอ

        
    curl -i -X GET "https://graph.facebook.com/v24.0/page_id/stories"
    

    เมื่อดำเนินการสำเร็จ แอพของคุณจะได้รับการตอบกลับแบบ JSON ที่มีอาร์เรย์ของอ็อบเจ็กต์ โดยที่แต่ละอ็อบเจ็กต์มีข้อมูลเกี่ยวกับสตอรี่ที่เผยแพร่บนเพจ แต่ละอ็อบเจ็กต์จะประกอบด้วยคู่คีย์-ค่าต่อไปนี้

    • post_id ที่ตั้งเป็น ID สำหรับโพสต์ที่เป็นสตอรี่ที่เผยแพร่
    • status ที่ตั้งเป็น PUBLISHED, ARCHIVED
    • creation_time ที่ตั้งเป็นการประทับเวลา UNIX ในขณะที่มีการเผยแพร่สตอรี่
    • media_type ที่ตั้งเป็น video หรือ photo
    • media_id ที่ตั้งเป็น ID สำหรับวิดีโอหรือรูปภาพในโพสต์ที่เป็นสตอรี่
    • url ที่ตั้งเป็น URL ของ Facebook สำหรับโพสต์ที่เป็นสตอรี่ เช่น https://facebook.com/stories/8283482737484972

    ตัวอย่างการตอบกลับ

    {
      "data": [
        {
          "post_id": "post_id",
          "status": "PUBLISHED",
          "creation_time": "123456",
          "media_type": "video",
          "media_id": "video_id",
          "url": "https://facebook.com/stories…"
        },
        {
          "post_id": "post_id",
          "status": "PUBLISHED",
          "creation_time": "123456",
          "media_type": "photo",
          "media_id": "photo_id",
          "url": "https://facebook.com/stories…"
        },
        {
          "post_id": "post_id",
          "status": "ARCHIVED",
          "creation_time": "123456",
          "media_type": "photo",
          "media_id": "photo_id",
          "url": "https://facebook.com/stories…"
        },
        ...
      ],
    }
    

    คุณสามารถกรองสตอรี่ตามสถานะ การเผยแพร่หรือการจัดเก็บ และวันที่ได้โดยใช้พารามิเตอร์ since และ until