โพสต์ข้ามไปยังเพจ Facebook หลายเพจ

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

การโพสต์ข้ามไม่สามารถใช้กับโปรไฟล์ส่วนตัวได้ แต่สามารถใช้ได้กับเพจและโปรไฟล์มืออาชีพเท่านั้น นอกจากวิดีโอถ่ายทอดสดแล้ว การโพสต์ข้ามยังสามารถใช้กับวิดีโอ VOD ได้อีกด้วย

วิธีการทำงาน

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

  1. ผู้ใช้แอพต้องสามารถดำเนินงาน CREATE_CONTENT บนเพจได้
  2. ผู้ใช้แอพจะต้องให้สิทธิ์การอนุญาตต่อไปนี้แก่แอพของคุณโดยใช้การเข้าสู่ระบบด้วย Facebook
    • pages_manage_posts
    • pages_read_user_content
    • pages_manage_engagement
    • pages_show_list
    • publish_video
  3. ผู้ใช้แอพต้อง กำหนดความสัมพันธ์ในการโพสต์ข้ามกับเพจหรือโปรไฟล์มืออาชีพอื่นๆ
  4. ค้นหาเพจที่มีสิทธิ์ในการโพสต์ข้าม

กำหนดความสัมพันธ์ในการโพสต์ข้าม

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

ขั้นตอนที่ 1: ส่งคำขอโพสต์ข้าม

เมื่อจะส่งคำขอโพสต์ข้าม ให้ส่งคำขอ POST ไปยังตำแหน่งข้อมูล /<YOUR_PAGE_ID> โดยระบุพารามิเตอร์ดังต่อไปนี้

  • begin_crossposting_handshake ตั้งค่าไว้ในอาร์เรย์พร้อมรายการเพจที่คั่นด้วยเครื่องหมายจุลภาค ซึ่งมีการตั้งค่า partner_page_id เป็น ID ของเพจที่คุณจะส่งคำขอให้ และตั้งค่า allow_live เป็น true

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

ตัวอย่างโค้ดต่อไปนี้ได้รับการจัดรูปแบบเพื่อให้อ่านได้ง่าย
curl -i -X POST "https://graph.facebook.com/v21.0<PAGE_1_ID> \
      ?begin_crossposting_handshake=[{partner_page_id:<PAGE_2_ID>,allow_live:true}]"

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

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

{
  "success": true
}

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

ยอมรับคำขอโพสต์ข้าม

หากต้องการยอมรับคำขอโพสต์ข้ามวิดีโอบนเพจของคุณจากเพจอื่น ให้ส่งคำขอ POST ไปยังตำแหน่งข้อมูล /<ID> โดยที่ตั้งค่าพารามิเตอร์ accept_crossposting_handshake เป็น ID ของเพจที่ส่งคำขอ และตั้งค่า allow_live เป็น true

ตัวอย่างโค้ดต่อไปนี้ได้รับการจัดรูปแบบเพื่อให้อ่านได้ง่าย
curl -X POST "https://graph.facebook.com/v21.0/<PAGE_2_ID>
    ?accept_crossposting_handshake=[{partner_page_id:<PAGE_1_ID>, allow_live:true}]"

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

หากต้องการปฏิเสธคำขอ ให้ตั้งค่า allow_live เป็น false

ค้นหาเพจที่มีสิทธิ์ในการโพสต์ข้าม

หากต้องการค้นหาเพจที่ผู้ใช้แอพของคุณมีสิทธิ์อนุญาตสำหรับโพสต์ข้าม ให้ส่งคำขอ GET ไปยังตำแหน่งข้อมูล /<PAGE_ID>/crosspost_whitelisted_pages โดยระบุฟิลด์ต่อไปนี้

  • allows_live_crossposts
  • id
  • name (ระบุหรือไม่ก็ได้)
curl "https://graph.facebook.com/v21.0/<PAGE_ID>/crosspost_whitelisted_pages" \
  -d "fields=id,name,allows_live_crossposts" 

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

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

{
  "data": [
    {
      "id": "107738621396466",
      "name": "Crossposting Page C",
      "allows_live_crossposts": false
    },
    {
      "id": "106589754846067",
      "name": "Crossposting Page B",
      "allows_live_crossposts": true
    },
    {
      "id": "106343288214714",
      "name": "Crossposting Target X",
      "allows_live_crossposts": true,
    }
  ],
  "paging": {
    "cursors": {
      "before": "&lt;PAGE_CURSOR>",
      "after": "&lt;PAGE_CURSOR>"
    }
  }
}

การเพิ่มการดำเนินการโพสต์ข้ามลงในวิดีโอถ่ายทอดสด

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

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

เมื่อเราทราบแล้วว่ามีเพจใดบ้างที่สามารถโพสต์ข้ามได้ เราก็จะเพิ่ม crossposting_actions ลงในอ็อบเจ็กต์ LiveVideo ได้ ซึ่งการดำเนินการโพสต์ข้ามแต่ละรายการเป็นตัวกำหนดว่าจะสามารถโพสต์ข้ามวิดีโอถ่ายทอดสดได้หรือไม่ และควรโพสต์วิดีโอดังกล่าวไปยังเพจเป้าหมายโดยอัตโนมัติหรือไม่

ให้ส่งคำขอ POST /{video-id} เพื่ออัพเดตวิดีโอ

curl -i -X POST \
 "https://graph.facebook.com/v10.0/112103234301221?fields=crosspost_shared_pages,crossposted_broadcasts%7Bstatus,from%7Bname%7D%7D&access_token=${access_token}" \
 -H "Content-Type: application/json" \
 -d @- << HEREDOC
{"crossposting_actions": [
  {
    "page_id": "107738621396466",
    "action": "enable_crossposting"
  },
  {
    "page_id": "106589754846067",
    "action": "enable_crossposting_and_create_post"
  },
  {
    "page_id": "106343288214714",
    "action": "disable_crossposting"
  }
]}
HEREDOC
GraphRequest request = GraphRequest.newPostRequest(
  accessToken,
  "/112103234301221",
  new JSONObject("{\"crossposting_actions\":\"[\\n  {\\n    \\\"page_id\\\": \\\"107738621396466\\\",\\n    \\\"action\\\": \\\"enable_crossposting\\\"\\n  },\\n  {\\n    \\\"page_id\\\": \\\"106589754846067\\\",\\n    \\\"action\\\": \\\"enable_crossposting_and_create_post\\\"\\n  },\\n  {\\n    \\\"page_id\\\": \\\"106343288214714\\\",\\n    \\\"action\\\": \\\"disable_crossposting\\\"\\n  }\\n]\"}"),
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/112103234301221"
           parameters:@{ @"fields": @"crosspost_shared_pages,crossposted_broadcasts{status,from{name}}",@"crossposting_actions": @"[
  {
    "page_id": "107738621396466",
    "action": "enable_crossposting"
  },
  {
    "page_id": "106589754846067",
    "action": "enable_crossposting_and_create_post"
  },
  {
    "page_id": "106343288214714",
    "action": "disable_crossposting"
  }
]",}
           HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/112103234301221',
  'POST',
  {"fields":"crosspost_shared_pages,crossposted_broadcasts{status,from{name}}","crossposting_actions":"[\n  {\n    \"page_id\": \"107738621396466\",\n    \"action\": \"enable_crossposting\"\n  },\n  {\n    \"page_id\": \"106589754846067\",\n    \"action\": \"enable_crossposting_and_create_post\"\n  },\n  {\n    \"page_id\": \"106343288214714\",\n    \"action\": \"disable_crossposting\"\n  }\n]"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->post(
    '/112103234301221',
    array (
      'fields' => 'crosspost_shared_pages,crossposted_broadcasts{status,from{name}}',
      'crossposting_actions' => '[
        {
          "page_id": "107738621396466",
          "action": "enable_crossposting"
        },
        {
          "page_id": "106589754846067",
          "action": "enable_crossposting_and_create_post"
        },
        {
          "page_id": "106343288214714",
          "action": "disable_crossposting"
        }
      ]'
    ),
    '{access-token}'
  );
} catch(FacebookExceptionsFacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(FacebookExceptionsFacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}
$graphNode = $response->getGraphNode();

การดำเนินการเหล่านี้แสดงตัวเลือกที่สามารถใช้งานได้ โดยตัวเลือกแรกจะอนุญาตให้เพจที่หนึ่ง (107738621396466) สามารถโพสต์ข้ามวิดีโอจาก ครีเอเตอร์สตูดิโอหรือ API ได้ แต่จะไม่โพสต์ข้ามวิดีโอไปยังเพจอื่นโดยอัตโนมัติ ตัวเลือกที่สองจะป้องกันไม่ให้เพจที่สอง (106589754846067) โพสต์ข้ามวิดีโอ และตัวเลือกที่สามจะโพสต์วิดีโอไปยังเพจเป้าหมาย (106343288214714) โดยอัตโนมัติ

ตัวอย่างเมื่อดำเนินการสำเร็จ

ระบบจะส่งคืนอ็อบเจ็กต์ LiveVideo และเราได้ใช้จุดเชื่อมโยง crosspost_shared_pages เพื่อดูว่ามีเพจใดบ้างที่สามารถโพสต์ข้ามได้ และใช้จุดเชื่อมโยง crossposted_broadcasts เพื่อดูเพจต่างๆ ที่มีการเผยแพร่โพสต์ของเราไปแล้ว

สิ่งสำคัญที่ควรทราบ

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

{
  "crosspost_shared_pages": {
    "data": [
      {
        "name": "Crossposting Page C",
        "id": "107738621396466"
      },
      {
        "name": "[FB Test Page] Crossposting Page B",
        "id": "106589754846067"
      }
    ]
  },
  "crossposted_broadcasts": {
    "data": [
      {
        "status": "UNPUBLISHED",
        "from": {
          "name": "[FB Test Page] Crossposting Page B",
          "id": "106589754846067"
        },
        "id": "114820814022961"
      }
    ]
  },
  "id": "112103234301221"
}

ตัวอย่างข้อผิดพลาด

หากมี crossposting_options รายการใดรายการหนึ่งไม่ถูกต้อง คำขอทั้งหมดจะล้มเหลว และจะไม่มีการโพสต์ข้ามที่ดำเนินการสำเร็จ

{
  "error": {
    "message": "Fatal",
    "type": "OAuthException",
    "code": -1,
    "error_subcode": 1363103,
    "is_transient": false,
    "error_user_title": "Invalid Parameters",
    "error_user_msg": "The request does not specify valid parameters, no action has been taken.",
    "fbtrace_id": "AnI03n5n0Px-ihrZjkWMeTP"
  }
}