Inserzioni per i viaggi - Gestione del pubblico

Questa guida parte dal presupposto che tu disponga di un inventario con i tuoi prodotti di viaggio pronti, che abbia configurato gli eventi di viaggio richiesti sul tuo sito web e/o nella tua app mobile e che abbia associato il tuo catalogo alle origini degli eventi.

A partire dal 20 settembre 2018, non supporteremo subtype dopo la versione 3.0 dell'API Marketing per gruppi di pubblico personalizzato per siti web, app, gruppi di pubblico personalizzato in base alle interazioni e gruppi di pubblico da dati di conversione offline. L'unica eccezione è che subtype sarà ancora supportato per i gruppi di pubblico personalizzati in base alle interazioni per i video.

Creazione di un pubblico per i viaggi in due passaggi:

Passaggio 1: creare e condividere un gruppo con origine degli eventi di viaggio

Oltre ad associare le origini degli eventi al tuo catalogo, devi anche creare un gruppo con origini degli eventi. I gruppi con origini degli eventi sono usati per compilare i dati del pubblico.

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

Quindi, dovrai condividere questo gruppo con origini degli eventi con gli account pubblicitari per cui desideri creare un pubblico basato sul gruppo. Puoi eseguire l'operazione mediante una chiamata 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

Passaggio 2: creare il pubblico per i viaggi

A questo punto, il tuo segnale utente (pixel e/o eventi nell'app) dovrebbe essere configurato e associato a un gruppo con origine degli eventi e ai tuoi cataloghi di viaggi.

Per definire come destinatari gli utenti che hanno mostrato un'intenzione di viaggio esplicita, devi creare un pubblico dinamico per i viaggi, composto da utenti a cui vorresti mostrare l'inserzione. Puoi inserire ed escludere gli utenti in base ai segnali delle intenzioni per i viaggi. Puoi anche applicare ulteriori regole basate sui filtri in aggiunta agli eventi come con il pubblico personalizzato del sito web. Il campo flight_set_id è obbligatorio per un pubblico dinamico per i voli. Per il pubblico per hotel e destinazioni, non devi specificare un hotel_set_id o destination_set_id.

Per configurare un nuovo pubblico per i viaggi, effettua una chiamata HTTP POST a /act_<AD_ACCOUNT_ID>/customaudiences

Parametri del pubblico

Campo e tipoDescrizione

claim_objective

Tipo: enum {TRAVEL}

Obbligatorio.

L'obiettivo del pubblico.

Deve essere impostato su TRAVEL.

content_type

Tipo: enum {HOTEL, FLIGHT, DESTINATION}

Obbligatorio.

Specifica il tipo di segnale da usare per realizzare questo pubblico.

Deve essere impostato su HOTEL, FLIGHT o DESTINATION.

event_sources

Tipo: json string

Array JSON della coppia id e type. Il campo id è un singolo ID dell'origine dell'evento, mentre il campo type è un pixel, un'app o offline_events. Ad esempio:

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

Obbligatorio se non fornisci event_source_group. Se lo fornisci, non indicare anche event_source_group.

event_source_group

Tipo: id

Specifica il gruppo con origine degli eventi i cui eventi saranno alla base del pubblico. Obbligatorio se non fornisci event_sources.

inclusions

Tipo: object[]

Obbligatorio.

Un array di oggetti JSON che elenca ciascun segnale delle intenzioni che renderebbe un account del Centro gestione account adatto per questo pubblico. Consulta la tabella Parametri dell'oggetto inclusione qui sotto.

description

Tipo: string

Un'ulteriore descrizione del pubblico.

exclusions

Tipo: object[]

Un array di oggetti JSON che elenca ciascun segnale delle intenzioni che escluderebbe un account del Centro gestione account da questo pubblico. Consulta la tabella Parametri dell'oggetto esclusione qui sotto.

rule

Tipo: object

Una regola del pubblico classica da applicare al flusso di eventi prima dell'elaborazione di eventuali inclusions e exclusions. Usa uno dei parametri classici e consulta la tabella Parametri per i viaggi dell'oggetto regola qui sotto per i parametri specifici delle inserzioni per i viaggi.

Parametri dell'oggetto inclusione

Nome e tipo di campoDescrizione

event

Tipo: enum {Search, ViewContent, InitiateCheckout, Purchase}

Obbligatorio.

Il nome dell'evento di un segnale che desideri prendere in considerazione per l'inclusione.

Esempio: {"event": "Search", …}

retention

Tipo: object

Obbligatorio.

La quantità di tempo minima/massima trascorsa dalla ricezione dell'evento per essere preso in considerazione per gli scopi dell'inclusione. La finestra di mantenimento deve essere di almeno 4 ore.

Consulta la tabella Parametri dell'oggetto retention qui sotto.

Esempio: {…, "retention": {"min_seconds": 0, "max_seconds": 259200}, …}

booking_window

Tipo: object

L'intervallo di prenotazione è il tempo in secondi tra la data di check-in dell'utente e l'ora attuale. Specifica un intervallo e verranno inclusi solo gli utenti il cui intervallo di prenotazione vi rientra. Sono supportati anche gli intervalli di prenotazione negativi, che ti consentono di includere gli utenti con date di check-in già superate.

Consulta la tabella Parametri dell'oggetto intervallo di prenotazione qui sotto.

Esempi:

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

count

Tipo: operatori JSON

Il numero di volte in cui è stato attivato l'evento. Puoi usare operatori di uguaglianza e di confronto numerico.

Esempi: {…"count": {"lte": 3}, …}

Parametri dell'oggetto retention

Nome e tipo di campoDescrizione

max_seconds

Tipo: int

Obbligatorio.

La quantità massima di tempo (in secondi) dalla ricezione dell'evento.

Esempio: 259200

min_seconds

Tipo: int

La quantità minima di tempo (in secondi) dalla ricezione dell'evento.

Esempio: 0

Parametri dell'oggetto booking_window

Nome e tipo di campoDescrizione

min_seconds

Tipo: int

Obbligatorio.

La quantità di tempo minima (in secondi) tra la data attuale e la data di check-in espressa dall'utente.

Esempio: 172800

max_seconds

Tipo: int

Obbligatorio.

La quantità di tempo massima (in secondi) tra la data attuale e la data di check-in espressa dall'utente.

Esempio: 604800

Parametri dell'oggetto exclusions

Nome e tipo di campoDescrizione

event

Tipo: enum { Search, ViewContent, InitiateCheckout, Purchase }

Obbligatorio.

Il nome dell'evento di un segnale che desideri prendere in considerazione per l'esclusione.

Esempio: {"event": "Search", …}

retention

tipo: object

Obbligatorio.

La quantità di tempo minima/massima trascorsa dalla ricezione dell'evento per essere presa in considerazione per gli scopi dell'esclusione. La finestra di mantenimento deve essere di almeno 4 ore.

Consulta la tabella Parametri dell'oggetto retention qui sotto.

Esempio: {…, "retention": {"min_seconds": 0, "max_seconds": 259200}, …}

Parametri per i viaggi dell'oggetto rule

Analogamente ai parametri classici, ciascun parametro può essere usato con qualsiasi operatoreJSON standard.

Nome e tipo di campoDescrizione

hotel_set_id

tipo: int

Corrisponde solo a quegli eventi in cui esiste almeno un content_id nell'elemento hotel_set_id specificato.

Solo per il pubblico per i viaggi con content_type impostato su HOTEL.

Esempio: {…, "hotel_set_id": {"eq": 123456789}, …}

destination_set_id

tipo: int

Corrisponde solo a quegli eventi in cui esiste almeno un content_id nell'elemento destination_set_id specificato.

Solo per il pubblico per i viaggi con content_type impostato su DESTINATION.

Esempio: {…, "destination_set_id": {"eq": 123456789}, …}

flight_set_id

tipo: int

Obbligatorio per le inserzioni per i voli.

Corrisponde solo a quegli eventi in cui la tratta (da origin_airport a destination_airport) esiste nell'elemento flight_set_id specificato.

Solo per il pubblico per i viaggi con content_type impostato su FLIGHT.

Esempio: {…, "flight_set_id": {"eq": 123456789}, …}

length_of_stay

tipo: int

Numero di notti incluse nel viaggio.

Esempio: {… "length_of_stay": {"eq": 1}, …}

number_of_weekends

tipo: int

Numero di fine settimana tra la data di inizio e quella di fine.

Esempio: {…, "number_of_weekends": {"gte": 5}, …}

num_travelers

tipo: int

Numero totale di viaggiatori.

  • Per un content_type di hotel o destination, è num_adults + num_children.
  • Per un content_type di flight, si include anche num_infants.

Esempio: {…, "num_travelers": {"gt": 1}, …}

Campi delle date:

Inserzioni per gli hotel

  • checkin_date
  • checkout_date

Inserzioni per i voli

  • departing_departure_date
  • departing_arrival_date
  • returning_departure_date
  • returning_arrival_date

Inserzioni per le destinazioni

  • travel_start
  • travel_end

tipo: string

Usa i campi delle date pertinenti in base a content_type.

Esempio: {"checkin_date": {"gte": "2016-09-01"}}

itinerary_contains_date

tipo: string

Il viaggio contiene una data specifica.

Esempio: {"itinerary_contains_date": {"eq": "2016-12-25"}}

Esempi di codice

Singoli viaggiatori che hanno effettuato la ricerca almeno 3 volte negli ultimi 5 giorni ma che non hanno ancora prenotato:

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

Utenti che hanno visualizzato o iniziato la prenotazione di un hotel in un insieme di hotel negli ultimi 2 giorni ma che non hanno completato la prenotazione:

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

Utenti che hanno iniziato il check-out o hanno acquistato i biglietti aerei negli ultimi 5 giorni con intervallo di prenotazione dei voli compreso tra 2 e 7 giorni:

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

Utenti che hanno cercato "New York City" più di 3 volte negli ultimi 2 giorni ma che non hanno ancora prenotato:

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

Utenti che hanno cercato hotel tra checkin_date e checkout_date specifiche negli ultimi 2 giorni ma che non hanno ancora prenotato:

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

Utenti che hanno cercato soggiorni in hotel con date specifiche (ad es. Natale) negli ultimi 2 giorni ma che non hanno ancora prenotato:

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

Utenti che formano un pubblico per i voli di sola andata:

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

Una volta creato il tuo pubblico, puoi aggiungerlo alle specifiche di targetizzazione nella campagna di inserzioni per i viaggi.