Riferimento completo del CLI
Questo è il riferimento completo del CLI di Ads Uploader. Per un'introduzione e una guida per iniziare, consulta Configurazione tramite CLI.
Comandi
Autenticazione
| Comando | Cosa fa |
|---|---|
ads login | Esegue l'autenticazione tramite browser (apre il browser predefinito) |
ads logout | Cancella le credenziali memorizzate |
ads whoami | Mostra l'utente attualmente connesso |
ads config | Mostra la configurazione (account, URL API, percorso delle credenziali) |
Navigazione
| Comando | Cosa fa |
|---|---|
ads accounts | Elenca tutti gli account pubblicitari collegati al tuo account Meta |
ads account <id> | Imposta un account pubblicitario predefinito per i comandi futuri |
ads pages | Elenca le Pagine Facebook con cui puoi fare pubblicità, incluso eventuale account Instagram collegato, da usare con le sostituzioni di profilo |
ads targeting:search "Austin" --type city | Trova le chiavi città per il targeting del gruppo di inserzioni |
ads targeting:search "90210" --type zip | Trova le chiavi CAP / codice postale per il targeting del gruppo di inserzioni |
ads targeting:search "advertising" --type detailed | Trova ID e tipi di targeting dettagliato |
ads campaigns | Elenca le campagne attive |
ads campaigns --status all | Include le campagne in pausa e archiviate |
ads campaigns --search "text" | Filtra le campagne per nome |
ads campaign <id> | Mostra i gruppi di inserzioni all'interno di una campagna |
ads adsets --campaign <id> | Elenca i gruppi di inserzioni in una campagna (supporta --search, --status) |
ads adset <id> | Mostra gli annunci all'interno di un gruppo di inserzioni |
ads ad <id> | Visualizza i dettagli completi dell'annuncio, incluse le impostazioni del creativo |
ads presets | Elenca i tuoi preset API salvati |
ads presets <id> | Mostra i dettagli di un preset specifico |
ads presets:save --from-ad <adId> --name "Preset Name" | Salva un annuncio esistente come preset API |
ads text-presets | Elenca i tuoi preset di testo salvati |
ads text-presets <id> | Mostra i dettagli di un preset di testo specifico |
ads uploads | Elenca i caricamenti recenti |
ads uploads <batchId> | Mostra i dettagli del caricamento (file, varianti, hash) |
Caricamento media
| Comando | Cosa fa |
|---|---|
ads upload <inputs...> | Carica percorsi locali e URL HTTPS pubblici sul tuo account pubblicitario |
ads upload ./directory/ | Carica un'intera directory |
ads upload:drive <folderUrl> | Importa una cartella pubblica di Google Drive come job in background |
Gli argomenti HTTPS, inclusi i link pubblici ai file di Google Drive, vengono rilevati automaticamente. Puoi combinare percorsi locali e URL: i file locali vengono caricati per primi, poi il server importa gli URL nello stesso batch affinché il raggruppamento funzioni per tutti gli input. Le cartelle pubbliche di Drive devono essere condivise come Anyone with the link (Viewer).
I file locali vengono caricati in parallelo e i guasti di rete transitori vengono riprovati automaticamente con backoff. Le importazioni da URL e cartelle Drive usano pipeline di file parallele con parallelismo limitato in un job in background, mentre il CLI mostra un contatore completati/totale e ogni file attivo. Raramente è necessario modificare questi flag, ma sono disponibili:
| Flag di caricamento | Descrizione |
|---|---|
--concurrency <n> | Numero di file caricati in parallelo, 1-6 (predefinito: 4). I video di grandi dimensioni vengono limitati automaticamente per rimanere entro la memoria. |
--upload-timeout <ms> | Timeout di caricamento per file (predefinito: 120000) |
--api-timeout <ms> | Timeout della richiesta API in millisecondi (predefinito: 60000) |
Creazione annunci
| Comando | Cosa fa |
|---|---|
ads create spec.json | Crea annunci da un file di specifica |
ads create:preview spec.json | Esecuzione di prova che mostra cosa verrebbe creato |
ads create:interactive | Procedura guidata (accetta tutti i flag di creazione) |
Gestione job
| Comando | Cosa fa |
|---|---|
ads jobs <jobId> | Controlla lo stato di un job |
ads jobs <jobId> --follow | Mostra in tempo reale gli aggiornamenti di avanzamento |
ads jobs cancel <jobId> | Annulla un job in esecuzione |
Flag di creazione
Questi flag si applicano a ads create, ads create:preview e ads create:interactive. Possono essere usati al posto di un file di specifica o insieme a esso.
| Flag | Descrizione |
|---|---|
--account <id> | Sostituisce l'account pubblicitario predefinito |
--preset <id> | Usa un preset API salvato (alternativa al file di specifica) |
--text-preset <id> | Carica un preset di testo salvato |
--copy-from <adId> | Copia le impostazioni da un annuncio esistente |
--upload <batchId> | Specifica l'ID del caricamento |
--status <PAUSED|ACTIVE> | Imposta lo stato dell'annuncio (predefinito: ACTIVE) |
--pause-at <level> | Livello di pausa: ad (predefinito), adSet o campaign |
--daily-budget <amount> | Sostituisce il budget giornaliero per gruppo di inserzioni (unità di valuta, es. 50 per 50 $) |
--bid-amount <amount> | Sostituisce l'offerta/limite di costo per gruppo di inserzioni (unità di valuta) |
--minimum-roas <ratio> | Sostituisce l'obiettivo ROAS minimo per gruppo di inserzioni (es. 1.5) |
--campaign-daily-budget <amount> | Imposta un budget giornaliero per la campagna CBO in unità di valuta intere. Si esclude a vicenda con il budget totale; ometti entrambi per ereditare il budget della campagna di origine. |
--campaign-lifetime-budget <amount> | Imposta un budget totale per la campagna CBO in unità di valuta intere. Si esclude a vicenda con il budget giornaliero; ometti entrambi per ereditare il budget della campagna di origine. |
--adset-min-spend <amount> | Imposta la spesa minima del gruppo di inserzioni con CBO in unità di valuta intere; 0 rimuove il limite ereditato dal gruppo di inserzioni di origine. |
--adset-max-spend <amount> | Imposta la spesa massima del gruppo di inserzioni con CBO in unità di valuta intere; 0 rimuove il limite ereditato dal gruppo di inserzioni di origine. |
--adset-min-spend-pct <5-100> | Imposta la spesa minima del gruppo di inserzioni come percentuale del budget della campagna, a incrementi del 5%. Funziona anche con una campagna CBO esistente; si esclude a vicenda con --adset-min-spend. |
--adset-max-spend-pct <5-100> | Imposta la spesa massima del gruppo di inserzioni come percentuale del budget della campagna, a incrementi del 5%. Funziona anche con una campagna CBO esistente; si esclude a vicenda con --adset-max-spend. |
--location <ISO> | Raggiungi un paese tramite il codice ISO di due lettere. Ripeti il flag per più paesi. |
--age-min <n> | Età minima, da 13 a 65 |
--age-max <n> | Età massima, da 13 a 65 (65 significa 65+) |
--gender <gender> | all, men o women. all rimuove una restrizione di genere ereditata dal gruppo di inserzioni di origine. |
--ai-disclosure | Dichiara volontariamente i contenuti creativi generati con l'IA (trasparenza di Meta sui contenuti IA). Disattivato per impostazione predefinita. |
--page <id> | Usa questa Pagina Facebook invece di quella del template (vedi Opzioni di profilo) |
--instagram <id> | Usa questo account Instagram invece di quello del template |
--use-page-identity | Usa la Pagina Facebook come identità Instagram; non può essere combinato con --instagram |
--threads <id> | Usa questo profilo Threads invece di quello del template |
--text-file <path> | Carica la configurazione del testo da un file JSON |
--expanded | Mostra i valori completi di titolo, testo principale e descrizione nelle anteprime |
Flag di navigazione
Questi flag sono disponibili su campaigns, adsets, adset e campaign:
| Flag | Descrizione |
|---|---|
--status <status> | active (predefinito) o all |
--inactive | Abbreviazione di --status all (su campaigns) |
--search <text> | Filtra per nome (su campaigns, adsets) |
Ricerca targeting
Il targeting per città e il targeting dettagliato usano identificatori Meta, non nomi. Cerca tramite Ads Uploader per ottenere valori pronti da incollare in una specifica:
ads targeting:search "Austin" --type city
ads targeting:search "90210" --type zip
ads targeting:search "advertising" --type detailed
| Flag | Descrizione |
|---|---|
--type <type> | Obbligatorio. city restituisce valori targeting.cities[].key; zip restituisce valori targeting.zips[].key; detailed restituisce voci per targeting.detailedTargetingGroups. |
--account <id> | Sostituisce l'account pubblicitario predefinito configurato |
--limit <n> | Restituisce da 1 a 25 risultati |
--json | Restituisce risultati strutturati pronti da incollare |
I risultati del targeting dettagliato includono id, name, type, un intervallo di dimensione del pubblico e il percorso della categoria. Il type identifica la categoria di targeting dettagliato, come interests, behaviors, work_employers o work_positions. Cerca sempre questi identificatori; non indovinarli mai.
Flag di dettaglio
Questi flag sono disponibili su ad:
| Flag | Descrizione |
|---|---|
--expanded | Mostra i valori completi di titolo, testo principale e descrizione |
Flag comuni
| Flag | Descrizione |
|---|---|
--account <id> | Sostituisce l'account pubblicitario predefinito per qualsiasi comando |
--json | Restituisce JSON grezzo (disponibile sulla maggior parte dei comandi, pensato per lo scripting) |
Formato del file di specifica
Il file di specifica JSON controlla ogni aspetto della creazione degli annunci. Fornisci una sorgente template (adPresetId o copyFromAd) più uploadId, oppure mediaItems catturati con un mediaHash Facebook per ogni immagine e mediaId per ogni video. Gli annunci standard, carosello, flessibili e a posizionamento necessitano anche di thumbnailHash; i video Multi Media usano il loro URL di miniatura pubblico catturato.
Specifica minima
{
"adPresetId": "your_preset_id",
"uploadId": "batch_abc123"
}
Esempio completo
{
"adPresetId": "preset_id_here",
"uploadId": "batch_abc123",
"adSet": {
"name": "My New Ad Set",
"dailyBudget": 50
},
"adNamePattern": "{filename}",
"texts": {
"perAd": {
"hero.jpg": {
"headlines": ["Main Headline"],
"bodies": ["Ad copy here."],
"descriptions": ["Short description"],
"cta": "SHOP_NOW",
"link": "https://example.com/landing"
}
}
},
"creativeEnhancements": "none",
"options": {
"status": "PAUSED",
"pauseAt": "adSet"
}
}
Sorgente template
Ti serve una di queste per indicare al CLI quale configurazione dell'annuncio usare come base.
| Campo | Descrizione |
|---|---|
adPresetId | L'ID di un preset API salvato. Blocca la campagna, il gruppo di inserzioni e la configurazione dell'annuncio. |
copyFromAd | Un ID annuncio Facebook da cui copiare le impostazioni. |
Quando usi copyFromAd, fornisci il caricamento, oppure lancia un build web salvato le cui immagini catturate hanno mediaHash e i cui video hanno mediaId. Puoi facoltativamente impostare la campagna e il gruppo di inserzioni:
{
"copyFromAd": "120233848667930472",
"uploadId": "batch_abc123",
"campaign": { "id": "120233848666410472" },
"adSet": { "id": "120233848666620472" }
}
Per trovare l'ID annuncio giusto, naviga nel tuo account: ads campaigns poi ads campaign <id> poi ads adset <id> poi ads ad <id>.
Opzioni di profilo
Per impostazione predefinita, i nuovi annunci ereditano la Pagina Facebook, l'account Instagram e il profilo Threads dall'annuncio template o dal preset. È lo stesso controllo Opzioni di profilo disponibile tramite il pannello Predefiniti nell'applicazione web. Sostituisci ognuno di essi con un blocco profile (o con i flag --page / --instagram / --use-page-identity / --threads, che hanno precedenza sul file di specifica):
{
"copyFromAd": "120233848667930472",
"uploadId": "batch_abc123",
"profile": {
"pageId": "123456789012345",
"instagramId": "17841400000000000",
"threadsId": "987654321098765"
}
}
Esegui ads pages per elencare gli ID delle Pagine che puoi usare, insieme all'account Instagram collegato a ciascuna Pagina.
Se sostituisci solo la Pagina, Ads Uploader usa automaticamente il suo account Instagram collegato. Se non c'è nessun account Instagram collegato, usa la Pagina Facebook come identità Instagram. Threads viene comunque reimpostato perché potrebbe appartenere alla vecchia Pagina; impostalo esplicitamente quando serve.
Per una scelta esplicita dell'identità della Pagina, usa --use-page-identity oppure imposta "useFacebookPage": true dentro profile. Non combinarlo con --instagram o instagramId. Puoi anche cambiare solo il profilo Instagram o Threads senza toccare la Pagina, impostando solo quei campi.
Per i lanci multi-campagna, assegna le identità in modo indipendente con profile.campaigns. Assegna a ciascuna sostituzione la chiave della campagna corrispondente tramite id (consigliato) o tramite un nome campagna univoco:
{
"campaign": {
"mode": "duplicate",
"campaigns": [
{ "id": "prospecting", "name": "Prospecting" },
{ "id": "retargeting", "name": "Retargeting" }
]
},
"profile": {
"campaigns": {
"prospecting": { "pageId": "page_1", "instagramId": "ig_1", "threadsId": null },
"retargeting": { "pageId": "page_2", "useFacebookPage": true, "threadsId": "threads_2" }
}
}
}
Ogni chiave di profile.campaigns deve corrispondere a una campagna in campaign.campaigns; le chiavi non corrispondenti o ambigue vengono rifiutate prima del lancio.
Struttura della campagna
Per impostazione predefinita, gli annunci vanno nella campagna dell'annuncio template. Puoi creare una nuova campagna fornendo campaign.name.
Per le modalità multi-campagna, usa campaign.mode con un array campaigns:
{
"campaign": {
"mode": "duplicate",
"campaigns": [
{ "name": "Campaign A" },
{ "name": "Campaign B" }
]
}
}
| Modalità | Comportamento |
|---|---|
"single" | Predefinita. Una sola campagna. |
"duplicate" | Tutti i media vengono duplicati in ogni campagna. |
"split" | I media vengono divisi equamente tra le campagne. |
Modalità dei gruppi di inserzioni
Per impostazione predefinita, gli annunci vanno nel gruppo di inserzioni esistente dell'annuncio template. Le seguenti modalità ti danno il controllo su come gli annunci vengono distribuiti tra i gruppi di inserzioni.
Crea un nuovo gruppo di inserzioni:
{ "adSet": { "name": "My Ad Set" } }
Usa un gruppo di inserzioni esistente tramite ID:
{ "adSet": { "id": "120233848666620472" } }
Un gruppo di inserzioni per ogni file caricato:
{ "adSet": { "mode": "perUpload" } }
Raggruppamento automatico in gruppi di inserzioni di dimensione fissa:
{ "adSet": { "mode": "autoGroup", "adsPerAdSet": 5 } }
Gruppi personalizzati con pieno controllo su quali file vanno dove:
{
"adSet": {
"groups": [
{ "name": "Images - April 10", "media": ["hero.jpg", "banner.jpg"] },
{ "name": "Videos - April 10", "media": ["promo.mp4"] }
]
}
}
Pattern di denominazione dei gruppi di inserzioni per le modalità multi-gruppo:
{ "adSet": { "mode": "perUpload", "namePattern": "Ad Set {index:01}" } }
Il raggruppamento per varianti raggruppa gli annunci per identificatore di variazione nello stesso gruppo di inserzioni:
{ "adSet": { "mode": "autoGroup", "groupVariations": true, "variationIdentifier": "-" } }
Sostituzione di budget e offerta
Sostituisci il budget giornaliero e/o l'importo dell'offerta sui nuovi gruppi di inserzioni. I valori sono nelle unità di valuta del tuo account (es. 50 per 50 $ o 50 euro).
dailyBudget e bidAmount usano le unità di valuta dell'account. minimumRoas è un rapporto, quindi 1.5 significa un obiettivo ROAS di 1,5x.
- Campagne ABO (il budget è sul gruppo di inserzioni): combina
dailyBudgetconbidAmountper le strategie con limite di offerta/costo, oppure conminimumRoasperLOWEST_COST_WITH_MIN_ROAS. - Campagne CBO (il budget è sulla campagna): non impostare
dailyBudgetsul gruppo di inserzioni. Impostacampaign.dailyBudgetocampaign.lifetimeBudget(si escludono a vicenda) per sostituire il budget della campagna di origine, oppure ometti entrambi per ereditarlo. I limiti di spesa minima e massima del gruppo di inserzioni possono essere importi interi o percentuali dal 5 al 100% del budget della campagna (a incrementi del 5%); le percentuali funzionano anche con una campagna CBO esistente. ImpostabidAmountominimumRoassul gruppo di inserzioni quando la sua strategia di origine usa quel controllo.
bidAmount e minimumRoas si escludono a vicenda perché appartengono a strategie di offerta diverse.
{ "adSet": { "dailyBudget": 50 } }
{ "adSet": { "bidAmount": 5 } }
{ "adSet": { "minimumRoas": 1.5 } }
{ "adSet": { "dailyBudget": 50, "bidAmount": 5 } }
Disponibili anche come flag del CLI: --daily-budget 50, --bid-amount 5, --minimum-roas 1.5, --campaign-daily-budget 100, --campaign-lifetime-budget 1000, --adset-min-spend 20, --adset-max-spend 80, --adset-min-spend-pct 20 e --adset-max-spend-pct 80.
Ad Set Targeting
Il targeting si applica ai nuovi gruppi di inserzioni. Ometti il blocco targeting di primo livello per ereditare invariato il pubblico del gruppo di inserzioni di origine. Qualsiasi modalità può usare adSet.targetingPerAdSet, con chiavi come in texts.perAdset: nome finale del gruppo di inserzioni, ID del gruppo di inserzioni, o campaign::key per evitare collisioni. La modalità personalizzata supporta anche adSet.groups[].targeting. La precedenza è targetingPerAdSet, poi groups[].targeting, poi il valore predefinito del build, poi il pubblico sorgente. Il targeting per singolo gruppo di inserzioni è disponibile solo via specifica, perché i flag del CLI non possono indirizzare un gruppo di inserzioni pianificato specifico.
Con più campagne, la copia di un gruppo di inserzioni in ciascuna campagna viene targettizzata separatamente; usa "Campaign name::Ad set name" come chiave per indirizzare una copia specifica.
{
"targeting": {
"countries": ["US"],
"cities": [
{
"key": "2525495",
"name": "Austin",
"region": "Texas",
"countryCode": "US",
"radius": 25,
"distance_unit": "mile"
}
],
"zips": [
{
"key": "US:90210",
"name": "90210",
"region": "California",
"countryCode": "US"
}
],
"selectionVersion": 4,
"ageSelected": true,
"ageMin": 21,
"ageMax": 55,
"genderSelected": true,
"genders": "women",
"detailedTargetingSelected": true,
"detailedTargetingGroups": [[
{
"id": "112002898811624",
"name": "Advertising agency",
"type": "work_employers"
}
]]
}
}
{
"targeting": { "countries": ["US"], "ageMin": 21, "ageMax": 55 },
"adSet": {
"mode": "perUpload",
"namePattern": "Ad Set {index:01}",
"targetingPerAdSet": {
"Ad Set 02": { "countries": ["CA"], "genders": "women" },
"Ad Set 01": { "countries": ["GB"] }
}
}
}
Per la modalità personalizzata, groups[].targeting resta valido e mantiene la sovrascrittura accanto al suo gruppo di media:
{
"adSet": {
"mode": "custom",
"groups": [{
"name": "Canada Women",
"media": ["canada.jpg"],
"targeting": { "countries": ["CA"], "genders": "women" }
}]
}
}
Usa ads targeting:search per trovare la key della città (tipo city), la key del codice postale come US:90210 (tipo zip), e id, name e type di ogni selezione dettagliata (tipo detailed). Ometti paesi, città e codici postali per ereditare le località di origine. Paesi, città e codici postali vengono combinati come alternative, quindi aggiungere Austin o un codice postale a countries: ["US"] continua a raggiungere tutti gli Stati Uniti; ometti i paesi per raggiungere solo la città o il codice postale. I codici postali non hanno raggio.
Configurazione del testo
Il testo comune applica la stessa copia a tutti gli annunci:
{
"texts": {
"common": {
"headlines": ["Headline 1", "Headline 2"],
"bodies": ["Primary text"],
"descriptions": ["Description"]
},
"strategy": "flexible"
}
}
Il testo per annuncio ti permette di impostare una copia unica per ogni file:
{
"texts": {
"perAd": {
"hero.jpg": {
"headlines": ["Hero Headline"],
"bodies": ["Hero copy"],
"descriptions": ["Hero desc"],
"cta": "LEARN_MORE",
"link": "https://example.com/hero",
"urlTags": "utm_content=hero"
},
"banner.jpg": {
"headlines": ["Banner Headline"],
"bodies": ["Banner copy"]
}
}
}
}
Le chiavi per annuncio sono nomi di file (non percorsi completi). Ogni voce supporta: headlines, bodies, descriptions, cta, link, displayUrl, urlTags. I campi che non specifichi ereditano dall'annuncio template.
Il testo per gruppo di inserzioni applica un unico blocco di testo a ogni annuncio in un gruppo di inserzioni di destinazione. Usa un nome/ID di gruppo di inserzioni semplice quando è univoco, oppure una voce campaign::key quando lo stesso nome di gruppo compare in più campagne:
{
"texts": {
"perAdset": {
"Prospecting::prospecting_set": {
"headlines": ["Prospecting headline"],
"bodies": ["Prospecting copy"],
"descriptions": ["Prospecting description"],
"cta": "SHOP_NOW",
"link": "https://example.com/prospecting",
"displayUrl": "example.com/prospecting",
"urlTags": "utm_campaign=prospecting",
"aiDisclosure": false
}
}
}
}
Ogni chiave di texts.perAdset deve corrispondere a un gruppo di inserzioni pianificato. Le chiavi non corrispondenti vengono rifiutate invece di ricadere sul testo comune.
I preset di testo ti permettono di caricare una configurazione di testo salvata:
{ "textPresetId": "preset_id_here" }
Non puoi combinare textPresetId con texts.
Le opzioni di strategia controllano come vengono gestite più variazioni di testo:
"flexible"(predefinita) lascia che Meta ottimizzi tra le tue variazioni di testo. Più titoli e testi diventano opzioni che Facebook combina liberamente."separate"crea un annuncio separato per ogni combinazione di testo.
CTA e link
Una CTA di primo livello si applica a tutti gli annunci. Le CTA per annuncio in texts.perAd e le CTA per gruppo di inserzioni in texts.perAdset la sostituiscono.
{
"cta": {
"type": "SHOP_NOW",
"link": "https://example.com",
"displayUrl": "example.com"
},
"urlTags": "utm_source=facebook&utm_medium=paid"
}
Tipi di CTA standard: LEARN_MORE, SHOP_NOW, SIGN_UP, SUBSCRIBE, GET_OFFER, CONTACT_US, DOWNLOAD, ORDER_NOW, BUY_NOW, BOOK_NOW, APPLY_NOW, GET_QUOTE, GET_IN_TOUCH, WATCH_MORE, PLAY_GAME
Le CTA specifiche dell'obiettivo vengono ereditate dall'annuncio template e non dovrebbero essere impostate manualmente. Impostarle sul tipo di campagna sbagliato causerà un errore dell'API di Facebook.
| CTA | Obiettivo di campagna richiesto |
|---|---|
MESSAGE_PAGE | Destinazione Messenger |
WHATSAPP_MESSAGE | Destinazione WhatsApp |
INSTAGRAM_MESSAGE | Destinazione DM di Instagram |
CALL_NOW | Campagna di chiamata |
Split-test degli URL (destinazione divisa)
Fornisci da 2 a 5 URL di destinazione sotto texts.urlVariants e ogni gruppo di inserzioni generato viene duplicato una volta per URL, così Meta ottimizza ogni combinazione di annuncio e landing page in modo indipendente.
{
"texts": {
"common": { "headlines": ["Hero"], "bodies": ["Copy"] },
"urlVariants": [
{ "link": "https://example.com/homepage", "label": "homepage" },
{ "link": "https://example.com/quiz", "label": "quiz-v2" }
]
}
}
labelè facoltativo. Quando omesso, viene usato l'ultimo slug del percorso dell'URL (/quiz-v2→quiz-v2), con fallback al nome host per gli URL radice.- In modalità a gruppo di inserzioni singolo, l'etichetta di ogni variante diventa il nome completo del gruppo di inserzioni.
- Nelle modalità
perUploadeautoGroup, il nome di ogni gruppo di inserzioni duplicato aggiunge_{label}al pattern (o sostituisce un token{destination}se ne includi uno). - Il token
{date}in un'etichetta si risolve nella data odierna (es.launch-{date}→launch-2026-04-27). - Ogni URL di destinazione deve essere unico. URL identici (o varianti con barra finale / maiuscole-minuscole dello stesso URL) si uniscono in un'unica voce, quindi assicurati di avere almeno 2 destinazioni distinte.
- Il budget del tuo gruppo di inserzioni viene moltiplicato per il numero di varianti, poiché ogni duplicato è un proprio gruppo di inserzioni.
- Non compatibile con annunci sorgente a destinazione speciale (modulo per i contatti, Messenger, WhatsApp, DM di Instagram, chiamata). Il CLI rifiuta questa combinazione con un errore chiaro, quei formati non passano attraverso
cta.link. - Le sostituzioni di
linkper annuncio intexts.perAdperdono contro l'URL della variante quando sono impostate entrambe.
Miglioramenti creativi
Controlla i miglioramenti creativi di Advantage+:
{ "creativeEnhancements": "none" }
| Valore | Effetto |
|---|---|
| omesso | Tutte le funzioni disattivate |
"metaDefaults" | Alias deprecato per "none" |
"all" | Tutte le funzioni attivate |
"none" | Tutte le funzioni disattivate |
["feature1", "feature2"] | Solo le funzioni elencate attivate, il resto disattivato |
Funzioni disponibili: text_translation, inline_comment, enhance_cta, text_optimizations, reveal_details_over_time, show_destination_blurbs, image_brightness_and_contrast, image_touchups, video_auto_crop, video_filtering, pac_relaxation, image_animation, image_templates, adapt_to_placement, product_extensions, product_tags, description_automation, add_text_overlay, music, carousel_to_video, carousel_dynamic_description, multi_share_end_card, multi_share_optimized
La chiave show_destination_blurbs viene visualizzata come Show spotlights, e pac_relaxation come Flex media.
Quando selezioni singole funzioni, elenca solo quelle pertinenti al tipo di media. Le funzioni video (video_auto_crop, video_filtering) si applicano solo agli annunci video. Le funzioni carosello (carousel_to_video, carousel_dynamic_description, multi_share_end_card, multi_share_optimized) si applicano solo agli annunci carosello.
product_tags si applica agli annunci immagine e video ed è disponibile solo in clonazione. Può essere attivato solo quando l'annuncio sorgente ha un catalogo associato e tag di prodotto espliciti e posizionati; tutti i tag della sorgente e le loro posizioni vengono preservati. "all" lo include solo per una sorgente idonea e non inventa mai un tag di prodotto.
Annunci carosello
Raggruppa i file caricati in annunci carosello con testo per scheda e testo complessivo del carosello facoltativo. cardTexts controlla le singole schede. Il testo complessivo del carosello può essere collocato nell'oggetto carosello o impostato in texts.perAd usando il name del carosello; i campi collocati vincono quando entrambi sono presenti.
{
"carousel": [
{
"name": "My Carousel",
"cards": ["slide1.jpg", "slide2.jpg", "slide3.jpg"],
"headlines": ["Overall Carousel Headline"],
"bodies": ["Overall primary text"],
"descriptions": ["Overall description"],
"cta": "SHOP_NOW",
"link": "https://example.com/carousel",
"urlTags": "utm_content=my_carousel",
"cardTexts": [
{ "headline": "Slide 1", "description": "First card", "link": "https://example.com/1" },
{ "headline": "Slide 2", "description": "Second card", "link": "https://example.com/2" }
]
}
]
}
Forma alternativa per il testo complessivo:
{
"texts": {
"perAd": {
"My Carousel": {
"headlines": ["Overall Carousel Headline"],
"bodies": ["Overall primary text"],
"descriptions": ["Overall description"],
"cta": "SHOP_NOW",
"link": "https://example.com/carousel",
"urlTags": "utm_content=my_carousel"
}
}
},
"carousel": [
{
"name": "My Carousel",
"cards": ["slide1.jpg", "slide2.jpg", "slide3.jpg"]
}
]
}
Le schede devono fare riferimento a nomi di file del caricamento o a media catturati da un build salvato. Minimo 2 schede per carosello. I file rivendicati da un carosello vengono rimossi dall'elenco degli annunci standard.
Annunci flessibili
Raggruppa più asset in un unico annuncio flessibile in cui Meta sceglie l'asset migliore per posizionamento:
{
"flexible": [
{
"name": "Multi-Asset Ad",
"assets": ["hero.jpg", "promo.mp4", "banner.jpg"]
}
]
}
Minimo 2 asset per gruppo. I file rivendicati da un gruppo flessibile vengono rimossi dall'elenco degli annunci standard.
Annunci multimediali
Raggruppa da 2 a 10 immagini o video caricati in un annuncio Multi Media di Meta:
{
"multimedia": [
{
"name": "Mixed Media Ad",
"assets": ["hero.jpg", "promo.mp4", "banner.jpg"],
"assetTexts": [
{
"headline": "Hero headline",
"primaryText": "Hero primary text",
"description": "Hero description",
"link": "https://example.com/hero",
"displayUrl": "example.com/hero"
}
]
}
]
}
Gli asset devono fare riferimento a nomi di file del caricamento o a media catturati da un build salvato. assetTexts è facoltativo e si allinea ad assets per indice; ogni campo è una singola sostituzione per quell'asset e i campi vuoti ricadono sul testo principale e sugli URL dell'annuncio. L'asset principale renderizzato usa il testo e l'URL principali dell'annuncio, e qualsiasi sostituzione del testo dell'asset principale diventa la prima opzione di testo principale. I video necessitano di un URL di miniatura pubblico catturato. I file rivendicati da un gruppo Multi Media vengono rimossi dall'elenco degli annunci standard.
Denominazione degli annunci
Personalizza come vengono denominati i tuoi annunci:
{ "adNamePattern": "{filename} - {date}" }
| Segnaposto | Cosa inserisce |
|---|---|
{filename} | Nome del file originale senza estensione |
{index:01} | Indice con zeri iniziali (01, 02, 03...) |
{variation} | Identificatore di variazione se il raggruppamento per varianti è attivo |
{campaign} | Nome della campagna |
{date} | Data corrente (AAAA-MM-GG) |
{date:short} | Data breve (MM-GG) |
{timestamp} | Timestamp Unix |
Opzioni
{
"options": {
"status": "PAUSED",
"pauseAt": "adSet",
"schedule": {
"startTime": "2026-04-01T09:00:00",
"endTime": "2026-04-30T23:59:59"
}
}
}
| Campo | Valori | Descrizione |
|---|---|---|
status | "PAUSED", "ACTIVE" | Stato di lancio dell'annuncio (predefinito: ACTIVE) |
pauseAt | "ad", "adSet", "campaign" | A quale livello mettere in pausa (predefinito: ad) |
schedule.startTime | Stringa ISO 8601 | Ora di inizio programmata (usa il fuso orario dell'account pubblicitario) |
schedule.endTime | Stringa ISO 8601 | Ora di fine programmata (facoltativa) |
Caricamento e rilevamento delle varianti
I gruppi di varianti vengono rilevati automaticamente dalle convenzioni sui nomi dei file, proprio come nell'applicazione web. Consulta Variazioni del formato immagine per tutti i dettagli sulle convenzioni di denominazione.
Suffissi di rapporto: hero_1x1.jpg + hero_4x5.jpg + hero_9x16.jpg + hero_16x9.jpg + hero_1.91x1.jpg vengono raggruppati come un unico annuncio a varianti. Fino a 5 rapporti per gruppo.
Posizione del token: il token di rapporto può apparire alla fine (hero_4x5.jpg), in mezzo (hero_4x5_v2.jpg) o all'inizio (4x5_hero.jpg).
Suffissi di parole legacy: hero.jpg + hero_vertical.jpg + hero_horizontal.jpg funzionano ancora e si mappano su 9x16 e 16x9.
Il delimitatore predefinito è _. Puoi cambiarlo (o accettarne più di uno) in Account > Predefiniti > Posizionamenti > Separatore nome file.
Pattern comuni
Carica e crea con un preset
ads upload ./creatives/hero.jpg ./creatives/banner.jpg
ads create:preview spec.json
ads create spec.json
Dove spec.json contiene:
{ "adPresetId": "PRESET_ID", "uploadId": "BATCH_ID" }
Copia le impostazioni da un annuncio esistente
Naviga nel tuo account per trovare l'annuncio:
ads campaigns
ads campaign 120233848666410472
ads adset 120233848666620472
ads ad 120233848667930472
Poi crea una specifica che vi fa riferimento:
{
"copyFromAd": "120233848667930472",
"uploadId": "BATCH_ID"
}
L'annuncio sorgente deve avere impostazioni del creativo inline. Se è stato costruito da un post di Pagina esistente, il CLI lo rifiuterà prima di inviare una richiesta di creazione.
Salva un preset API da un annuncio esistente
ads presets:save --from-ad 120233848667930472 --name "Spring Purchase Template"
ads create --preset PRESET_ID --upload BATCH_ID
Questo salva la stessa forma di preset API usata dall'applicazione web. L'annuncio sorgente deve avere impostazioni del creativo inline; gli annunci basati su post di Pagina non possono essere salvati come preset API.
Testo per annuncio con copia unica per file
{
"adPresetId": "PRESET_ID",
"uploadId": "BATCH_ID",
"texts": {
"perAd": {
"hero.jpg": {
"headlines": ["Summer Sale Now On"],
"bodies": ["Save up to 50% on all items"],
"cta": "SHOP_NOW",
"link": "https://example.com/summer"
},
"banner.jpg": {
"headlines": ["New Collection Available"],
"bodies": ["Browse our latest styles"],
"cta": "LEARN_MORE",
"link": "https://example.com/new"
}
}
}
}
Raggruppamento automatico in più gruppi di inserzioni
{
"adPresetId": "PRESET_ID",
"uploadId": "BATCH_ID",
"adSet": { "mode": "autoGroup", "adsPerAdSet": 3 }
}
Note importanti
- Visualizza sempre l'anteprima prima.
create:previewrileva gli errori di configurazione prima di toccare Facebook. - Gli annunci sono attivi per impostazione predefinita. Usa
--status PAUSEDo"status": "PAUSED"nella specifica per crearli in pausa. uploadIdproviene dall'output del caricamento. È l'ID del caricamento restituito daads upload.- I caricamenti sono legati a un account pubblicitario. I file vengono caricati direttamente nella libreria multimediale Facebook dell'account selezionato. L'ID del caricamento può essere usato solo con lo stesso account.
copyFromAdnecessita di media risolvibili. FornisciuploadId, oppure lancia un build salvato le cui immagini catturate hannomediaHashe i cui video hannomediaId. Facoltativamente, forniscicampaign.ideadSet.idper controllare il posizionamento.- Le chiavi di testo per annuncio sono nomi di file. Usa
"hero.jpg", non"/path/to/hero.jpg". textPresetIdetextssi escludono a vicenda. Usa l'uno o l'altro, non entrambi.- Le CTA specifiche dell'obiettivo vengono ereditate dal template. Non impostare
MESSAGE_PAGE,WHATSAPP_MESSAGE, ecc. manualmente.