الطلبات المُجمعة وغير المتزامنة

يمكنك استخدام الطلبات غير المتزامنة لإنشاء الإعلانات وإرسال العديد من طلبات الإعلانات دون الحاجة إلى تجميعها. وحدد عنوان URL للاستدعاء بعد اكتمال الطلبات، أو تحقق من حالة الطلب. ويمكنك الرجوع إلى الإعلان، المرجع.

علمًا بأن الطريقة الأكثر فعالية لإدارة الإعلانات هي عن طريق استخدام الطلبات المُجمعة. ويمكنك استخدامها في تنفيذ بعض الطلبات الأكثر شيوعًا.

الطلبات غير المتزامنة

على سبيل المثال، يمكنك الحصول على حالة مجموعة الطلبات غير المتزامنة:

curl -G \
  -d 'fields=name,success_count,error_count,is_completed' \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v21.0/<REQUEST_SET_ID>

يؤدي ذلك إلى إرجاع الحالة العامة الخاصة بمجموعة الطلبات غير المتزامنة باعتبارها كائنًا بلغة JSON. ولا تظهر كل الحقول افتراضيًا. وإذا كنت تريد أن يتضمن استعلامك حقولًا غير افتراضية، فحددها في fields، مثل fields=id,owner_id,name,total_count,success_count,error_count,is_completed.

الاسم الوصف

id

النوع: int (عدد صحيح)

يتم العرض افتراضيًا.

يمثل المعرف id لمجموعة الطلبات الحالية غير المتزامنة.

owner_id

النوع: int (عدد صحيح)

يتم العرض افتراضيًا.

يمثل الكائن الذي يتضمن مجموعة الطلبات غير المتزامنة هذه. وبالنسبة للطلبات غير المتزامنة في الإعلانات، يكون المعرف owner_id هو معرف الحساب.

name

النوع: string (سلسلة)

يتم العرض افتراضيًا.

يمثل اسم مجموعة الطلبات غير المتزامنة هذه.

is_completed

النوع: boolean (قيمة منطقية)

يتم العرض افتراضيًا.

يمثل الطلبات غير المتزامنة المكتملة في هذه المجموعة

total_count

النوع: int (عدد صحيح)

لم يتم العرض افتراضيًا.

يمثل إجمالي عدد الطلبات في مجموعة الطلبات هذه

initial_count

النوع: int (عدد صحيح)

لم يتم العرض افتراضيًا.

يمثل عدد الطلبات غير المعروضة حتى الآن.

in_progress_count

النوع: int (عدد صحيح)

لم يتم العرض افتراضيًا.

يمثل عدد الطلبات المتوفرة قيد التقدم.

success_count

النوع: int (عدد صحيح)

لم يتم العرض افتراضيًا.

يمثل عدد الطلبات المنتهية والناجحة.

error_count

النوع: int (عدد صحيح)

لم يتم العرض افتراضيًا.

يمثل عدد الطلبات المنتهية والفاشلة.

canceled_count

النوع: int (عدد صحيح)

لم يتم العرض افتراضيًا.

يمثل عدد الطلبات التي ألغاها المستخدم

notification_uri

النوع: string (سلسلة)

لم يتم العرض افتراضيًا.

يمثل معرف URI للإشعار والخاص بمجموعة الطلبات غير المتزامنة هذه.

notification_mode

النوع: string (سلسلة)

لم يتم العرض افتراضيًا.

يمثل الطريقة المُتبعة لتلقي الإشعار. وتتضمن القيم الصالحة ما يلي:

  • OFF – بلا إشعارات
  • ON_COMPLETE – يمكن إرسال إشعار عند إنهاء المجموعة بأكملها.

بعد الحصول على الحالة العامة الخاصة بمجموعة الطلبات غير المتزامنة، يمكنك الحصول على تفاصيل حول كل طلب:

curl -G \
  -d 'fields=id,status' \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v21.0/<REQUEST_SET_ID>/requests   

يؤدي ذلك إلى إرجاع حالة كل طلب وتفاصيله داخل مجموعة الطلبات غير المتزامنة. وبالنسبة لإنشاء إعلان غير متزامن، يمكنك تقديم طلب واحد لإنشاء إعلان واحد. وتُستخدم معلمات الحالة لفلترة الطلبات حسب حالتها، ويمكن أن تمثل أية مجموعة تضم القيم التالية:

  • initial – لم تتم المعالجة بعد.
  • in_progress – يمثل الطلب قيد المعالجة
  • success – يمثل الطلب المنتهي والناجح.
  • error – يمثل الطلب المنتهي والفاشل
  • canceled – يمثل الطلب الذي ألغاه المستخدم

تكون الاستجابة عبارة عن مصفوفة بلغة JSON تتضمن حقولًا افتراضية. ولتضمين أي حقل غير افتراضي، يمكنك تحديده في fields، مثل fields=id,scope_object_id,status,result,input,async_request_set.

الاسم الوصف

id

النوع: int (عدد صحيح)

يتم العرض افتراضيًا.

يمثل معرف الطلب الفردي غير المتزامن

scope_object_id

النوع: int (عدد صحيح)

يتم العرض افتراضيًا.

يمثل معرف أصل الكائن الذي يتم إنشاؤه من خلال هذا الطلب. وفي حالة إنشاء إعلان، يمثل معرف المجموعة الإعلانية للإعلان الجديد.

status

النوع: string (سلسلة)

يتم العرض افتراضيًا.

يمثل حالة هذا الطلب غير المتزامن. وتتوفر الخيارات التالية:

  • Initial – لم تتم المعالجة بعد
  • In_progress – يمثل الطلب قيد المعالجة
  • Success – يمثل الطلب المنتهي والناجح
  • Error – يمثل الطلب المنتهي والفاشل
  • Canceled – يمثل الطلب الذي ألغاه المستخدم

result

النوع: array (مصفوفة)

لم يتم العرض افتراضيًا.

في حالة إنهاء الطلب، ستظهر نتيجة الطلب.
عند نجاح العملية، تتطابق النتيجة مع نتيجة الطلب المتزامن. فعلى سبيل المثال، في حالة إنشاء إعلان، تكون نتيجة كل طلب هي معرف الإعلان الجديد. وبالنسبة للأخطاء، ستمثل مصفوفة من:

  • error_code – يمثل رمز الخطأ الذي تم إرجاعه
  • error_message – يمثل رسالة الخطأ

input

النوع: object (كائن)

لم يتم العرض افتراضيًا.

يمثل الإدخال الأصلي لهذا الطلب غير المتزامن. وفي حالة إنشاء إعلان، يكون الإدخال هو adgroup_spec.

async_request_set

النوع: object (كائن)

لم يتم العرض افتراضيًا.

يمثل مجموعة الطلبات غير المتزامنة التي تحتوي على هذا الطلب الفردي

الحصول على تفاصيل حول الطلب

للحصول على تفاصيل حول طلب غير متزامن معين، قم بإجراء الاستدعاء التالي:

curl -G \
  -d 'fields=id,status' \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v21.0/<REQUEST_SET_ID>/requests   

يؤدي ذلك إلى إرجاع كائن بلغة JSON يتضمن الحقول المُدرجة أعلاه.

إدراج مجموعات الطلبات لأحد الحسابات

يمكنك إنشاء مجموعات طلبات متعددة غير متزامنة للإعلانات. للاستعلام عن جميع مجموعات الطلبات غير المتزامنة للإعلانات في حساب إعلاني:

curl -G \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/asyncadrequestsets  

يؤدي ذلك إلى إرجاع مصفوفة بلغة JSON تتضمن كائنات مجموعة الطلبات غير المتزامنة. ويتطابق كل كائن مع ما هو محدد في قسم مجموعة الطلبات غير المتزامنة. ويمكنك فلترة النتائج باستخدام is_completed. وفي حالة استخدام is_completed=true، لن تظهر لك سوى مجموعة الطلبات غير المتزامنة المكتملة فقط.

إدراج الطلبات لمجموعة إعلانية

يمكنك إجراء استدعاء غير متزامن لإنشاء إعلانات في مجموعات إعلانية مختلفة. للحصول على حالة كل مجموعة إعلانية، يمكنك الحصول على كل طلبات إنشاء الإعلانات لمجموعة إعلانية واحدة:

curl -G \
  -d 'fields=id,status' \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v21.0/<AD_SET_ID>/asyncadrequests

يؤدي ذلك إلى إرجاع مصفوفة بلغة JSON تضم كائنات الطلبات غير المتزامنة. وتتطابق الحالة وفلاتر الحقول وحقول الطلبات غير المتزامنة مع واجهة https://graph.facebook.com/&lt;API_VERSION>/&lt;REQUEST_SET_ID>/requests API.

تحديث مجموعات الطلبات

يمكنك تغيير name وnotification_uri وnotification_modeلإحدى مجموعات الطلبات غير المتزامنة.

curl \
  -F 'name=New Name' \
  -F 'notification_mode=OFF' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v21.0/<REQUEST_SET_ID>

يؤدي ذلك إلى إرجاع القيمة true عند نجاح التحديث. ويمكنك تغيير notification_uri وnotification_mode فقط قبل إرسال الإشعار.

إلغاء الطلب

يمكنك إلغاء طلب غير متزامن، ولكن يمكن إلغاء الطلب فقط إذا لم تتم معالجته بعد.

curl -X DELETE \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v21.0/<REQUEST_ID>

يمكن إرجاع القيمة true عند نجاح الإلغاء. يمكنك أيضًا إلغاء الطلبات التي لم تتم معالجتها في مجموعة الطلبات غير المتزامنة:

curl -X DELETE \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v21.0/<REQUEST_SET_ID>

يمكن إرجاع القيمة true عند نجاح الإلغاء.

أمثلة غير متزامنة

الحصول على حالة طلب غير متزامن محدد:

//pretty=true for command line readable output
curl -G \
-d "id=6012384857989" \
-d "pretty=true" \
-d "access_token=_____" \
"https://graph.facebook.com/v21.0/"

يتم إرجاع القيم التالية:

{
   "id": "6012384857989",
   "owner_id": 12345,
   "name": "testasyncset",
   "is_completed": true
}

يمكن الحصول على نتائج الطلبات:

curl -G \
-d "id=6012384857989" \
-d "pretty=true" \
-d "fields=result" \
-d "access_token=_____" \
"https://graph.facebook.com/v21.0/requests"

يمكن إرجاع القيم:

{
   "data": [
      {
         "result": {
            "id": "6012384860989"
         },
         "id": "6012384858389"
      },
      {
         "result": {
            "id": "6012384858789"
         },
         "id": "6012384858189"
      }
   ],
   "paging": {
      "cursors": {
         "after": "___",
         "before": "___"
      }
   }
}

يمكن الحصول على قائمة بمجموعات الطلبات لأحد الحسابات الإعلانية:

curl -G \
-d "is_completed=1" \
-d "pretty=true" \
-d "access_token=___" \
"https://graph.facebook.com/v21.0/act_71597454/asyncadrequestsets"

يمكن إرجاع القيم:

{
   "data": [
      {
         "id": "6012384253789",
         "owner_id": 71597454,
         "name": "testasyncset",
         "is_completed": true
      },
   ],
   "paging": {
      "cursors": {
         "after": "___",
         "before": "___"
      }
   }
}

يمكن الحصول على قائمة بطلبات لإحدى الحملات الإعلانية:

curl -G \
-d "status=SUCCESS,ERROR" \
-d "pretty=true" \
-d "access_token=___" \
"https://graph.facebook.com/v21.0/6008248529789/asyncadrequests"
    

يتم إرجاع القيم التالية:

{
   "data": [
      {
         "id": "6012384951789",
         "scope_object_id": 6008248529789,
         "status": "SUCCESS"
      },
   ],
   "paging": {
      "cursors": {
         "after": "___",
         "before": "___"
      }
   }
}

الطلبات المُجمعة

عند استخدام الطلبات المُجمعة، ادمج عددًا من استدعاءات واجهة Graph API في طلب HTTP واحد. وتقوم واجهة API التسويق بتقسيم هذا الطلب إلى طلبات تأسيسية خاصة به. ويؤدي ذلك إلى جعل الطلبات المُجمعة تمثل الطريقة الأكثر فعالية للتفاعل مع واجهة API التسويق. ولتحقيق المزيد من الفعالية، يمكنك إجراء طلبات مُجمعة متوازية باستخدام سلاسل رسائل معالجة منفصلة.

يمكن أن يتضمن كل طلب مُجمع 50 طلبًا كحد أقصى. وبالنسبة لإنشاء إعلان، يجب أن يكون لديك 10 إعلانات فقط أو أقل لكل طلب مُجمع.

تُعد الطلبات المُجمعة للإعلانات وتصميمات الإعلانات والمجموعات الإعلانية متشابهة للغاية، لذلك فإننا لا نتناولها هنا بشكل منفصل. ولمزيد من المعلومات، يرجى الاطلاع على الطلبات المُجمعة لواجهة Graph API وETags.

إنشاء الإعلانات

يمكنك تقديم تصميم الإعلان وكائنات الإعلانات الأخرى في طلب مُجمع. فعلى سبيل المثال، يمكنك إنشاء ثلاثة إعلانات باستخدام تصميم إعلان واحد وثلاث مواصفات استهداف مختلفة. حدد تصميم الإعلان أولًا، ثم قم بالإشارة إليه عند إنشاء كل إعلان:

curl -F 'access_token=______' 
  -F 'test1=@./test1.jpg'  
  -F 'batch=[
             {
              "method": "POST",
              "name": "create_adimage",
              "relative_url": "<API_VERSION>/act_187687683/adimages",
              "attached_files": "test1"
             },
             {
              "method": "POST",
              "name": "create_creative",
              "relative_url": "<API_VERSION>/act_187687683/adcreatives",
              "attached_files": "test1",
              "body": "name=sample creative&object_story_spec={\"link_data\": {\"image_hash\": \"{result=create_adimage:$.images.*.hash}\", \"link\": \"https://www.test12345.com\", \"message\": \"this is a sample message\"}, \"page_id\":\"12345678\"}&degrees_of_freedom_spec={\"creative_features_spec\": {\"standard_enhancements\": {\"enroll_status\": \"OPT_OUT\"}}}"
             },
             {
              "method": "POST",
              "relative_url": "<API_VERSION>/act_187687683/ads",
              "body": "adset_id=6004163746239&redownload=1&status=PAUSED&optimization_goal=REACH&billing_event=IMPRESSIONS&&creative={\"creative_id\":\"{result=create_creative:$.id}\"}&targeting={\"countries\":[\"US\"]}&name=test1"
             },
             {
              "method": "POST",
              "relative_url": "<API_VERSION>/act_187687683/ads",
              "body": "adset_id=6004163746239&redownload=1&status=PAUSED&optimization_goal=REACH&billing_event=IMPRESSIONS&&creative={\"creative_id\":\"{result=create_creative:$.id}\"}&targeting={\"countries\":[\"US\"]}&name=test2"
             },
             {
              "method": "POST",
              "relative_url": "<API_VERSION>/act_187687683/ads",
              "body": "adset_id=6004163746239&redownload=1&status=PAUSED&optimization_goal=REACH&billing_event=IMPRESSIONS&&creative={\"creative_id\":\"{result=create_creative:$.id}\"}&targeting={\"countries\":[\"US\"]}&name=test3"
             }
            ]' https://graph.facebook.com/

تتضمن الاستجابة رموز الاستجابة الفردية لكل طلب واستجابة Graph API القياسية. للحصول على التفاصيل، يمكنك الرجوع إلى إجراء طلبات API متعددة.

تستخدم عملية معالجة الطلب المُجمعتنسيق تعبير JSONPath للإشارة إلى الطلبات السابقة.

تحديث الإعلانات

يمكنك تحديث الإعلانات من خلال الطلبات المُجمعة. لتحديث عروض الأسعار الخاصة بثلاثة إعلانات:

curl -F 'access_token=____' 
  -F 'batch=[
             {
              "method": "POST",
              "relative_url": "<API_VERSION>/6004251715639",
              "body": "redownload=1&name=new name"
             },
             {
              "method": "POST",
              "relative_url": <API_VERSION>/v6004251716039",
              "body": "redownload=1&name=new name"
             },
             {
              "method": "POST",
              "relative_url": "<API_VERSION>/6004251715839",
              "body": "redownload=1&name=new name"
             }
            ]' https://graph.facebook.com

إذا كنت تريد تضمين redownload=1 في عنوان URL ذي صلة، فستحصل على تفاصيل حول الإعلان بالكامل بما في ذلك معرف الإعلان. ويساعد ذلك في تحديد الإعلانات التي قمت بتحديثها.

لتحديث تصميم الإعلان، حدد التصميم بأكمله أو قدّم معرف تصميم جديدًا. ويرجع ذلك إلى أنه لا يمكن تحرير تصميمات الإعلانات بعد إنشائها باستثناء الاسم وحالة التشغيل.

الاطلاع على الإعلانات

إذا كان لديك عدد كبير من الإعلانات، فقم بتقسيم الطلب إلى طلبات متعددة ضمن طلب مُجمع:

curl -F 'access_token=____' 
  -F 'batch=[
             {
              "method": "GET",
              "relative_url": "<API_VERSION>/?ids=6003356308839,6004164369439&fields=<comma separated list of fields>"
             },
             {
              "method": "GET",
              "relative_url": "<API_VERSION>/6003356307839/ads&fields=<comma separated list of fields>"
             },
             {
              "method": "GET",
              "relative_url": "<API_VERSION>/act_187687683/ads?adset_ids=[6003356307839, 6004164259439]&fields=<comma separated list of fields>"
             }
            ]' https://graph.facebook.com

يُعد 6003356308839 و6004164369439 هما معرفي الإعلانات، ويُعد 6003356307839 و6004164259439 هما معرفي المجموعة الإعلانية.

رؤى الإعلانات

إذا كان لديك عدد كبير من رؤى الإعلانات، فقم بتقسيم الطلب إلى طلبات متعددة ضمن طلب مُجمع:

curl -F 'access_token=____' 
  -F 'batch=[
             {
              "method": "GET",
              "relative_url": "<API_VERSION>/act_19643108/insights?filtering=[{field:'ad.id',operator:'IN',value:[6003356308839,6004164369439]}]"
             },
             {
              "method": "GET",
              "relative_url": "<API_VERSION>/6003356308839/insights"
             },
             {
              "method": "GET",
              "relative_url": "<API_VERSION>/act_187687683/insights?filtering=[{field:'adset.id',operator:'IN',value:[6003356307839, 6004164259439]}]"
             }
            ]' https://graph.facebook.com

في هذا المثال، يُعد 6003356308839 و6004164369439 هما معرفي الإعلانات، ويُعد6003356307839 و6004164259439 هما معرفي المجموعة الإعلانية.

بالنسبة للحسابات الإعلانية التي تحتوي على عدد كبير من الإعلانات، لا يوصى باستخدام إحصائيات act_<account_ID>/adgroupstats نظرًا لأنها قد تؤدي إلى انتهاء مهلة الطلب.

الطلبات المُجمعة للقيمة التقديرية للوصول

يمكنك طلب 50 قيمة تقديرية للوصول كحد أقصى في طلب مُجمع واحد. يوضح المثال التالي قيمة تقديرية للوصول المطلوب والخاصة بمواصفتي استهداف مختلفة:

curl -F 'access_token=____' 
  -F 'batch=[
             {
              "method": "GET",
              "relative_url": "<API_VERSION>/act_600335/reachestimate?targeting_spec={'geo_locations': {'countries':['US']}}"
             },
             {
              "method": "GET",
              "relative_url": "<API_VERSION>/act_600335/reachestimate?targeting_spec={'geo_locations': {'countries':['FR']}}"
             }
            ]' https://graph.facebook.com

API التجميع

تتيح لك واجهة API الدُفعة تجميع الطلبات وإرسالها بشكل غير متزامن. وقم بتجميع عدة استدعاءات لواجهة Graph API في طلب HTTP واحد، وقم بإجرائها بشكل غير متزامن بدون الحاجة إلى الحظر. ويمكنك أيضًا تحديد التبعيات بين العمليات ذات الصلة.

يعالج Facebook كل عملية مستقلة في العمليات المتوازية والعمليات التابعة على التوالي. ويمكن أن يحتوي كل استدعاء لواجهة API على 1000 طلب كحد أقصى.

إجراء استدعاء لواجهة API الدُفعة

لإجراء استدعاء لـ API التجميع:

curl \
-F "access_token=___" \
-F "name=asyncbatchreqs" \
-F "adbatch=<an array of requests>"\
"https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/async_batch_requests"

يمكنك تقديم مصفوفة من طلبات HTTP POST باعتبارها مصفوفات بلغة JSON. ويتضمن كل طلب ما يلي:

  • name
  • relative_url - يمثل جزءًا من عنوان URL الذي يلي graph.facebook.com
  • body

تقوم واجهة API بإرجاع معرف تستخدمه في الاستعلام عن مدى تقدم الطلبات.

على سبيل المثال، أنشئ حملة إعلانية تتضمن مجموعة إعلانية بتنسيق JSONPath للإشارة إلى الطلبات السابقة:

curl \
-F "access_token=___" \
-F "name=batchapiexample" \
-F "adbatch=[
  {
    'name': 'create-campaign',
    'relative_url': 'act_123456/campaigns',
    'body': 'name%3DTest+Campaign%26objective%3DLINK_CLICKS%26status%3DPAUSED%26buying_type%3DAUCTION',
  },
  {
    'name': 'create-adset',
    'relative_url': 'act_123456/adsets',
    'body': 'targeting%3D%7B%22geo_locations%22%3A%7B%22countries%22%3A%5B%22US%22%5D%7D%7D%26daily_budget%3D5000%26campaign_id%3D%7Bresult%3Dcreate-campaign%3A%24.id%7D%26bid_amount%3D2%26name%3DFirst%2BAd%2BSet%20Test%26billing_event%3DLINK_CLICKS',
  },
]" \
https://graph.facebook.com/<API_VERSION>/act_123456/async_batch_requests

للحصول على حالة مجموعة الطلبات:

curl –G \
-d "access_token=___" \
-d "fields=<comma separated list of fields>" \
"https://graph.facebook.com/v21.0/<REQUEST_SET_ID>"

يؤدي ذلك إلى إرجاع الحالة العامة لمجموعات الطلبات غير المتزامنة باعتبارها كائنات بلغة JSON. ولا يتم إرجاع كل الحقول افتراضيًا. ولتضمينها جميعًا، حدد fields، مثل fields=id,owner_id,name,total_count,success_count,error_count,is_completed

الاسم الوصف

id

النوع: int (عدد صحيح)

يتم العرض افتراضيًا.

يمثل المعرف id لمجموعة الطلبات الحالية غير المتزامنة.

owner_id

النوع: int (عدد صحيح)

يتم العرض افتراضيًا.

يمثل الكائن الذي يتضمن مجموعة الطلبات غير المتزامنة هذه. وإذا كنت تنشئ إعلانات، فيكون المعرف owner_id هو معرف الحساب الإعلاني.

name

النوع: string (سلسلة)

يتم العرض افتراضيًا.

يمثل اسم مجموعة الطلبات غير المتزامنة هذه

is_completed

النوع: boolean (قيمة منطقية)

يتم العرض افتراضيًا.

يمثل جميع الطلبات غير المتزامنة المكتملة في المجموعة

total_count

النوع: int (عدد صحيح)

لم يتم العرض افتراضيًا.

يمثل إجمالي عدد الطلبات في مجموعة الطلبات هذه

initial_count

النوع: int (عدد صحيح)

لم يتم العرض افتراضيًا.

يمثل عدد الطلبات التي لم يتم عرضها حتى الآن

in_progress_count

النوع: int (عدد صحيح)

لم يتم العرض افتراضيًا.

يمثل عدد الطلبات المتوفرة قيد التقدم

success_count

النوع: int (عدد صحيح)

لم يتم العرض افتراضيًا.

يمثل عدد الطلبات المنتهية والناجحة

error_count

النوع: int (عدد صحيح)

لم يتم العرض افتراضيًا.

يمثل عدد الطلبات المنتهية والفاشلة

canceled_count

النوع: int (عدد صحيح)

لم يتم العرض افتراضيًا.

يمثل عدد الطلبات التي ألغاها المستخدم

notification_uri

النوع: string (سلسلة)

لم يتم العرض افتراضيًا.

يمثل معرف URI للإشعار والخاص بمجموعة الطلبات غير المتزامنة هذه.

notification_mode

النوع: string (سلسلة)

لم يتم العرض افتراضيًا.

يمثل الطرق المُتبعة لتلقي الإشعار. وفيما يلي القيم الصالحة:

  • OFF – بلا إشعارات
  • ON_COMPLETE – يمكن إرسال إشعار عند الانتهاء من المجموعة بأكملها.

notification_result

النوع: string (سلسلة)

لم يتم العرض افتراضيًا.

يمثل نتيجة إرسال الإشعار.

notification_status

النوع: string (سلسلة)

لم يتم العرض افتراضيًا.

يمثل حالة الإشعار: not_sent أو sending أو sent

بعد الحصول على الحالة العامة، يمكنك الحصول على تفاصيل لكل طلب:

curl –G \   
-d "access_token=___" \
-d "fields=<comma separated list of fields>" \
"https://graph.facebook.com/v21.0/<REQUEST_SET_ID>/requests"

يؤدي ذلك إلى إرجاع التفاصيل باعتبارها مصفوفة بلغة JSON. ولتضمين أي حقول غير افتراضية، يمكنك تحديدها في fields، مثل fields=id,scope_object_id,status,result,input,async_request_set.

الاسم الوصف

id

النوع: int (عدد صحيح)

يتم العرض افتراضيًا.

يمثل معرف الطلب الفردي غير المتزامن

scope_object_id

النوع: int (عدد صحيح)

يتم العرض افتراضيًا.

يمثل معرف أصل الكائن الذي يتم إنشاؤه من خلال هذا الطلب. وفي حالة إنشاء إعلانات، يكون هذا هو معرف المجموعة الإعلانية للإعلان الجديد.

status

النوع: string (سلسلة)

يتم العرض افتراضيًا.

يمثل حالة هذا الطلب غير المتزامن:

  • Initial – لم تتم المعالجة بعد
  • In_progress – يمثل الطلب قيد المعالجة
  • Success – يمثل الطلب المنتهي والناجح
  • Error – يمثل الطلب المنتهي والفاشل
  • Canceled – يمثل الطلب الذي ألغاه المستخدم

result

النوع: array (مصفوفة)

لم يتم العرض افتراضيًا.

في حالة إنهاء الطلب، تظهر النتيجة. وعند نجاح العملية، تتطابق النتيجة مع نتيجة واجهة API الطلب المتزامن. فعلى سبيل المثال، في حالة إنشاء إعلانات، تكون النتيجة هي معرف إعلان جديد. وبالنسبة للأخطاء:

  • error_code – يمثل رمز الخطأ الذي تم إرجاعه
  • error_message – يمثل رسالة الخطأ

input

النوع: object (كائن)

لم يتم العرض افتراضيًا.

يمثل الإدخال الأصلي لهذا الطلب. وفي حالة إنشاء إعلان، يكون الإدخال هو adgroup_spec.

async_request_set

النوع: object (كائن)

لم يتم العرض افتراضيًا.

يمثل مجموعة الطلبات غير المتزامنة التي تحتوي على هذا الطلب.

إدراج طلبات واجهة API الدُفعة للحساب الإعلاني

يمكنك إنشاء العديد من مجموعات الطلبات لواجهة API الدُفعة. للاستعلام عن كل مجموعات الطلبات ضمن حساب إعلاني:

curl –G \ 
-d "access_token=___" \
"https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/async_requests"

ETags

تدعم API التسويق Etags. يساعدك ذلك في معرفة ما إذا كانت البيانات التي تستعلم عنها قد تغيّرت منذ آخر مرة راجعتها أم لا. وفيما يلي طريقة عمل ذلك:

  1. عند إجراء استدعاء، فإن عنوان الاستجابة يحتوي على ETag بقيمة تمثل تجزئة البيانات التي يتم إرجاعها في استدعاء واجهة API. ويمكنك حفظ قيمة ETag هذه لاستخدامها في الخطوة التالية.
  2. عندما تجري الاستدعاء نفسه لواجهة API في المرة القادمة، قم بتضمين عنوان طلب If-None-Match مع قيمة ETag التي حفظتها.
  3. إذا لم تتغير البيانات، فيكون رمز حالة الاستجابة هو 304 – Not Modified ولا يتم إرجاع أي بيانات.
  4. إذا تغيرت البيانات منذ الاستعلام الأخير، فيتم إرجاع البيانات على النحو المعتاد باستخدام قيمة ETag جديدة. ويمكنك حفظ قيمة ETag الجديدة واستخدامها في الاستدعاءات اللاحقة.

بينما تساعد قيم ETags في تقليل نقل البيانات، فيظل If-None-Match GET يحسب تقييدات معدلات الاستدعاء لتطبيقك.

يتم احتساب قيمة ETag باستخدام الاستجابة الكاملة من استدعاء واجهة API بما في ذلك التنسيق الخاص بها. وقد يتأثر تنسيق الاستجابة بسلسلة وكيل المستخدم. ولذلك، يجب أن تحافظ على وكيل المستخدم متسقًا بين الاستدعاءات التي يتم إجراؤها من العميل نفسه.

أمثلة على Etags

للتحقق مما إذا كانت الحسابات الإعلانية لدى المستخدم قد طرأ عليها أي تغيير أم لا.

الخطوة الأولى: تحديد قيمة ETag للبيانات الحالية

curl -i "https://graph.beta.facebook.com/me/adaccounts?access_token=___"

ستبدو الاستجابة كما يلي:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: private, no-cache, no-store, must-revalidate
Content-Type: text/javascript; charset=UTF-8
ETag: "7776cdb01f44354af8bfa4db0c56eebcb1378975"
Expires: Sat, 01 Jan 2000 00:00:00 GMT
Pragma: no-cache
X-FB-Rev: 495685
X-FB-Server: 10.30.149.204
X-FB-Debug: CWbHcogdwUE8saMv6ML+8FacXFrE8ufhjjwxU2dQWaA=
X-Cnection: close
Date: Mon, 16 Jan 2012 12:07:44 GMT
Content-Length: 3273

{"data":[{"id":"act.......

في هذا المثال، تكون قيمة ETag هي "7776cdb01f44354af8bfa4db0c56eebcb1378975"، ويرجى ملاحظة أن قيمة ETag تتضمن علامتي الاقتباس (").

الخطوة الثانية: تحديد ما إذا كان قد طرأ أي تغيير على البيانات أم لا

curl -i -H "If-None-Match: \"7776cdb01f44354af8bfa4db0c56eebcb1378975\"" "https://graph.beta.facebook.com/me/adaccounts?access_token=___"

إذا لم تطرأ أي تغييرات، فستبدو الاستجابة كما يلي:

HTTP/1.1 304 Not Modified
Access-Control-Allow-Origin: *
Cache-Control: private, no-cache, no-store, must-revalidate
Content-Type: text/javascript; charset=UTF-8
Expires: Sat, 01 Jan 2000 00:00:00 GMT
Pragma: no-cache
X-FB-Rev: 495685
X-FB-Server: 10.30.177.190
X-FB-Debug: ImBhat3k07Nez5FvuS2lPWU0U2xxmxD4B3k9ua4Sk7Q=
X-Cnection: close
Date: Mon, 16 Jan 2012 12:09:17 GMT
Content-Length: 0

لاحظ الاستجابة 304 Not Modified. وإذا كان قد طرأ أي تغيير على البيانات، فقد يتم إرجاع استجابة واجهة API الطبيعية.

يتوفر مثال على الدُفعة للتحقق مما إذا كانت إعلانات المستخدم قد طرأ عليها أي تغيير أم لا.

الخطوة الأولى: تحديد قيمة ETag للبيانات الحالية

curl -i "curl -F 'access_token=___' -F 'batch=[ 
  {"method":"GET", "relative_url": "?ids=6003356308839,6004164369439" }, 
  {"method":"GET", "relative_url": "act_12345678/ads?campaign_ids=[6003356307839, 6004164259439]"}]'
 https://graph.facebook.com"

ستحتوي الاستجابة على قيم ETag على النحو التالي:

...{"name":"ETag","value":"\"21d371640127490b2ed0387e8af3f0f8c9eff012\""}...      
...{"name":"ETag","value":"\"410e53bb257f116e8716e4ebcc76df1c567b87f4\""}...

في هذا المثال، تكون قيمتا ETags هما "21d371640127490b2ed0387e8af3f0f8c9eff012" و"410e53bb257f116e8716e4ebcc76df1c567b87f4"، ويرجى ملاحظة أن قيمة ETag تتضمن علامتى الاقتباس (").

الخطوة الثانية: تحديد ما إذا كان قد طرأ أي تغيير على البيانات أم لا:

curl -F 'access_token=___' -F 'batch=[
  {"method":"GET", "headers":["If-None-Match: \"21d371640127490b2ed0387e8af3f0f8c9eff012\""], "relative_url": "?ids=6003356308839,6004164369439" },
  {"method":"GET",  "headers":["If-None-Match: \"410e53bb257f116e8716e4ebcc76df1c567b87f4\""], "relative_url": "act_12345678/ads?campaign_ids=[6003356307839, 6004164259439]"}]' 
https://graph.facebook.com

إذا لم تطرأ أي تغييرات، فستبدو الاستجابة كما يلي:

[{
    "code": 304,
    .
    .
    .
    "body": null
},
{
    "code": 304,
    .
    .
    .
    "body": null
}]

لاحظ الاستجابة 304 Not Modified. وإذا طرأت تغييرات على البيانات، فسنقوم بإرجاع استجابة واجهة API الطبيعية.