Inserzioni video e carosello

Puoi facilmente creare, misurare e ottimizzare inserzioni video e carosello su Facebook attraverso l'API. Consulta Facebook for Business, Inserzioni carosello. Per i formati video suppportati per le inserzioni, vedi Centro assistenza per gli inserzionisti, Video.

Inserzioni video

Documenti di riferimento

Per creare un'inserzione video in un obiettivo VIDEO_VIEWS e ottimizzare l'offerta per la copertura, procedi nel modo seguente:

Passaggio 1: fornire le creatività dell'inserzione

Crea un'inserzione video utilizzando un ID video esistente e un video caricato su Facebook.

Ecco cosa ti servirà:

  • Autorizzazioni pages_read_engagement e ads_management
  • Un video caricato sull'endpoint act_{ad-account-id}/advideos
use FacebookAds\Object\AdCreative;
use FacebookAds\Object\AdCreativeVideoData;
use FacebookAds\Object\Fields\AdCreativeVideoDataFields;
use FacebookAds\Object\AdCreativeObjectStorySpec;
use FacebookAds\Object\Fields\AdCreativeObjectStorySpecFields;
use FacebookAds\Object\Fields\AdCreativeFields;


$video_data = new AdCreativeVideoData();
$video_data->setData(array(
  AdCreativeVideoDataFields::IMAGE_URL => '<THUMBNAIL_URL>',
  AdCreativeVideoDataFields::VIDEO_ID => <VIDEO_ID>,
));

$object_story_spec = new AdCreativeObjectStorySpec();
$object_story_spec->setData(array(
  AdCreativeObjectStorySpecFields::PAGE_ID => <PAGE_ID>,
  AdCreativeObjectStorySpecFields::VIDEO_DATA => $video_data,
));

$creative = new AdCreative(null, 'act_<AD_ACCOUNT_ID>');

$creative->setData(array(
  AdCreativeFields::NAME => 'Sample Creative',
  AdCreativeFields::OBJECT_STORY_SPEC => $object_story_spec,
));

$creative->create();
from facebookads.adobjects.adcreative import AdCreative
from facebookads.adobjects.adcreativeobjectstoryspec \
    import AdCreativeObjectStorySpec
from facebookads.adobjects.adcreativevideodata \
    import AdCreativeVideoData

video_data = AdCreativeVideoData()
video_data[AdCreativeVideoData.Field.description] = 'My Description'
video_data[AdCreativeVideoData.Field.video_id] = <VIDEO_ID>
video_data[AdCreativeVideoData.Field.image_url] = '<IMAGE_URL>'

object_story_spec = AdCreativeObjectStorySpec()
object_story_spec[AdCreativeObjectStorySpec.Field.page_id] = <PAGE_ID>
object_story_spec[AdCreativeObjectStorySpec.Field.video_data] = video_data

creative = AdCreative(parent_id='act_<AD_ACCOUNT_ID>')
creative[AdCreative.Field.name] = 'Video Ad Creative'
creative[AdCreative.Field.object_story_spec] = object_story_spec
creative.remote_create()
AdCreative adCreative = new AdAccount(act_<AD_ACCOUNT_ID>, context).createAdCreative()
  .setName("Sample Creative")
  .setObjectStorySpec(
    new AdCreativeObjectStorySpec()
      .setFieldPageId(<PAGE_ID>)
      .setFieldVideoData(
        new AdCreativeVideoData()
          .setFieldImageUrl(<THUMBNAIL_URL>)
          .setFieldVideoId(<VIDEO_ID>)
      )
  )
  .execute();
String ad_creative_id = adCreative.getId();
curl \
  -F 'name=Sample Creative' \
  -F 'object_story_spec={ 
    "page_id": "<PAGE_ID>", 
    "video_data": {"image_url":"<THUMBNAIL_URL>","video_id":"<VIDEO_ID>"} 
  }' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/adcreatives

Slideshow

Per estendere o lanciare campagne del brand su telefoni con funzioni di base nei mercati emergenti o per creare un semplice video, prova gli slideshow di immagini. Carica immagini in una risorsa video. Ad esempio:

use FacebookAds\Object\AdVideo;
use FacebookAds\Object\Fields\AdVideoFields;

$video = new AdVideo(null, 'act_<AD_ACCOUNT_ID>');
$video->{AdVideoFields::SLIDESHOW_SPEC} = array (
  'images_urls' => array(
    '<IMAGE_URL_1>',
    '<IMAGE_URL_2>',
    '<IMAGE_URL_3>',
  ),
  'duration_ms' => 2000,
  'transition_ms' => 200,
);

$video->create();
from facebookads.adobjects.advideo import AdVideo
from facebookads.specs import SlideshowSpec

video = AdVideo(parent_id='act_<AD_ACCOUNT_ID>')
slideshow = SlideshowSpec()
slideshow.update({
    SlideshowSpec.Field.images_urls: <IMAGE_URLS>,
    SlideshowSpec.Field.duration_ms: 2000,
    SlideshowSpec.Field.transition_ms: 200,
})

video[AdVideo.Field.slideshow_spec] = slideshow
video.remote_create()
new AdAccount(act_<AD_ACCOUNT_ID>, context).createAdVideo()
  .setSlideshowSpec("{\"images_urls\":[\"" + <IMAGE_URL_1> + "\",\"" + <IMAGE_URL_2> + "\",\"" + <IMAGE_URL_3> + "\"],\"duration_ms\":\"2000\",\"transition_ms\":\"200\"}")
  .execute();
curl \
  -F 'slideshow_spec={ 
    "images_urls": [ 
      "<IMAGE_URL_1>", 
      "<IMAGE_URL_2>", 
      "<IMAGE_URL_3>" 
    ], 
    "duration_ms": 2000, 
    "transition_ms": 200 
  }' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph-video.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/advideos

Consulta le best practice per le creatività video e il riferimento sui video delle inserzioni.

Passaggio 2: creare una campagna pubblicitaria

Imposta l'obiettivo su VIDEO_VIEWS:

curl -X POST \ -F 'name="Video Views campaign"' \ -F 'objective="OUTCOME_ENGAGEMENT"' \ -F 'status="PAUSED"' \ -F 'special_ad_categories=[]' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/act_<AD_ACCOUNT_ID>/campaigns
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const Campaign = bizSdk.Campaign; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'name' : 'Video Views campaign', 'objective' : 'OUTCOME_ENGAGEMENT', 'status' : 'PAUSED', 'special_ad_categories' : [], }; const campaigns = (new AdAccount(id)).createCampaign( fields, params ); logApiCallResult('campaigns api call complete.', campaigns);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\Campaign; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'name' => 'Video Views campaign', 'objective' => 'OUTCOME_ENGAGEMENT', 'status' => 'PAUSED', 'special_ad_categories' => array(), ); echo json_encode((new AdAccount($id))->createCampaign( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.campaign import Campaign from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'name': 'Video Views campaign', 'objective': 'OUTCOME_ENGAGEMENT', 'status': 'PAUSED', 'special_ad_categories': [], } print AdAccount(id).create_campaign( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).createCampaign() .setName(\"Video Views campaign\") .setObjective(Campaign.EnumObjective.VALUE_OUTCOME_ENGAGEMENT) .setStatus(Campaign.EnumStatus.VALUE_PAUSED) .setParam(\"special_ad_categories\", \"[]\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) campaigns = ad_account.campaigns.create({ name: 'Video Views campaign', objective: 'OUTCOME_ENGAGEMENT', status: 'PAUSED', special_ad_categories: [], })

Consulta il riferimento sulle campagne, AdObjectives in PHP e AdObjectives in Python

Passaggio 3: creare un gruppo di inserzioni

Se il tuo obiettivo è ridurre il più possibile il costo per visualizzazione, associa l'obiettivo della campagna di visualizzazione del video al parametro optimization_goal=THRUPLAY del gruppo di inserzioni. Puoi impostare bidding_event su IMPRESSIONS o THRUPLAY per pagare per impression o per visualizzazione del video. Scopri di più sull'offerta CPV.

curl \
  -F 'name=A CPV Ad Set' \
  -F 'campaign_id=<CAMPAIGN_ID>' \
  -F 'daily_budget=500' \
  -F 'start_time=2018-02-06T04:45:29+0000' \
  -F 'end_time=2018-02-13T04:45:29+0000' \
  -F 'billing_event=THRUPLAY' \
  -F 'optimization_goal=THRUPLAY' \
  -F 'bid_amount=100' \
  -F 'targeting={ 
    "device_platforms": ["mobile"], 
    "geo_locations": {"countries":["US"]}, 
    "publisher_platforms": ["facebook"] 
  }' \
  -F 'status=PAUSED' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/<VERSION>/<AD_ACCOUNT_ID>/adsets

Le tariffe dei costi per visualizzazione sono inferiori per i gruppi di inserzioni con optimization_goal=THRUPLAY rispetto ai CPV di acquisti basati su copertura e frequenza ottimizzati per le visualizzazioni del video. Consulta il riferimento sui gruppi di inserzioni.

Passaggio 4: creare un'inserzione

Usa il gruppo di inserzioni e la creatività dell'inserzione esistenti:

curl -X POST \ -F 'name="My Ad"' \ -F 'adset_id="<AD_SET_ID>"' \ -F 'creative={ "creative_id": "<CREATIVE_ID>" }' \ -F 'status="PAUSED"' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/act_<AD_ACCOUNT_ID>/ads
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const Ad = bizSdk.Ad; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'name' : 'My Ad', 'adset_id' : '<adSetID>', 'creative' : {'creative_id':'<adCreativeID>'}, 'status' : 'PAUSED', }; const ads = (new AdAccount(id)).createAd( fields, params ); logApiCallResult('ads api call complete.', ads);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\Ad; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'name' => 'My Ad', 'adset_id' => '<adSetID>', 'creative' => array('creative_id' => '<adCreativeID>'), 'status' => 'PAUSED', ); echo json_encode((new AdAccount($id))->createAd( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.ad import Ad from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'name': 'My Ad', 'adset_id': '<adSetID>', 'creative': {'creative_id':'<adCreativeID>'}, 'status': 'PAUSED', } print AdAccount(id).create_ad( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).createAd() .setName(\"My Ad\") .setAdsetId(<adSetID>L) .setCreative( new AdCreative() .setFieldId(\"<adCreativeID>\") ) .setStatus(Ad.EnumStatus.VALUE_PAUSED) .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) ads = ad_account.ads.create({ name: 'My Ad', adset_id: '<adSetID>', creative: {'creative_id':'<adCreativeID>'}, status: 'PAUSED', })

Quando l'obiettivo della campagna è VIDEO_VIEWS, l'inserzione acquisisce per impostazione predefinita le specifiche di monitoraggio corrette, che definiscono le azioni monitorate per un'inserzione. Ad esempio, le visualizzazioni del video:

{'action.type':'video_view','post':'POST_ID','post.wall':'PAGE_ID'}
    

Consulta Gestione inserzioni: le mie campagne e il riferimento sulle inserzioni.

Notorietà del brand di esempio

Per creare un'inserzione video per promuovere la notorietà del brand, consulta il post del blog sulla notorietà del brand.

Copertura e frequenza di esempio

Documenti di riferimento

Per estendere la copertura di un video a più persone, usa l'obiettivo della campagna di visualizzazione del video con copertura e frequenza. Dovrai creare una previsione, prenotarla e assegnarla al tuo gruppo di inserzioni.

Segui le indicazioni relative alla creazione per le visualizzazioni del video, ma applica copertura e frequenza al tuo gruppo di inserzioni. Specifica questi parametri aggiuntivi:

$adset->{AdSetFields::RF_PREDICTION_ID} = <RESERVATION_ID>;
adset[AdSet.Field.prediction_id] = <RESERVATION_ID>
-F "rf_prediction_id=<RESERVATION_ID>" \

Video per la risposta diretta

Per incoraggiare le persone a passare dalla notorietà all'azione, consulta Video Creative in the Carousel Format (Creatività video nel formato carosello).

  • Raggiungi le persone che hanno guardato un video. Dalla notorietà all'affinità e alla considerazione. Vedi Remarketing.
  • Interagisci con il brand e i prodotti. Aggiungi una call to action per visitare una pagina specifica del tuo sito web. Vedi Call to action.

Remarketing

Il remarketing delle inserzioni video aiuta gli inserzionisti a targetizzare un pubblico personalizzato a partire da video organici o a pagamento sia su Facebook che su Instagram. Usa questa funzione per fare in modo che le persone passino dalla notorietà a obiettivi di funnel più significativi, come affinità e considerazione. Consulta Ricerca: combinazioni di creatività che funzionano.

Per creare un pubblico per un video su una pagina, hai bisogno dell'autorizzazione dell'inserzionista di quella pagina.

Per il pubblico, imposta subtype=ENGAGEMENT. Quindi scrivi le regole per il pubblico che desideri creare. Ogni regola ha un valore object_id, come ID video, e un valore event_name. Il valore event_name è uno dei seguenti:

  • video_watched: il numero di volte in cui il tuo video è stato visualizzato per un totale di almeno 3 secondi o per la quasi totalità della durata, qualunque azione si sia verificata per prima.
  • video_completed: il numero di volte in cui il tuo video è stato visualizzato fino al 95% della sua durata, incluse le visualizzazioni che sono saltate direttamente a quel punto.
  • video_view_10s: il numero di volte in cui il tuo video è stato visualizzato per un totale di almeno 10 secondi o per la quasi totalità della durata, qualunque azione si sia verificata per prima.
  • video_view_15s: il numero di volte in cui il tuo video è stato visualizzato per un totale di almeno 15 secondi o per la quasi totalità della durata, qualunque azione si sia verificata per prima.
  • video_view_25_percent: il numero di volte in cui il tuo video è stato visualizzato fino al 25% della sua durata, incluse le visualizzazioni che sono saltate direttamente a quel punto.
  • video_view_50_percent: il numero di volte in cui il tuo video è stato visualizzato fino al 50% della sua durata, incluse le visualizzazioni che sono saltate direttamente a quel punto.
  • video_view_75_percent: il numero di volte in cui il tuo video è stato visualizzato fino al 75% della sua durata, incluse le visualizzazioni che sono saltate direttamente a quel punto.

Puoi combinare diversi video per creare un pubblico basato su più video e azioni. Ad esempio, un pubblico può contenere visualizzazioni da 3 secondi del video A e visualizzazioni complete dei video B e C.

Questo crea un pubblico sulla base degli spettatori che hanno visualizzato almeno 3 secondi del video 1 e di quelli che hanno visualizzato interamente il video 2 negli ultimi 14 giorni. Inoltre, il pubblico prevede l'inserimento automatico delle persone che hanno visualizzato il video prima della creazione del pubblico con prefill=true.

use FacebookAds\Object\CustomAudience;
use FacebookAds\Object\Fields\CustomAudienceFields;


$audience = new CustomAudience(null, $ad_account_id);
$audience->setData(array(
  CustomAudienceFields::NAME => 'Video Ads Engagement Audience',
  CustomAudienceFields::SUBTYPE => 'ENGAGEMENT',
  CustomAudienceFields::DESCRIPTION => 'Users who watched my video',
  CustomAudienceFields::PREFILL => true,
  CustomAudienceFields::RULE => array(
    array(
      'object_id' => $video_id_1,
      'event_name' => 'video_watched',
    ),
    array(
      'object_id' => $video_id_2,
      'event_name' => 'video_completed',
    ),
  ),
));

$audience->create();
from facebookads.adobjects.customaudience import CustomAudience

audience = CustomAudience(parent_id=ad_account_id)
audience[CustomAudience.Field.subtype] = CustomAudience.Subtype.engagement
audience[CustomAudience.Field.name] = 'Video Ads Engagement Audience'
audience[CustomAudience.Field.description] = 'Users who watched my video'
audience[CustomAudience.Field.prefill] = True
audience[CustomAudience.Field.rule] = [
    {
        "object_id": video_id_1,
        "event_name": "video_watched",
    },
    {
        "object_id": video_id_2,
        "event_name": "video_completed",
    },
]
audience.remote_create()
curl \
  -F 'name=Video Ads Engagement Audience' \
  -F 'subtype=ENGAGEMENT' \
  -F 'description=Users who watched my video' \
  -F 'prefill=1' \
  -F 'rule=[ 
    {"object_id":"%video_id_1","event_name":"video_watched"}, 
    {"object_id":"%video_id_2","event_name":"video_completed"} 
  ]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/%ad_account_id/customaudiences

Il backfill per le visualizzazioni del video è supportato a partire dal 16 ottobre 2015.

Call to action

I video con call to action (CTA) invitano le persone a scoprire di più e visitare una pagina specifica su un sito web. Migliora le prestazioni quando il tuo obiettivo principale sono le visualizzazioni del video o la notorietà del brand e l'obiettivo secondario è l'aumento dei clic fuori dal sito. Per quest'ultimo, devi usare un'inserzione video con link. Ecco come vengono visualizzate le CTA:

  • Su mobile e computer: vengono mostrate come parte del post. Quando il video viene messo in pausa, vengono visualizzate accanto all'opzione Riprendi.
  • Su mobile: quando qualcuno clicca su un video per guardarlo a schermo intero, viene visualizzata una call to action mobile come overlay video.
  • Post con link a video esterni: le CTA non vengono mostrate.

Puoi usare i video con CTA solo con i seguenti obiettivi della campagna:

Consulta Espansione dei video per obiettivi aggiuntivi. Questo esempio crea un'inserzione video con la call to action GET_DIRECTIONS:

use FacebookAds\Object\AdCreative;
use FacebookAds\Object\Fields\AdCreativeVideoDataFields;
use FacebookAds\Object\Fields\AdCreativeObjectStorySpecFields;
use FacebookAds\Object\Fields\AdCreativeFields;
use FacebookAds\Object\AdCreativeVideoData;
use FacebookAds\Object\AdCreativeObjectStorySpec;
use FacebookAds\Object\Values\AdCreativeCallToActionTypeValues;

$video_data = new AdCreativeVideoData();
$video_data->setData(array(
  AdCreativeVideoDataFields::IMAGE_URL => '<THUMBNAIL_URL>',
  AdCreativeVideoDataFields::VIDEO_ID => <VIDEO_ID>,
  AdCreativeVideoDataFields::LINK_DESCRIPTION =>
    "Come check out our new store in Menlo Park!",
  AdCreativeVideoDataFields::CALL_TO_ACTION => array(
    'type' => AdCreativeCallToActionTypeValues::GET_DIRECTIONS,
    'value' => array(
      'link' => 'fbgeo://37.48327, -122.15033, "1601 Willow Rd Menlo Park CA"',
    ),
  ),
));

$story = new AdCreativeObjectStorySpec();
$story->setData(array(
  AdCreativeObjectStorySpecFields::PAGE_ID => <PAGE_ID>,
  AdCreativeObjectStorySpecFields::VIDEO_DATA => $video_data,
));

$creative = new AdCreative(null, 'act_<AD_ACCOUNT_ID>');
$creative->{AdCreativeFields::OBJECT_STORY_SPEC} = $story;
$creative->create();
from facebookads.adobjects.adcreativevideodata import AdCreativeVideoData
from facebookads.adobjects.adcreative import AdCreative
from facebookads.adobjects.adcreativeobjectstoryspec \
    import AdCreativeObjectStorySpec

video_data = AdCreativeVideoData()
video_data[AdCreativeVideoData.Field.image_url] = image_url
video_data[AdCreativeVideoData.Field.video_id] = <VIDEO_ID>
video_data[AdCreativeVideoData.Field.description]\
    = 'Come check out our new store in Menlo Park!'
video_data[AdCreativeVideoData.Field.call_to_action] = {
    'type': 'GET_DIRECTIONS',
    'value': {
        'link': 'fbgeo://37.48327, -122.15033, "1601 Willow Rd Menlo Park CA"',
    },
}

story = AdCreativeObjectStorySpec()
story[AdCreativeObjectStorySpec.Field.page_id] = <PAGE_ID>
story[AdCreativeObjectStorySpec.Field.video_data] = video_data

creative = AdCreative(parent_id='act_<AD_ACCOUNT_ID>')
creative[AdCreative.Field.object_story_spec] = story
creative.remote_create()
AdCreative adCreative = new AdAccount(act_<AD_ACCOUNT_ID>, context).createAdCreative()
  .setObjectStorySpec(
    new AdCreativeObjectStorySpec()
      .setFieldPageId(<PAGE_ID>)
      .setFieldVideoData(
        new AdCreativeVideoData()
          .setFieldCallToAction(
            new AdCreativeLinkDataCallToAction()
              .setFieldType(AdCreativeLinkDataCallToAction.EnumType.VALUE_GET_DIRECTIONS)
              .setFieldValue(
                new AdCreativeLinkDataCallToActionValue()
                  .setFieldLink("fbgeo://37.48327, -122.15033, \"1601 Willow Rd Menlo Park CA\"")
              )
          )
          .setFieldLinkDescription("Come check out our new store in Menlo Park!")
          .setFieldImageUrl(<THUMBNAIL_URL>)
          .setFieldVideoId(<VIDEO_ID>)
      )
  )
  .execute();
String ad_creative_id = adCreative.getId();
curl \
  -F 'object_story_spec={ 
    "page_id": "<PAGE_ID>", 
    "video_data": { 
      "call_to_action": { 
        "type": "GET_DIRECTIONS", 
        "value": { 
          "link": "fbgeo:\/\/37.48327, -122.15033, \"1601 Willow Rd Menlo Park CA\"" 
        } 
      }, 
      "image_url": "<THUMBNAIL_URL>", 
      "link_description": "Come check out our new store in Menlo Park!", 
      "video_id": "<VIDEO_ID>" 
    } 
  }' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/adcreatives

Metriche dei video

Dati statistici sui post con video, organici

Documenti di riferimento

Scopri di più sulle prestazioni dei tuoi video su Facebook e prendi decisioni più informate in merito ai contenuti video. Attualmente, forniamo metriche solo quando qualcuno inizia a guardare i video. Questo include le visualizzazioni del video, le visualizzazioni uniche del video, la durata media della visualizzazione del video e il mantenimento del pubblico. Scopri i punti del video in cui le persone interrompono la visualizzazione e le parti che le persone potrebbero trovare più interessanti.

Dati statistici sui post con video, a pagamento

Usa l'API Ad Insights. La risposta contiene diverse metriche relative al video.

Tipo di video

Recupera le statistiche delle inserzioni video raggruppate per tipo di video, come riproduzione automatica o riproduzione tramite clic. Includono action_video_type in action_breakdowns. I valori attesi per action_video_type sono total, click_to_play e auto_play.

Attualmente, siamo in fase di test limitata per l'opzione action_video_type. Per identificare i client con i dettagli, verifica il parametro CAN_USE_VIDEO_METRICS_BREAKDOWN per l'account pubblicitario.

use FacebookAds\Object\AdAccount;
use FacebookAds\Object\Fields\AdsInsightsFields;
use FacebookAds\Object\Values\AdsInsightsActionBreakdownsValues;
use FacebookAds\Object\Values\AdsInsightsDatePresetValues;

$account = new AdAccount('act_<AD_ACCOUNT_ID>');

$params = array(
  'action_breakdowns' => AdsInsightsActionBreakdownsValues::ACTION_VIDEO_TYPE,
  'date_preset' => AdsInsightsDatePresetValues::LAST_30D,
);

$fields = array(
  AdsInsightsFields::ACTIONS,
  AdsInsightsFields::VIDEO_AVG_PCT_WATCHED_ACTIONS,
  AdsInsightsFields::VIDEO_COMPLETE_WATCHED_ACTIONS,
);

$stats = $account->getInsights($fields, $params);
from facebookads.adobjects.adaccount import AdAccount
from facebookads.adobjects.adsinsights import AdsInsights

account = AdAccount('act_<AD_ACCOUNT_ID>')

params = {
    'action_breakdowns': AdsInsights.ActionBreakdowns.action_video_type,
    'date_preset': AdsInsights.DatePreset.last_30_days,
    'fields': [
        AdsInsights.Field.actions,
        AdsInsights.Field.video_avg_pct_watched_actions,
        AdsInsights.Field.video_complete_watched_actions,
    ],
}

stats = account.get_insights(params=params)
print(stats)
APINodeList<AdsInsights> adsInsightss = new AdAccount(act_<AD_ACCOUNT_ID>, context).getInsights()
  .setActionBreakdowns("action_video_type")
  .setDatePreset(AdsInsights.EnumDatePreset.VALUE_LAST_30_DAYS)
  .requestField("actions")
  .requestField("video_avg_pct_watched_actions")
  .requestField("video_complete_watched_actions")
  .execute();
curl -G \
  -d 'action_breakdowns=action_video_type' \
  -d 'date_preset=last_30_days' \
  -d 'fields=actions,video_avg_pct_watched_actions,video_complete_watched_actions' \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.8/act_<AD_ACCOUNT_ID>/insights

La risposta include oggetti con action_typevideo_view e contiene action_video_type:

{
  "data": [
    {
      "actions": [
        ...
        {
          "action_type": "video_play", 
          "value": 9898
        }, 
        {
          "action_type": "video_view", 
          "action_video_type": "total", 
          "value": 921129
        }, 
        {
          "action_type": "video_view", 
          "action_video_type": "auto_play", 
          "value": 915971
        }, 
        {
          "action_type": "video_view", 
          "action_video_type": "click_to_play", 
          "value": 5158
        }
      ], 
      "video_avg_pct_watched_actions": [
        {
          "action_type": "video_view", 
          "action_video_type": "total", 
          "value": 60.59
        }, 
        {
          "action_type": "video_view", 
          "action_video_type": "auto_play", 
          "value": 60.47
        }, 
        {
          "action_type": "video_view", 
          "action_video_type": "click_to_play", 
          "value": 80.63
        }
      ], 
      "video_complete_watched_actions": [
        {
          "action_type": "video_view", 
          "action_video_type": "total", 
          "value": 156372
        }, 
        {
          "action_type": "video_view", 
          "action_video_type": "auto_play", 
          "value": 154015
        }, 
        {
          "action_type": "video_view", 
          "action_video_type": "click_to_play", 
          "value": 2357
        }
      ], 
      "date_start": "2014-12-26", 
      "date_stop": "2015-03-25"
    }
  ], 
  "paging": {
    "cursors": {
      "before": "MA==", 
      "after": "MA=="
    }
  }
}

Vedi API Ad Insights

Ottieni più spazio per le creatività nel feed e rimanda le persone al tuo sito web o alla tua app mobile dove possono effettuare conversioni. Puoi creare un'inserzione carosello in due modi:

Le inserzioni carosello non sono supportate per Facebook Stories.

Creazione in linea

Crea un post della Pagina per l'inserzione carosello mentre sviluppi le creatività dell'inserzione. Specifica i contenuti del post della Pagina in object_story_spec, creando così un post della Pagina non pubblicato da adcreatives. Consulta Creatività dell'inserzione. Ad esempio:

use FacebookAds\Object\AdCreative;
use FacebookAds\Object\Fields\AdCreativeFields;
use FacebookAds\Object\Fields\AdCreativeLinkDataFields;
use FacebookAds\Object\Fields\AdCreativeObjectStorySpecFields;
use FacebookAds\Object\Fields\AdCreativeLinkDataChildAttachmentFields;
use FacebookAds\Object\AdCreativeLinkDataChildAttachment;
use FacebookAds\Object\AdCreativeLinkData;
use FacebookAds\Object\AdCreativeObjectStorySpec;

$product1 = (new AdCreativeLinkDataChildAttachment())->setData(array(
  AdCreativeLinkDataChildAttachmentFields::LINK =>
    'https://www.link.com/product1',
  AdCreativeLinkDataChildAttachmentFields::NAME => 'Product 1',
  AdCreativeLinkDataChildAttachmentFields::DESCRIPTION => '$8.99',
  AdCreativeLinkDataChildAttachmentFields::IMAGE_HASH => '<IMAGE_HASH>',
  AdCreativeLinkDataChildAttachmentFields::VIDEO_ID => '<VIDEO_ID>',
));

$product2 = (new AdCreativeLinkDataChildAttachment())->setData(array(
  AdCreativeLinkDataChildAttachmentFields::LINK =>
    'https://www.link.com/product2',
  AdCreativeLinkDataChildAttachmentFields::NAME => 'Product 2',
  AdCreativeLinkDataChildAttachmentFields::DESCRIPTION => '$9.99',
  AdCreativeLinkDataChildAttachmentFields::IMAGE_HASH => '<IMAGE_HASH>',
  AdCreativeLinkDataChildAttachmentFields::VIDEO_ID => '<VIDEO_ID>',
));

$product3 = (new AdCreativeLinkDataChildAttachment())->setData(array(
  AdCreativeLinkDataChildAttachmentFields::LINK =>
    'https://www.link.com/product3',
  AdCreativeLinkDataChildAttachmentFields::NAME => 'Product 3',
  AdCreativeLinkDataChildAttachmentFields::DESCRIPTION => '$10.99',
  AdCreativeLinkDataChildAttachmentFields::IMAGE_HASH => '<IMAGE_HASH>',
));

$link_data = new AdCreativeLinkData();
$link_data->setData(array(
  AdCreativeLinkDataFields::LINK => '<URL>',
  AdCreativeLinkDataFields::CHILD_ATTACHMENTS => array(
    $product1, $product2, $product3,
  ),
));

$object_story_spec = new AdCreativeObjectStorySpec();
$object_story_spec->setData(array(
  AdCreativeObjectStorySpecFields::PAGE_ID => <PAGE_ID>,
  AdCreativeObjectStorySpecFields::LINK_DATA => $link_data,
));

$creative = new AdCreative(null, 'act_<AD_ACCOUNT_ID>');
$creative->setData(array(
  AdCreativeFields::NAME => 'Sample Creative',
  AdCreativeFields::OBJECT_STORY_SPEC => $object_story_spec,
));

$creative->create();
from facebookads.adobjects.adcreative import AdCreative
from facebookads.adobjects.adcreativelinkdata import AdCreativeLinkData
from facebookads.adobjects.adcreativeobjectstoryspec \
    import AdCreativeObjectStorySpec
from facebookads.adobjects.adcreativelinkdatachildattachment \
    import AdCreativeLinkDataChildAttachment

product1 = AdCreativeLinkDataChildAttachment()
product1[AdCreativeLinkDataChildAttachment.Field.link] = '<URL>' + '/product1'
product1[AdCreativeLinkDataChildAttachment.Field.name] = 'Product 1'
product1[AdCreativeLinkDataChildAttachment.Field.description] = '$8.99'
product1[AdCreativeLinkDataChildAttachment.Field.image_hash] = '<IMAGE_HASH>'
product1[AdCreativeLinkDataChildAttachment.Field.video_id] = '<VIDEO_ID>'

product2 = AdCreativeLinkDataChildAttachment()
product2[AdCreativeLinkDataChildAttachment.Field.link] = '<URL>' + '/product2'
product2[AdCreativeLinkDataChildAttachment.Field.name] = 'Product 2'
product2[AdCreativeLinkDataChildAttachment.Field.description] = '$9.99'
product2[AdCreativeLinkDataChildAttachment.Field.image_hash] = '<IMAGE_HASH>'

product3 = AdCreativeLinkDataChildAttachment()
product3[AdCreativeLinkDataChildAttachment.Field.link] = '<URL>' + '/product3'
product3[AdCreativeLinkDataChildAttachment.Field.name] = 'Product 3'
product3[AdCreativeLinkDataChildAttachment.Field.description] = '$10.99'
product3[AdCreativeLinkDataChildAttachment.Field.image_hash] = '<IMAGE_HASH>'

link = AdCreativeLinkData()
link[link.Field.link] = '<URL>'
link[link.Field.child_attachments] = [product1, product2, product3]

story = AdCreativeObjectStorySpec()
story[story.Field.page_id] = <PAGE_ID>
story[story.Field.link_data] = link

creative = AdCreative(parent_id='act_<AD_ACCOUNT_ID>')
creative[AdCreative.Field.name] = 'MPA Creative'
creative[AdCreative.Field.object_story_spec] = story
creative.remote_create()
print(creative)
AdCreative adCreative = new AdAccount(act_<AD_ACCOUNT_ID>, context).createAdCreative()
  .setName("Sample Creative")
  .setObjectStorySpec(
    new AdCreativeObjectStorySpec()
      .setFieldLinkData(
        new AdCreativeLinkData()
          .setFieldCaption("My caption")
          .setFieldChildAttachments(Arrays.asList(
            new AdCreativeLinkDataChildAttachment()
              .setFieldDescription("$8.99")
              .setFieldImageHash(<IMAGE_HASH>)
              .setFieldLink("https://www.link.com/product1")
              .setFieldName("Product 1")
              .setFieldVideoId(<VIDEO_ID>)
          , 
            new AdCreativeLinkDataChildAttachment()
              .setFieldDescription("$9.99")
              .setFieldImageHash(<IMAGE_HASH>)
              .setFieldLink("https://www.link.com/product2")
              .setFieldName("Product 2")
              .setFieldVideoId(<VIDEO_ID>)
          , 
            new AdCreativeLinkDataChildAttachment()
              .setFieldDescription("$10.99")
              .setFieldImageHash(<IMAGE_HASH>)
              .setFieldLink("https://www.link.com/product3")
              .setFieldName("Product 3")
          ))
          .setFieldLink(<URL>)
      )
      .setFieldPageId(<PAGE_ID>)
  )
  .execute();
String ad_creative_id = adCreative.getId();
curl \
  -F 'name=Sample Creative' \
  -F 'object_story_spec={ 
    "link_data": { 
      "child_attachments": [ 
        { 
          "description": "$8.99", 
          "image_hash": "<IMAGE_HASH>", 
          "link": "https:\/\/www.link.com\/product1", 
          "name": "Product 1", 
          "video_id": "<VIDEO_ID>" 
        }, 
        { 
          "description": "$9.99", 
          "image_hash": "<IMAGE_HASH>", 
          "link": "https:\/\/www.link.com\/product2", 
          "name": "Product 2", 
          "video_id": "<VIDEO_ID>" 
        }, 
        { 
          "description": "$10.99", 
          "image_hash": "<IMAGE_HASH>", 
          "link": "https:\/\/www.link.com\/product3", 
          "name": "Product 3" 
        } 
      ], 
      "link": "<URL>" 
    }, 
    "page_id": "<PAGE_ID>" 
  }' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/adcreatives

La risposta è un ID della creatività:

{"id":"<CREATIVE_ID>"}

Creazione del post e successivamente dell'inserzione

Crea un post della Pagina non pubblicato. child_attachments è un array di oggetti del link. Su ogni oggetto del link, picture, name e description sono opzionali. Puoi pubblicarli a nome della Pagina solo con un token d'accesso della Pagina.

curl -X GET \ -d 'message="Browse our latest products"' \ -d 'published=0' \ -d 'child_attachments=[ { "link": "{app-store-url}", "name": "Product 1", "description": "$4.99", "image_hash": "{image-hash}" }, { "link": "{app-store-url}", "name": "Product 2", "description": "$4.99", "image_hash": "{image-hash}" }, { "link": "{app-store-url}", "name": "Product 3", "description": "$4.99", "image_hash": "{image-hash}" }, { "link": "{app-store-url}", "name": "Product 4", "description": "$4.99", "image_hash": "{image-hash}" } ]' \ -d 'caption="WWW.EXAMPLE.COM"' \ -d 'link="http://www.example.com/products"' \ -d 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/{page-id}/posts
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const Page = bizSdk.Page; const PagePost = bizSdk.PagePost; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<PAGE_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'message' : 'Browse our latest products', 'published' : '0', 'child_attachments' : [{'link':'<link>','name':'Product 1','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 2','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 3','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 4','description':'$4.99','image_hash':'<imageHash>'}], 'caption' : 'WWW.EXAMPLE.COM', 'link' : 'http://www.example.com/products', }; const postss = (new Page(id)).getPosts( fields, params ); logApiCallResult('postss api call complete.', postss);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\Page; use FacebookAds\Object\PagePost; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<PAGE_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'message' => 'Browse our latest products', 'published' => '0', 'child_attachments' => array(array('link' => '<link>','name' => 'Product 1','description' => '$4.99','image_hash' => '<imageHash>'),array('link' => '<link>','name' => 'Product 2','description' => '$4.99','image_hash' => '<imageHash>'),array('link' => '<link>','name' => 'Product 3','description' => '$4.99','image_hash' => '<imageHash>'),array('link' => '<link>','name' => 'Product 4','description' => '$4.99','image_hash' => '<imageHash>')), 'caption' => 'WWW.EXAMPLE.COM', 'link' => 'http://www.example.com/products', ); echo json_encode((new Page($id))->getPosts( $fields, $params )->getResponse()->getContent(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.page import Page from facebook_business.adobjects.pagepost import PagePost from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<PAGE_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'message': 'Browse our latest products', 'published': '0', 'child_attachments': [{'link':'<link>','name':'Product 1','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 2','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 3','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 4','description':'$4.99','image_hash':'<imageHash>'}], 'caption': 'WWW.EXAMPLE.COM', 'link': 'http://www.example.com/products', } print Page(id).get_posts( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<PAGE_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new Page(id, context).getPosts() .setParam(\"message\", \"Browse our latest products\") .setParam(\"published\", \"0\") .setParam(\"child_attachments\", \"[{\\"link\\":\\"<link>\\",\\"name\\":\\"Product 1\\",\\"description\\":\\"$4.99\\",\\"image_hash\\":\\"<imageHash>\\"},{\\"link\\":\\"<link>\\",\\"name\\":\\"Product 2\\",\\"description\\":\\"$4.99\\",\\"image_hash\\":\\"<imageHash>\\"},{\\"link\\":\\"<link>\\",\\"name\\":\\"Product 3\\",\\"description\\":\\"$4.99\\",\\"image_hash\\":\\"<imageHash>\\"},{\\"link\\":\\"<link>\\",\\"name\\":\\"Product 4\\",\\"description\\":\\"$4.99\\",\\"image_hash\\":\\"<imageHash>\\"}]\") .setParam(\"caption\", \"WWW.EXAMPLE.COM\") .setParam(\"link\", \"http://www.example.com/products\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<PAGE_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end page = FacebookAds::Page.get(id) postss = page.posts({ fields: { }, message: 'Browse our latest products', published: '0', child_attachments: [{'link':'<link>','name':'Product 1','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 2','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 3','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 4','description':'$4.99','image_hash':'<imageHash>'}], caption: 'WWW.EXAMPLE.COM', link: 'http://www.example.com/products', })

Fornisci quindi le creatività dell'inserzione con il post della Pagina non pubblicato. Usa l'id per il campo object_story_id nelle tue creatività dell'inserzione.

curl -X POST \ -F 'object_story_id="<PAGE_ID>_<POST_ID>"' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/act_<AD_ACCOUNT_ID>/adcreatives
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const AdCreative = bizSdk.AdCreative; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'object_story_id' : '<pageID>_<postID>', }; const adcreatives = (new AdAccount(id)).createAdCreative( fields, params ); logApiCallResult('adcreatives api call complete.', adcreatives);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\AdCreative; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'object_story_id' => '<pageID>_<postID>', ); echo json_encode((new AdAccount($id))->createAdCreative( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.adcreative import AdCreative from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'object_story_id': '<pageID>_<postID>', } print AdAccount(id).create_ad_creative( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).createAdCreative() .setObjectStoryId(\"<pageID>_<postID>\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) adcreatives = ad_account.adcreatives.create({ object_story_id: '<pageID>_<postID>', })

Creazione dell'inserzione video carosello

Le inserzioni carosello video possono includere l'elemento "caption" negli allegati secondari per personalizzare l'URL di visualizzazione nella schermata finale:

"child_attachments": [
 {
   "link": "https://www.facebookmarketingdevelopers.com/",
   "name": "Facebook Marketing Developers",
   "description": "Facebook Marketing Developers",
   "call_to_action": {
     "type": "APPLY_NOW",
     "value": {
      "link_title": "Facebook Marketing Developers"
     }
   },
   "video_id": "123",
   "caption": "mycustomlinkcaption.com"
  },
]

Per ottenere i dettagli degli allegati secondari, usa l'ID ed effettua una chiamata all'API Graph, riferimento sui video.

Creazione di un'inserzione per le app mobile

Limitazioni:

  • Le inserzioni carosello per le app mobile supportano una sola app.
  • È richiesto un minimo di tre immagini, rispetto alle due immagini delle inserzioni carosello che non promuovono un'app.
  • Le inserzioni carosello per le app mobile devono avere una call to action.
  • L'unità finale che di solito mostra l'immagine del profilo della pagina non verrà visualizzata per le inserzioni carosello per le app mobile. Tieni presente che devi specificare lo stesso link all'app store in ciascun child_attachment. Non devi specificare di nuovo il link in call_to_action:{'value':{'link':... }}}.

Ad esempio, per creare un'inserzione carosello per le installazioni dell'app mobile:

curl -X POST \
  -F 'name="Carousel app ad"' \
  -F 'object_story_spec={
       "page_id": "<PAGE_ID>",
       "link_data": {
         "message": "My message",
         "link": "http://www.example.com/appstoreurl",
         "caption": "WWW.ITUNES.COM",
         "name": "The link name",
         "description": "The link description",
         "child_attachments": [
           {
             "link": "http://www.example.com/appstoreurl",
             "image_hash": "<IMAGE_HASH>",
             "call_to_action": {
               "type": "USE_MOBILE_APP",
               "value": {
                 "app_link": "<DEEP_LINK>"
               }
             }
           },
           {
             "link": "http://www.example.com/appstoreurl",
             "image_hash": "<IMAGE_HASH>",
             "call_to_action": {
               "type": "USE_MOBILE_APP",
               "value": {
                 "app_link": "<DEEP_LINK>"
               }
             }
           },
           {
             "link": "http://www.example.com/appstoreurl",
             "image_hash": "<IMAGE_HASH>",
             "call_to_action": {
               "type": "USE_MOBILE_APP",
               "value": {
                 "app_link": "<DEEP_LINK>"
               }
             }
           },
           {
             "link": "http://www.example.com/appstoreurl",
             "image_hash": "<IMAGE_HASH>",
             "call_to_action": {
               "type": "USE_MOBILE_APP",
               "value": {
                 "app_link": "<DEEP_LINK>"
               }
             }
           }
         ],
         "multi_share_optimized": true
       }
     }' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v19.0/act_<AD_ACCOUNT_ID>/adcreatives

Puoi pubblicare il tuo post solo come la Pagina Facebook associata all'app mobile. Inoltre, devi usare un token d'accesso della Pagina.

$child_attachments = array();

for ($i = 0; $i <= 3; $i++) {
  $child_attachments[] = array(
    'link' => '<APP_STORE_URL>',
    'image_hash' => '<IMAGE_HASH_I>',
    'call_to_action' => array(
      'type' => 'USE_MOBILE_APP',
      'value' => array(
        'app_link' => '<DEEP_LINK_I>',
        'link_title' => '<LINK_TITLE_I>',
      ),
    ),
  );
}

$params = array(
  'message' => 'My description',
  'link' => '<APP_STORE_URL>',
  'caption' => 'WWW.ITUNES.COM',
  'child_attachments' => $child_attachments,
  'multi_share_optimized' => true,
);

$data = Api::instance()->call(
  '/'.'<PAGE_ID>'.'/feed',
  RequestInterface::METHOD_POST,
  $params)->getContent();
from facebookads import FacebookAdsApi
from facebookads.adobjects.adcreativelinkdatachildattachment \
    import AdCreativeLinkDataChildAttachment

child_attachments = list()

for i in range(3):
    child_attachments.append({
        AdCreativeLinkDataChildAttachment.Field.link: '<APP_STORE_URL>',
        AdCreativeLinkDataChildAttachment.Field.image_hash: '<IMAGE_HASH>',
        AdCreativeLinkDataChildAttachment.Field.call_to_action: {
            'type': 'USE_MOBILE_APP',
            'value': {
                'app_link': '<DEEP_LINK_I>',
                'link_title': '<LINK_TITLE_I>',
            },
        },
    })

params = {
    'message': 'My description',
    'link': '<APP_STORE_URL>',
    'caption': 'WWW.ITUNES.COM',
    'child_attachments': child_attachments,
    'multi_share_optimized': True,
}

data = FacebookAdsApi.get_default_api().\
    call('POST', (<PAGE_ID>, 'feed'), params)
curl \
  -F 'message=My description' \
  -F 'link=<APP_STORE_URL>' \
  -F 'caption=WWW.ITUNES.COM' \
  -F 'child_attachments=[ 
    { 
      "link": "<APP_STORE_URL>", 
      "image_hash": "<IMAGE_HASH_I>", 
      "call_to_action": { 
        "type": "USE_MOBILE_APP", 
        "value": {"app_link":"<DEEP_LINK_I>","link_title":"<LINK_TITLE_I>"} 
      } 
    }, 
    { 
      "link": "<APP_STORE_URL>", 
      "image_hash": "<IMAGE_HASH_I>", 
      "call_to_action": { 
        "type": "USE_MOBILE_APP", 
        "value": {"app_link":"<DEEP_LINK_I>","link_title":"<LINK_TITLE_I>"} 
      } 
    }, 
    { 
      "link": "<APP_STORE_URL>", 
      "image_hash": "<IMAGE_HASH_I>", 
      "call_to_action": { 
        "type": "USE_MOBILE_APP", 
        "value": {"app_link":"<DEEP_LINK_I>","link_title":"<LINK_TITLE_I>"} 
      } 
    }, 
    { 
      "link": "<APP_STORE_URL>", 
      "image_hash": "<IMAGE_HASH_I>", 
      "call_to_action": { 
        "type": "USE_MOBILE_APP", 
        "value": {"app_link":"<DEEP_LINK_I>","link_title":"<LINK_TITLE_I>"} 
      } 
    } 
  ]' \
  -F 'multi_share_optimized=1' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/<PAGE_ID>/feed

Usa l'id della risposta per la creazione di AdCreative:

curl -X POST \ -F 'object_story_id="<PAGE_ID>_<POST_ID>"' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/act_<AD_ACCOUNT_ID>/adcreatives
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const AdCreative = bizSdk.AdCreative; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'object_story_id' : '<pageID>_<postID>', }; const adcreatives = (new AdAccount(id)).createAdCreative( fields, params ); logApiCallResult('adcreatives api call complete.', adcreatives);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\AdCreative; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'object_story_id' => '<pageID>_<postID>', ); echo json_encode((new AdAccount($id))->createAdCreative( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.adcreative import AdCreative from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'object_story_id': '<pageID>_<postID>', } print AdAccount(id).create_ad_creative( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).createAdCreative() .setObjectStoryId(\"<pageID>_<postID>\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) adcreatives = ad_account.adcreatives.create({ object_story_id: '<pageID>_<postID>', })

Specifica del campo

Questa è un'inserzione carosello su iOS, in cui puoi vedere come vengono usati i campi descritti.

Nome Descrizione

child_attachments

tipo: oggetto

Un array da 2-10 elementi di oggetti del link necessario per le inserzioni carosello. Devi usare almeno tre oggetti per ottenere prestazioni ottimali; due oggetti abilitano le integrazioni semplici e l'uso di due oggetti può comportare risultati della campagna non ottimali.

child_attachments.link

tipo: stringa

URL del link o dell'app store allegato al post. Obbligatorio.

child_attachments.picture

tipo: URL

Immagine di anteprima associata al link. Proporzioni 1:1 e dimensioni minime di 458 x 458 pixel per la visualizzazione ottimale. Uno tra picture e image_hash deve essere specificato.

child_attachments.image_hash

tipo: stringa

Hash di un'immagine di anteprima associata al link dalla libreria delle immagini; usa proporzioni 1:1 e dimensioni minime di 458 x 458 pixel per la visualizzazione ottimale. Uno tra picture e image_hash deve essere specificato.

child_attachments.name

tipo: stringa

Titolo dell'anteprima del link. Se non specificato, viene usato il titolo della pagina a cui rimanda il link. In genere, viene troncato dopo 35 caratteri. Devi impostare un valore name unico, dato che le interfacce di Facebook mostrano le azioni indicate in base al valore name.

child_attachments.description

tipo: stringa

Un prezzo, uno sconto o un dominio di un sito web. Se non specificato, vengono estratti e usati i contenuti della pagina a cui rimanda il link. In genere, viene troncato dopo 30 caratteri.

child_attachments.call_to_action

tipo: oggetto

Call to action opzionale. Vedi Call to action. Non devi specificare nuovamente il link in call_to_action:{'value':{'link':... }}}.

child_attachments.video_id

tipo: stringa

ID del video dell'inserzione. Può essere usato in qualsiasi elemento secondario. Se specificato, occorre impostare anche image_hash o picture.

message

tipo: stringa

Corpo principale del post, noto anche come messaggio di stato.

link

tipo: stringa

URL di un link per "Altro...". Obbligatorio.

caption

tipo: stringa

URL da visualizzare nel link "Altro...". Non applicabile per le inserzioni carosello per le app mobile.

multi_share_optimized

tipo: booleano

Se impostato su true, seleziona e ordina automaticamente le immagini e i link. In caso contrario, usa l'ordine originale degli elementi secondari. L'impostazione predefinita è true.

multi_share_end_card

tipo: booleano

Se impostato su false, rimuove l'unità finale che mostra l'icona della pagina. L'impostazione predefinita è true.

Statistiche sulle inserzioni in base al prodotto

Azioni di gruppo per le inserzioni carosello in base a ciascun prodotto con actions_breakdown=['action_carousel_card_id', 'action_carousel_card_name']. Ogni child_attachment ha un ID unità diverso. Gli elementi action_carousel_card_id e action_carousel_card_name possono essere specificati solo per le inserzioni carosello.

Ottieni le seguenti statistiche per le unità:

  • website_ctr: disponibile quando si specifica fields=['website_ctr'].
  • app_install, app_use, apps.uses, credit_spent, mobile_app_install, tab_view, link_click, mobile_app_install, app_custom_event.*, offsite_conversion.*: disponibili quando si specifica fields=['actions']. Non sono disponibili altre azioni con i dettagli di un'unità.
use FacebookAds\Object\AdAccount;
use FacebookAds\Object\Fields\AdsInsightsFields;
use FacebookAds\Object\Values\AdsInsightsActionBreakdownsValues;
use FacebookAds\Object\Values\AdsInsightsBreakdownsValues;
use FacebookAds\Object\Values\AdsInsightsLevelValues;
use FacebookAds\Object\Values\AdsInsightsDatePresetValues;
use FacebookAds\Object\Values\InsightsIncrements;
use FacebookAds\Object\Values\InsightsOperators;

$account = new AdAccount('act_<AD_ACCOUNT_ID>');

$params = array(
  'action_breakdowns' => array(
    AdsInsightsActionBreakdownsValues::ACTION_TYPE,
    AdsInsightsActionBreakdownsValues::ACTION_CAROUSEL_CARD_ID,
  ),
  'level' => AdsInsightsLevelValues::AD,
  'date_preset' => AdsInsightsDatePresetValues::LAST_30D,
  'time_increment' => InsightsIncrements::ALL_DAYS,
  'breakdowns' => AdsInsightsBreakdownsValues::PLACEMENT,
  'filtering' => array(
    array(
      'field' => 'action_type',
      'operator' => InsightsOperators::IN,
      'value' => array('link_click'),
    ),
  ),
);

$fields = array(
  AdsInsightsFields::IMPRESSIONS,
  AdsInsightsFields::INLINE_LINK_CLICKS,
  AdsInsightsFields::ACTIONS,
  AdsInsightsFields::WEBSITE_CTR,
);

$stats = $account->getInsights($fields, $params);
from facebookads.adobjects.adaccount import AdAccount
from facebookads.adobjects.adsinsights import AdsInsights


account = AdAccount('act_<AD_ACCOUNT_ID>')

params = {
    'action_breakdowns': [
        AdsInsights.ActionBreakdowns.action_type,
        AdsInsights.ActionBreakdowns.action_carousel_card_id,
    ],
    'fields': [
        AdsInsights.Field.impressions,
        AdsInsights.Field.unique_clicks,
        AdsInsights.Field.actions,
        AdsInsights.Field.website_ctr,
    ],
    'level': AdsInsights.Level.ad,
    'date_preset': AdsInsights.DatePreset.last_30_days,
    'time_increment': 'all_days',
    'breakdowns': AdsInsights.Breakdowns.placement,
    'filtering': [
        {
            'field': 'action_type',
            'operator': 'IN',
            'value': ['link_click'],
        },
    ],
}

stats = account.get_insights(params=params)
print(stats)
APINodeList<AdsInsights> adsInsightss = new AdAccount(act_<AD_ACCOUNT_ID>, context).getInsights()
  .setActionBreakdowns("[\"action_type\",\"action_carousel_card_id\"]")
  .setLevel(AdsInsights.EnumLevel.VALUE_AD)
  .setDatePreset(AdsInsights.EnumDatePreset.VALUE_LAST_30_DAYS)
  .setTimeIncrement("all_days")
  .setBreakdowns("placement")
  .setFiltering("[{\"field\":\"action_type\",\"operator\":\"IN\",\"value\":[\"link_click\"]}]")
  .requestField("impressions")
  .requestField("inline_link_clicks")
  .requestField("actions")
  .requestField("website_ctr")
  .execute();
curl -G \
  -d 'action_breakdowns=["action_type","action_carousel_card_id"]' \
  -d 'level=ad' \
  -d 'date_preset=last_30_days' \
  -d 'time_increment=all_days' \
  -d 'breakdowns=placement' \
  --data-urlencode 'filtering=[ 
    { 
      "field": "action_type", 
      "operator": "IN", 
      "value": ["link_click"] 
    } 
  ]' \
  -d 'fields=impressions,inline_link_clicks,actions,website_ctr' \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.8/act_<AD_ACCOUNT_ID>/insights

Risposta:

{
...
   "website_ctr": [
      {
         "action_carousel_card_id": "1",
         "action_type": "link_click",
         "value": 51.401869158878
      },
      {
         "action_carousel_card_id": "2",
         "action_type": "link_click",
         "value": 50.980392156863
      }
   ],
   "placement": "mobile_feed",
   "date_start": "2015-05-25",
   "date_stop": "2015-05-28"
}

Puoi anche richiedere cost_per_action_type per i dettagli dei costi in base al tipo di azione:

use FacebookAds\Object\AdAccount;
use FacebookAds\Object\Fields\AdsInsightsFields;
use FacebookAds\Object\Values\AdsInsightsActionBreakdownsValues;
use FacebookAds\Object\Values\AdsInsightsBreakdownsValues;
use FacebookAds\Object\Values\AdsInsightsLevelValues;

$account = new AdAccount('act_<AD_ACCOUNT_ID>');

$params = array(
  'action_breakdowns' => array(
    AdsInsightsActionBreakdownsValues::ACTION_TYPE,
    AdsInsightsActionBreakdownsValues::ACTION_CAROUSEL_CARD_NAME,
  ),
  'level' => AdsInsightsLevelValues::AD,
  'breakdowns' => AdsInsightsBreakdownsValues::PLACEMENT,
);

$fields = array(
  AdsInsightsFields::IMPRESSIONS,
  AdsInsightsFields::CAMPAIGN_NAME,
  AdsInsightsFields::COST_PER_ACTION_TYPE,
);

$stats = $account->getInsights($fields, $params);
from facebookads.adobjects.adaccount import AdAccount
from facebookads.adobjects.adsinsights import AdsInsights

account = AdAccount('act_<AD_ACCOUNT_ID>')

params = {
    'action_breakdowns': [
        AdsInsights.ActionBreakdowns.action_type,
        AdsInsights.ActionBreakdowns.action_carousel_card_name,
    ],
    'fields': [
        AdsInsights.Field.impressions,
        AdsInsights.Field.campaign_name,
        AdsInsights.Field.cost_per_action_type,
    ],
    'level': AdsInsights.Level.ad,
}

stats = account.get_insights(params=params)
print(stats)
APINodeList<AdsInsights> adsInsightss = new AdAccount(act_<AD_ACCOUNT_ID>, context).getInsights()
  .setActionBreakdowns("[\"action_type\",\"action_carousel_card_name\"]")
  .setLevel(AdsInsights.EnumLevel.VALUE_AD)
  .setBreakdowns("placement")
  .requestField("impressions")
  .requestField("campaign_name")
  .requestField("cost_per_action_type")
  .execute();
curl -G \
  -d 'action_breakdowns=["action_type","action_carousel_card_name"]' \
  -d 'level=ad' \
  -d 'breakdowns=placement' \
  -d 'fields=impressions,campaign_name,cost_per_action_type' \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.8/act_<AD_ACCOUNT_ID>/insights

Esempio di risposta:

{
   "data": [
      {
         "impressions": "1862555",
         "campaign_name": "My Campaign",
         "cost_per_action_type": [
            {
               "action_carousel_card_name": "My Carousel Card 1",
               "action_type": "app_custom_event.fb_mobile_activate_app",
               "value": 0.093347346315861
            },
            {
               "action_carousel_card_name": "My Carousel Card 2",
               "action_type": "app_custom_event.fb_mobile_activate_app",
               "value": 0.38324089579301
            },
            ...
         ],
      }
   ]
}
  • Le metriche dettagliate delle inserzioni carosello per action_report_time=impression precedenti al 20 giugno 2015 non sono precise.
  • Le metriche dettagliate delle inserzioni carosello per action_report_time=conversion precedenti al 20 luglio 2015 non sono precise.

Posizionamenti

Se selezioni solo right_hand_column come posizionamento, puoi usare solo un formato carosello o un video singolo nel tuo gruppo di inserzioni. Non supportiamo il formato video quando è selezionato solo il posizionamento right_hand_column. Consulta Targetizzazione e posizionamento avanzati.

Ad esempio, crea un gruppo di inserzioni con right_hand_column come unico posizionamento:

curl \
  -F 'name=RHS only Ad Set' \
  -F 'campaign_id=<CAMPAIGN_ID>' \
  -F 'daily_budget=500' \
  -F 'start_time=2017-11-21T15:41:36+0000' \
  -F 'end_time=2017-11-28T15:41:36+0000' \
  -F 'billing_event=IMPRESSIONS' \
  -F 'optimization_goal=LINK_CLICKS' \
  -F 'bid_amount=100' \
  -F 'targeting={ 
    "device_platforms": ["mobile"], 
    "geo_locations": {"countries":["US"]}, 
    "publisher_platforms": ["facebook"] ,
    "facebook_positions": ["right_hand_column"] ,  
  }' \
  -F 'status=PAUSED' \
  -F 'access_token=ACCESS_TOKEN' \
  https://graph.facebook.com/VERSION/act_AD_ACCOUNT_ID/adsets
}

Fornisci una creatività dell'inserzione con il video:

curl \
  -F 'name=Sample Creative' \
  -F 'object_story_spec={ 
    "page_id": "<PAGE_ID>", 
    "video_data": {"image_url":"THUMBNAIL_URL","video_id":"VIDEO_ID"} 
  }' \
  -F 'access_token=ACCESS_TOKEN' \
  https://graph.facebook.com/VERSION/act_AD_ACCOUNT_ID/adcreatives
}

In alternativa, fornisci un formato pubblicitario canvas per le creatività dell'inserzione:

curl \
  -F 'image_hash=IMAGE_HASH' \
  -F 'object_story_spec={ 
    "link_data": { 
      "call_to_action": {"type":"LEARN_MORE"}, 
      "image_hash": "IMAGE_HASH", 
      "link": "CANVAS_LINK", 
      "name": "Creative message" 
    }, 
    "page_id": "PAGE_ID" 
  }' \
  -F 'access_token=ACCESS_TOKEN' \
  https://graph.facebook.com/VERSION/act_AD_ACCOUNT_ID/adcreatives
}

Se provi a creare un'inserzione con il gruppo di inserzioni e la creatività dell'inserzione:

curl \
  -F 'name=My Ad' \
  -F 'adset_id=<AD_SET_ID>' \
  -F 'creative={"creative_id":"CREATIVE_ID"}' \
  -F 'status=ACTIVE' \
  -F 'access_token=ACCESS_TOKEN' \
  https://graph.facebook.com/VERSION/act_AD_ACCOUNT_ID/ads
    </c:code>
    
    }

Ricevi il codice di errore e, in questo caso, dovrai fornire una creatività supportata o modificare la targetizzazione.