إعلانات السفر - إدارة الجمهور

يفترض هذا الدليل توفر كتالوج لديك مع تجهيز مخزون السفر، وأنك قد أعددت أحداث السفر المطلوبة على موقع الويب و/أو تطبيق الهاتف المحمول لديك، وانتهيت كذلك من ربط الكتالوج بمصادر الأحداث.

اعتبارًا من 20 سبتمبر 2018، لن ندعم subtype بعد طرح الإصدار 3.0 من واجهة API التسويق لجماهير مخصصة خاصة بمواقع الويب والتطبيقات والجماهير المخصصة للتفاعل والجماهير من بيانات التحويل غير المتصلة. والاستثناء الوحيد هو أنه لا يزال النوع subtype مدعومًا للجماهير المخصصة للتفاعل والخاصة بالفيديو.

إنشاء جمهور للسفر في خطوتين:

الخطوة الأولى: إنشاء مجموعة مصادر حدث السفر ومشاركتها

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

use FacebookAds\Object\EventSourceGroup;
use FacebookAds\Object\Fields\EventSourceGroupFields;

$event_source_group = new EventSourceGroup(null, <BUSINESS_ID>);
$event_source_group->setData(array(
  EventSourceGroupFields::NAME => 'My Travel Company Events',
  EventSourceGroupFields::EVENT_SOURCES => array(
    <PIXEL_ID>,
    <APP_ID>,
  ),
));

$event_source_group->create();
from facebookads.adobjects.eventsourcegroup import EventSourceGroup

event_source_group = EventSourceGroup(parent_id=<BUSINESS_ID>)
event_source_group[EventSourceGroup.Field.name] = 'My Travel Company Events'
event_source_group[EventSourceGroup.Field.event_sources] = [
    <PIXEL_ID>,
    <APP_ID>,
]

event_source_group.remote_create()
curl \
  -F 'name=My Travel Company Events' \
  -F 'event_sources=["<PIXEL_ID>","<APP_ID>"]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/<BUSINESS_ID>/event_source_groups

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

use FacebookAds\Object\EventSourceGroup;

$event_source_group = new EventSourceGroup(<EVENT_SOURCE_GROUP_ID>);
// ad account id without 'act_'
$event_source_group->createSharedAccount(array(), array(
  'accounts' => array(
    '<ACCOUNT_ID_WITHOUT_ACT>',
  ),
));
from facebookads.adobjects.eventsourcegroup import EventSourceGroup

event_source_group = EventSourceGroup(<EVENT_SOURCE_GROUP_ID>)
# ad account id without 'act_'
response = event_source_group.create_shared_account(
    params={
        'accounts': ['<ACCOUNT_ID_WITHOUT_ACT>'],
    },
)
print(response)
curl \
  -F 'accounts=["<ACCOUNT_ID_WITHOUT_ACT>"]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/<EVENT_SOURCE_GROUP_ID>/shared_accounts

الخطوة الثانية: إنشاء جماهير سفر

في هذه المرحلة، من المفترض أن يكون لديك إشارة مستخدم (أي، أحداث بيكسل و/أو أحداث تطبيق) تم إعدادها وربطها بمجموعة مصادر الحدث وكتالوج (كتالوجات) السفر.

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

لإعداد جمهور سفر جديد، يمكنك إجراء طلب HTTP POST لـ /act_<AD_ACCOUNT_ID>/customaudiences.

معلمات الجماهير

الحقل والنوعالوصف

claim_objective

النوع: enum {TRAVEL}

مطلوب.

يمثل هدف الجمهور.

يجب تعيينه إلى TRAVEL.

content_type

النوع: enum {HOTEL, FLIGHT, DESTINATION}

مطلوب.

حدد نوع الإشارة التي يجب استخدامها لإنشاء هذا الجمهور.

يجب تعيينه إلى HOTEL أو FLIGHT أو DESTINATION.

event_sources

النوع: json string

يمثل مصفوفة بلغة JSON لزوج من id وtype. ويحصل الحقل id على معرف مصدر حدث واحد، ويكون الحقل type إما بيكسل أو تطبيقًا أو offline_events. على سبيل المثال:

"event_sources": [
 {
 "type": "pixel",
 "id": "562030684179932"
 },
 {
 "type": "app",
 "id": "562030684179934"
 }
] 

مطلوب في حالة عدم توفير event_source_group. وفي حالة توفيرها، لا يجب توفير event_source_group أيضًا.

event_source_group

النوع: id

حدد مجموعة مصادر الحدث التي ستدعم أحداثها الجمهور. ويكون مطلوبًا في حالة عدم توفير event_sources.

inclusions

النوع: object[]

مطلوب.

مصفوفة كائنات بلغة JSON تتضمن جميع إشارات النية التي تجعل حساب مركز الحسابات مؤهلاً لهذا الجمهور. راجع جدول معلمات كائن التضمين أدناه.

description

النوع: string

يمثل وصفًا إضافيًا للجمهور.

exclusions

النوع: object[]

مصفوفة كائنات بلغة JSON تتضمن جميع إشارات النية التي تستثني حساب مركز الحسابات المؤهل من هذا الجمهور. راجع جدول معلمات كائن الاستبعاد أدناه.

rule

النوع: object

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

معلمات كائنات التضمين

اسم الحقل والنوعالوصف

event

النوع: enum {Search, ViewContent, InitiateCheckout, Purchase}

مطلوب.

يمثل اسم الحدث للإشارة التي تريد تضمينها.

المثال: {"event": "Search", …}

retention

النوع: object

مطلوب.

يمثل الحد الأدنى/الأقصى لمقدار الوقت منذ تلقي الحدث حتى يتم النظر فيه لأغراض التضمين. ويجب أن تكون فترة الاحتفاظ 4 ساعات على الأقل.

راجع جدول معلمات كائنات الاحتفاظ أدناه.

المثال: {…, "retention": {"min_seconds": 0, "max_seconds": 259200}, …}

booking_window

النوع: object

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

راجع جدول معلمات كائنات فترة الحجز أدناه.

أمثلة:

  • {"booking_window": {"min_seconds": 0, "max_seconds": 259200}}
  • {"booking_window": {"max_seconds": 0}}

count

النوع: عوامل تشغيل JSON

يمثل عدد مرات إطلاق الحدث. ويمكنك استخدام عاملي تشغيل المقارنة العددية والمساواة هنا.

الأمثلة: {…"count": {"lte": 3}, …}

معلمات كائنات الاحتفاظ

اسم الحقل والنوعالوصف

max_seconds

النوع: int

مطلوب.

يمثل الحد الأقصى للوقت (بالثواني) منذ تلقي الحدث.

المثال: 259200

min_seconds

النوع: int

يمثل الحد الأدنى للوقت (بالثواني) منذ تلقي الحدث.

المثال: 0

معلمات كائنات فترة الحجز

اسم الحقل والنوعالوصف

min_seconds

النوع: int

مطلوب.

يمثل الحد الأدنى للوقت (بالثواني) بين التاريخ الحالي وتاريخ تسجيل الوصول المطلوب للمستخدم.

المثال: 172800

max_seconds

النوع: int

مطلوب.

يمثل الحد الأقصى للوقت (بالثواني) بين التاريخ الحالي وتاريخ تسجيل الوصول المطلوب.

المثال: 604800

معلمات كائنات الاستبعاد

اسم الحقل والنوعالوصف

event

النوع: enum { Search, ViewContent, InitiateCheckout, Purchase }

مطلوب.

يمثل اسم الحدث للإشارة التي تريد استبعادها.

المثال: {"event": "Search", …}

retention

النوع: object

مطلوب.

يمثل الحد الأدنى/الأقصى لمقدار الوقت منذ تلقي الحدث حتى يتم النظر فيه لأغراض الاستبعاد. يجب أن تكون فترة الاحتفاظ 4 ساعات على الأقل.

راجع جدول معلمات كائنات الاحتفاظ أدناه.

المثال: {…, "retention": {"min_seconds": 0, "max_seconds": 259200}, …}

معلمات السفر لكائن القاعدة

تمامًا كما هو الحال مع المعلمة الكلاسيكية، يمكن استخدام كل معلمة هنا مع أحد عوامل تشغيلJSON القياسية.

اسم الحقل والنوعالوصف

hotel_set_id

النوع: int

لا يتطابق مع تلك الأحداث إلا في وجود معرف content_id واحد على الأقل ضمن المعرف hotel_set_id المحدد.

مخصص فقط لجماهير السفر مع تعيين content_type إلى HOTEL.

المثال: {…, "hotel_set_id": {"eq": 123456789}, …}

destination_set_id

النوع: int

لا يتطابق مع تلك الأحداث إلا في وجود معرف content_id واحد على الأقل ضمن المعرف destination_set_id المحدد.

مخصص فقط لجماهير السفر مع تعيين content_type إلى DESTINATION.

المثال: {…, "destination_set_id": {"eq": 123456789}, …}

flight_set_id

النوع: int

مطلوب لإعلانات رحلات الطيران.

لا يتطابق مع تلك الأحداث إلا عندما يكون المسار (origin_airport إلى destination_airport) موجودًا ضمن المعرف flight_set_id المحدد.

مخصص فقط لجماهير السفر مع تعيين content_type إلى FLIGHT.

المثال: {…, "flight_set_id": {"eq": 123456789}, …}

length_of_stay

النوع: int

يمثل عدد الليالي التي تم قضاؤها خلال الرحلة.

المثال: {… "length_of_stay": {"eq": 1}, …}

number_of_weekends

النوع: int

يمثل عدد عطلات نهاية الأسبوع بين تاريخ البدء وتاريخ الانتهاء

المثال: {…, "number_of_weekends": {"gte": 5}, …}

num_travelers

النوع: int

يمثل إجمالي عدد المسافرين

  • بالنسبة لنوع content_type لـ hotel أو destination، يكون هذا هو num_adults + num_children
  • بالنسبة لنوع content_type لـ flight يتضمن ذلك أيضًا num_infants

المثال: {…, "num_travelers": {"gt": 1}, …}

حقول التاريخ:

إعلانات الفنادق

  • checkin_date
  • checkout_date

إعلانات رحلات الطيران

  • departing_departure_date
  • departing_arrival_date
  • returning_departure_date
  • returning_arrival_date

إعلانات الوجهات

  • travel_start
  • travel_end

النوع: string

استخدم حقول التاريخ الملاءمة بناءً على content_type.

المثال: {"checkin_date": {"gte": "2016-09-01"}}

itinerary_contains_date

النوع: string

يمثل رحلة تحتوي على تاريخ محدد.

المثال: {"itinerary_contains_date": {"eq": "2016-12-25"}}

عينات من الرمز

المسافرون الفرديون الذين أجروا عمليات البحث 3 مرات على الأقل في آخر 5 أيام، ولكن لم يحجزوا بعد:

use FacebookAds\Object\CustomAudience;
use FacebookAds\Object\Fields\CustomAudienceFields;
use FacebookAds\Object\Values\CustomAudienceSubtypeValues;
use FacebookAds\Object\Values\CustomAudienceClaimObjectiveValues;
use FacebookAds\Object\Values\CustomAudienceContentTypeValues;

$custom_audience = new CustomAudience(null, 'act_<AD_ACCOUNT_ID>');
$custom_audience->setData(array(
  CustomAudienceFields::NAME => 'Travel Audience',
  CustomAudienceFields::SUBTYPE => CustomAudienceSubtypeValues::CLAIM,
  CustomAudienceFields::CLAIM_OBJECTIVE =>
    CustomAudienceClaimObjectiveValues::TRAVEL,
  CustomAudienceFields::CONTENT_TYPE => CustomAudienceContentTypeValues::HOTEL,
  CustomAudienceFields::EVENT_SOURCE_GROUP => <EVENT_SOURCE_GROUP_ID>,
  CustomAudienceFields::RULE => array(
    'num_travelers' => array('eq' => 1),
  ),
  'inclusions' => array(
    array(
      'event' => 'Search',
      'count' => array('gt' => 3),
      'retention' => array('min_seconds'=> 0, 'max_seconds'=> 432000),
    ),
  ),
  'exclusions' => array(
    array(
      'event' => 'Purchase',
      'retention' => array('min_seconds'=> 0, 'max_seconds'=> 172800),
    ),
  ),
));
$custom_audience->create();
from facebookads.adobjects.customaudience import CustomAudience

audience = CustomAudience(parent_id='act_<AD_ACCOUNT_ID>')
audience[CustomAudience.Field.name] = 'Travel Audience'
audience[CustomAudience.Field.subtype] = CustomAudience.Subtype.claim
audience[CustomAudience.Field.claim_objective] = \
    CustomAudience.ClaimObjective.travel
audience[CustomAudience.Field.content_type] = CustomAudience.ContentType.hotel
audience[CustomAudience.Field.event_source_group] = <EVENT_SOURCE_GROUP_ID>
audience[CustomAudience.Field.rule] = {
    'num_travelers': {'eq': 1},
}
audience['inclusions'] = [
    {
        'event': 'Search',
        'count': {'gt': 3},
        'retention': {'min_seconds': 0, 'max_seconds': 432000},
    },
]
audience['exclusions'] = [
    {
        'event': 'Purchase',
        'retention': {'min_seconds': 0, 'max_seconds': 432000},
    },
]

audience.remote_create()
curl \
  -F 'name=Travel Audience' \
  -F 'subtype=CLAIM' \
  -F 'claim_objective=TRAVEL' \
  -F 'content_type=HOTEL' \
  -F 'event_source_group=<EVENT_SOURCE_GROUP_ID>' \
  -F 'rule={"num_travelers":{"eq":1}}' \
  -F 'inclusions=[ 
    { 
      "event": "Search", 
      "count": {"gt":3}, 
      "retention": {"min_seconds":0,"max_seconds":432000} 
    } 
  ]' \
  -F 'exclusions=[{"event":"Purchase","retention":{"min_seconds":0,"max_seconds":172800}}]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/customaudiences

الأشخاص الذين شاهدوا فندقًا أو بدأوا حجز فندق ضمن مجموعة الفنادق خلال اليومين الماضيين، ولكنهم لم يكملوا حجزهم مطلقًا:

use FacebookAds\Object\CustomAudience;
use FacebookAds\Object\Fields\CustomAudienceFields;
use FacebookAds\Object\Values\CustomAudienceSubtypeValues;
use FacebookAds\Object\Values\CustomAudienceClaimObjectiveValues;
use FacebookAds\Object\Values\CustomAudienceContentTypeValues;

$custom_audience = new CustomAudience(null, 'act_<AD_ACCOUNT_ID>');
$custom_audience->setData(array(
  CustomAudienceFields::NAME => 'Travel Audience',
  CustomAudienceFields::SUBTYPE => CustomAudienceSubtypeValues::CLAIM,
  CustomAudienceFields::CLAIM_OBJECTIVE =>
    CustomAudienceClaimObjectiveValues::TRAVEL,
  CustomAudienceFields::CONTENT_TYPE => CustomAudienceContentTypeValues::HOTEL,
  CustomAudienceFields::EVENT_SOURCE_GROUP => <EVENT_SOURCE_GROUP_ID>,
  CustomAudienceFields::RULE => array(
    'hotel_set_id' => array('eq' => <HOTEL_SET_ID>),
  ),
  'inclusions' => array(
    array(
      'event' => 'ViewContent',
      'retention' => array('min_seconds'=> 0, 'max_seconds'=> 172800),
    ),
    array(
      'event' => 'InitiateCheckout',
      'retention' => array('min_seconds'=> 0, 'max_seconds'=> 172800),
    ),
  ),
  'exclusions' => array(
    array(
      'event' => 'Purchase',
      'retention' => array('min_seconds'=> 0, 'max_seconds'=> 172800),
    ),
  ),
));
$custom_audience->create();
from facebookads.adobjects.customaudience import CustomAudience

audience = CustomAudience(parent_id='act_<AD_ACCOUNT_ID>')
audience[CustomAudience.Field.name] = 'Travel Audience'
audience[CustomAudience.Field.subtype] = CustomAudience.Subtype.claim
audience[CustomAudience.Field.claim_objective] = \
    CustomAudience.ClaimObjective.travel
audience[CustomAudience.Field.content_type] = CustomAudience.ContentType.hotel
audience[CustomAudience.Field.event_source_group] = <EVENT_SOURCE_GROUP_ID>
audience[CustomAudience.Field.rule] = {
    'hotel_set_id': {'eq': <HOTEL_SET_ID>},
}
audience['inclusions'] = [
    {
        'event': 'ViewContent',
        'retention': {'min_seconds': 0, 'max_seconds': 172800},
    },
    {
        'event': 'InitiateCheckout',
        'retention': {'min_seconds': 0, 'max_seconds': 172800},
    },
]
audience['exclusions'] = [
    {
        'event': 'Purchase',
        'retention': {'min_seconds': 0, 'max_seconds': 172800},
    },
]

audience.remote_create()
curl \
  -F 'name=Travel Audience' \
  -F 'subtype=CLAIM' \
  -F 'claim_objective=TRAVEL' \
  -F 'content_type=HOTEL' \
  -F 'event_source_group=<EVENT_SOURCE_GROUP_ID>' \
  -F 'rule={"hotel_set_id":{"eq":"<HOTEL_SET_ID>"}}' \
  -F 'inclusions=[ 
    {"event":"ViewContent","retention":{"min_seconds":0,"max_seconds":172800}}, 
    { 
      "event": "InitiateCheckout", 
      "retention": {"min_seconds":0,"max_seconds":172800} 
    } 
  ]' \
  -F 'exclusions=[{"event":"Purchase","retention":{"min_seconds":0,"max_seconds":172800}}]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.10/act_<AD_ACCOUNT_ID>/customaudiences

الأشخاص الذين بدأوا تسجيل المغادرة أو اشتروا تذاكر الطيران في آخر 5 أيام، وتتراوح فترة حجز رحلة الطيران لديهم من يومين إلى 7 أيام:

use FacebookAds\Object\CustomAudience;
use FacebookAds\Object\Fields\CustomAudienceFields;
use FacebookAds\Object\Values\CustomAudienceSubtypeValues;
use FacebookAds\Object\Values\CustomAudienceClaimObjectiveValues;
use FacebookAds\Object\Values\CustomAudienceContentTypeValues;

$custom_audience = new CustomAudience(null, 'act_<AD_ACCOUNT_ID>');
$custom_audience->setData(array(
  CustomAudienceFields::NAME => 'Travel Audience',
  CustomAudienceFields::SUBTYPE => CustomAudienceSubtypeValues::CLAIM,
  CustomAudienceFields::CLAIM_OBJECTIVE =>
    CustomAudienceClaimObjectiveValues::TRAVEL,
  CustomAudienceFields::CONTENT_TYPE => CustomAudienceContentTypeValues::FLIGHT,
  CustomAudienceFields::EVENT_SOURCE_GROUP => <EVENT_SOURCE_GROUP_ID>,
  'inclusions' => array(
    array(
      'event' => 'InitiateCheckout',
      'retention' => array('min_seconds'=> 0, 'max_seconds'=> 432000),
      'booking_window' => array('min_seconds'=> 172800, 'max_seconds'=> 604800),
    ),
    array(
      'event' => 'Purchase',
      'retention' => array('min_seconds'=> 0, 'max_seconds'=> 432000),
      'booking_window' => array('min_seconds'=> 172800, 'max_seconds'=> 604800),
    ),
  ),
));
$custom_audience->create();
from facebookads.adobjects.customaudience import CustomAudience

audience = CustomAudience(parent_id='act_<AD_ACCOUNT_ID>')
audience[CustomAudience.Field.name] = 'Travel Audience'
audience[CustomAudience.Field.subtype] = CustomAudience.Subtype.claim
audience[CustomAudience.Field.claim_objective] = \
    CustomAudience.ClaimObjective.travel
audience[CustomAudience.Field.content_type] = CustomAudience.ContentType.flight
audience[CustomAudience.Field.event_source_group] = <EVENT_SOURCE_GROUP_ID>
audience['inclusions'] = [
    {
        "event": "InitiateCheckout",
        "retention": {"min_seconds": 0, "max_seconds": 432000},
        "booking_window": {"min_seconds": 172800, "max_seconds": 604800},
    },
    {
        "event": "Purchase",
        "retention": {"min_seconds": 0, "max_seconds": 432000},
        "booking_window": {"min_seconds": 172800, "max_seconds": 604800},
    },
]

audience.remote_create()
curl \
  -F 'name=Travel Audience' \
  -F 'subtype=CLAIM' \
  -F 'claim_objective=TRAVEL' \
  -F 'content_type=FLIGHT' \
  -F 'event_source_group=<EVENT_SOURCE_GROUP_ID>' \
  -F 'inclusions=[ 
    { 
      "event": "InitiateCheckout", 
      "retention": {"min_seconds":0,"max_seconds":432000}, 
      "booking_window": {"min_seconds":172800,"max_seconds":604800} 
    }, 
    { 
      "event": "Purchase", 
      "retention": {"min_seconds":0,"max_seconds":432000}, 
      "booking_window": {"min_seconds":172800,"max_seconds":604800} 
    } 
  ]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/customaudiences

الأشخاص الذين بحثوا عن فنادق داخل "مدينة نيويورك" أكثر من 3 مرات خلال اليومين الماضيين، ولكن لم يحجزوا بعد:

use FacebookAds\Object\CustomAudience;
use FacebookAds\Object\Fields\CustomAudienceFields;
use FacebookAds\Object\Values\CustomAudienceSubtypeValues;
use FacebookAds\Object\Values\CustomAudienceClaimObjectiveValues;
use FacebookAds\Object\Values\CustomAudienceContentTypeValues;

$custom_audience = new CustomAudience(null, 'act_<AD_ACCOUNT_ID>');
$custom_audience->setData(array(
  CustomAudienceFields::NAME => 'Travel Audience',
  CustomAudienceFields::SUBTYPE => CustomAudienceSubtypeValues::CLAIM,
  CustomAudienceFields::CLAIM_OBJECTIVE =>
    CustomAudienceClaimObjectiveValues::TRAVEL,
  CustomAudienceFields::CONTENT_TYPE => CustomAudienceContentTypeValues::HOTEL,
  CustomAudienceFields::EVENT_SOURCE_GROUP => <EVENT_SOURCE_GROUP_ID>,
  CustomAudienceFields::RULE => array(
    'destination' => array('i_contains' => 'New York City'),
  ),
  'inclusions' => array(
    array(
      'event' => 'Search',
      'count' => array('gt' => 3),
      'retention' => array('min_seconds'=> 0, 'max_seconds'=> 172800),
    ),
  ),
  'exclusions' => array(
    array(
      'event' => 'Purchase',
      'retention' => array('min_seconds'=> 0, 'max_seconds'=> 172800),
    ),
  ),
));
$custom_audience->create();
from facebookads.adobjects.customaudience import CustomAudience

audience = CustomAudience(parent_id='act_<AD_ACCOUNT_ID>')
audience[CustomAudience.Field.name] = 'Travel Audience'
audience[CustomAudience.Field.subtype] = CustomAudience.Subtype.claim
audience[CustomAudience.Field.claim_objective] = \
    CustomAudience.ClaimObjective.travel
audience[CustomAudience.Field.content_type] = CustomAudience.ContentType.hotel
audience[CustomAudience.Field.event_source_group] = <EVENT_SOURCE_GROUP_ID>
audience[CustomAudience.Field.rule] = {
    'destination': {'i_contains': 'New York City'},
}
audience['inclusions'] = [
    {
        'event': 'Search',
        'count': {'gt': 3},
        'retention': {'min_seconds': 0, 'max_seconds': 172800},
    },
]
audience['exclusions'] = [
    {
        'event': 'Purchase',
        'retention': {'min_seconds': 0, 'max_seconds': 172800},
    },
]

audience.remote_create()
curl \
  -F 'name=Travel Audience' \
  -F 'subtype=CLAIM' \
  -F 'claim_objective=TRAVEL' \
  -F 'content_type=HOTEL' \
  -F 'event_source_group=<EVENT_SOURCE_GROUP_ID>' \
  -F 'rule={"destination":{"i_contains":"New York City"}}' \
  -F 'inclusions=[ 
    { 
      "event": "Search", 
      "count": {"gt":3}, 
      "retention": {"min_seconds":0,"max_seconds":172800} 
    } 
  ]' \
  -F 'exclusions=[{"event":"Purchase","retention":{"min_seconds":0,"max_seconds":172800}}]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/customaudiences

الأشخاص الذين أجروا بحثًا عن الفنادق بين checkin_date وcheckout_date خلال اليومين الماضيين، ولكن لم يحجزوا بعد:

use FacebookAds\Object\CustomAudience;
use FacebookAds\Object\Fields\CustomAudienceFields;
use FacebookAds\Object\Values\CustomAudienceSubtypeValues;
use FacebookAds\Object\Values\CustomAudienceClaimObjectiveValues;
use FacebookAds\Object\Values\CustomAudienceContentTypeValues;

$custom_audience = new CustomAudience(null, 'act_<AD_ACCOUNT_ID>');
$custom_audience->setData(array(
  CustomAudienceFields::NAME => 'Travel Audience',
  CustomAudienceFields::SUBTYPE => CustomAudienceSubtypeValues::CLAIM,
  CustomAudienceFields::CLAIM_OBJECTIVE =>
    CustomAudienceClaimObjectiveValues::TRAVEL,
  CustomAudienceFields::CONTENT_TYPE => CustomAudienceContentTypeValues::HOTEL,
  CustomAudienceFields::EVENT_SOURCE_GROUP => <EVENT_SOURCE_GROUP_ID>,
  CustomAudienceFields::RULE => array(
    'and' => array(
      array(
        'checkin_date' => array(
          'gte' => (new \DateTime("+3 day"))->format('Y-m-d')
        ),
      ),
      array(
        'checkout_date' => array(
          'lte' => (new \DateTime("+6 day"))->format('Y-m-d')
        ),
      ),
    ),
  ),
  'inclusions' => array(
    array(
      'event' => 'Search',
      'retention' => array('min_seconds'=> 0, 'max_seconds'=> 172800),
    ),
  ),
  'exclusions' => array(
    array(
      'event' => 'Purchase',
      'retention' => array('min_seconds'=> 0, 'max_seconds'=> 172800),
    ),
  ),
));
$custom_audience->create();
from facebookads.adobjects.customaudience import CustomAudience
import datetime

audience = CustomAudience(parent_id='act_<AD_ACCOUNT_ID>')
audience[CustomAudience.Field.name] = 'Travel Audience'
audience[CustomAudience.Field.subtype] = CustomAudience.Subtype.claim
audience[CustomAudience.Field.claim_objective] = \
    CustomAudience.ClaimObjective.travel
audience[CustomAudience.Field.content_type] = CustomAudience.ContentType.hotel
audience[CustomAudience.Field.event_source_group] = <EVENT_SOURCE_GROUP_ID>
audience[CustomAudience.Field.rule] = {
    'and': [
        {
            "checkin_date": {
                "gte": str(datetime.date.today() + datetime.timedelta(days=3)),
            },
        },
        {
            "checkout_date": {
                "gte": str(datetime.date.today() + datetime.timedelta(days=6)),
            },
        },
    ],
}
audience['inclusions'] = [
    {
        'event': 'Search',
        'retention': {'min_seconds': 0, 'max_seconds': 172800},
    },
]
audience['exclusions'] = [
    {
        'event': 'Purchase',
        'retention': {'min_seconds': 0, 'max_seconds': 172800},
    },
]

audience.remote_create()
curl \
  -F 'name=Travel Audience' \
  -F 'subtype=CLAIM' \
  -F 'claim_objective=TRAVEL' \
  -F 'content_type=HOTEL' \
  -F 'event_source_group=<EVENT_SOURCE_GROUP_ID>' \
  -F 'rule={ 
    "and": [ 
      {"checkin_date":{"gte":"2018-02-02"}}, 
      {"checkout_date":{"lte":"2018-02-05"}} 
    ] 
  }' \
  -F 'inclusions=[{"event":"Search","retention":{"min_seconds":0,"max_seconds":172800}}]' \
  -F 'exclusions=[{"event":"Purchase","retention":{"min_seconds":0,"max_seconds":172800}}]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/customaudiences

الأشخاص الذين أجروا عمليات بحث عن إقامات في فنادق تتضمن تاريخًا معينًا (مثل عطلة الكريسماس) في آخر يومين، ولكنهم لم يحجزوا بعد:

use FacebookAds\Object\CustomAudience;
use FacebookAds\Object\Fields\CustomAudienceFields;
use FacebookAds\Object\Values\CustomAudienceSubtypeValues;
use FacebookAds\Object\Values\CustomAudienceClaimObjectiveValues;
use FacebookAds\Object\Values\CustomAudienceContentTypeValues;

$custom_audience = new CustomAudience(null, 'act_<AD_ACCOUNT_ID>');
$custom_audience->setData(array(
  CustomAudienceFields::NAME => 'Travel Audience',
  CustomAudienceFields::SUBTYPE => CustomAudienceSubtypeValues::CLAIM,
  CustomAudienceFields::CLAIM_OBJECTIVE =>
    CustomAudienceClaimObjectiveValues::TRAVEL,
  CustomAudienceFields::CONTENT_TYPE => CustomAudienceContentTypeValues::HOTEL,
  CustomAudienceFields::EVENT_SOURCE_GROUP => <EVENT_SOURCE_GROUP_ID>,
  CustomAudienceFields::RULE => array(
    'itinerary_contains_date' => array(
      'eq' => (new \DateTime())->setDate(Date('Y'), 12, 25)->format('Y-m-d')
    ),
  ),
  'inclusions' => array(
    array(
      'event' => 'Search',
      'retention' => array('min_seconds'=> 0, 'max_seconds'=> 172800),
    ),
  ),
  'exclusions' => array(
    array(
      'event' => 'Purchase',
      'retention' => array('min_seconds'=> 0, 'max_seconds'=> 172800),
    ),
  ),
));
$custom_audience->create();
from facebookads.adobjects.customaudience import CustomAudience
import datetime

audience = CustomAudience(parent_id='act_<AD_ACCOUNT_ID>')
audience[CustomAudience.Field.name] = 'Travel Audience'
audience[CustomAudience.Field.subtype] = CustomAudience.Subtype.claim
audience[CustomAudience.Field.claim_objective] = \
    CustomAudience.ClaimObjective.travel
audience[CustomAudience.Field.content_type] = CustomAudience.ContentType.hotel
audience[CustomAudience.Field.event_source_group] = <EVENT_SOURCE_GROUP_ID>
audience[CustomAudience.Field.rule] = {
    "itinerary_contains_date": {
        "eq": str(datetime.date(datetime.date.today().year, 12, 25)),
    },
}
audience['inclusions'] = [
    {
        'event': 'Search',
        'retention': {'min_seconds': 0, 'max_seconds': 172800},
    },
]
audience['exclusions'] = [
    {
        'event': 'Purchase',
        'retention': {'min_seconds': 0, 'max_seconds': 172800},
    },
]

audience.remote_create()
curl \
  -F 'name=Travel Audience' \
  -F 'subtype=CLAIM' \
  -F 'claim_objective=TRAVEL' \
  -F 'content_type=HOTEL' \
  -F 'event_source_group=<EVENT_SOURCE_GROUP_ID>' \
  -F 'rule={"itinerary_contains_date":{"eq":"2018-12-25"}}' \
  -F 'inclusions=[{"event":"Search","retention":{"min_seconds":0,"max_seconds":172800}}]' \
  -F 'exclusions=[{"event":"Purchase","retention":{"min_seconds":0,"max_seconds":172800}}]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/customaudiences

الأشخاص الذين ينشئون جمهورًا لرحلات الطيران ذهاب فقط:

curl \
  -F 'name=Travel Audience' \
  -F 'claim_objective=TRAVEL' \
  -F 'content_type=FLIGHT' \
  -F 'event_source_group=<EVENT_SOURCE_GROUP_ID>' \
  -F 'rule={"and":[{"returning_departure_date":{"exists":false]}}' \
  -F 'inclusions=[ 
    { 
      "event": "Search", 
      "count": {"gt":3}, 
      "retention": {"min_seconds":0,"max_seconds":432000} 
    } 
  ]' \
  -F 'exclusions=[{"event":"Purchase","retention":{"min_seconds":0,"max_seconds":172800}}]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/customaudiences

بعد الانتهاء من إنشاء جماهيرك، يمكن إضافتهم بعد ذلك إلى مواصفة الاستهداف ضمن حملتك الإعلانية المشتملة على إعلانات سفر.