Post
Pubblica annunci, eventi e offerte su Google e Facebook con l'SDK listingsapi-js.
I metodi per i post pubblicano contenuti su Google Business Profile e Facebook, poi ti permettono di monitorare lo stato di pubblicazione e le statistiche per ciascun sito. Tutti i metodi per i post sono disponibili direttamente sull'istanza del client ListingsAPI.
La pubblicazione è asincrona: le chiamate di creazione restituiscono status: 'INPROGRESS' e il post viene pubblicato in background. Interroga periodicamente fetchPost finché lo stato non è SUCCESS e controlla publishDetails[].submissionError per individuare gli errori per ciascun sito.
bulkPublish
Pubblica un post su Google e Facebook per più sedi con una sola chiamata. sites include entrambi per impostazione predefinita. Il messaggio (o la mappa per sito) viene espanso in una voce per ciascun sito, gli ID delle sedi vengono codificati automaticamente e il payload viene convalidato lato client prima di qualsiasi chiamata di rete (un payload non valido genera immediatamente ValidationError).
const result = await client.bulkPublish({name: 'Holiday hours',locationIds: [16808, 16809, 16810],message: 'Open until 10pm through the holidays!',mediaUrl: 'https://cdn.example.com/holiday.jpg',ctaType: 'LEARN_MORE',ctaUrl: 'https://example.com/holiday-hours',});console.log(result.socialPost.id, result.socialPost.status); // INPROGRESS, publishes asyncPassa un oggetto come message per specificare un testo diverso per ciascun sito:
await client.bulkPublish({name: 'Holiday hours',locationIds: [16808, 16809],message: { GOOGLE: 'Open until 10pm through the holidays. Book online!', FACEBOOK: 'We are staying open late for the holidays. See you soon!',},});Opzioni
createAnnouncement
Crea un post ANNOUNCEMENT: un semplice messaggio con CTA e contenuti multimediali facoltativi. Accetta le stesse opzioni di bulkPublish, tranne postType e contextInfo; qui il valore predefinito di sites è ['GOOGLE'].
await client.createAnnouncement({name: 'Grand Opening',locationIds: [16808],message: 'Acme Dental is now open in the Mission!',sites: ['GOOGLE'],ctaType: 'LEARN_MORE',ctaUrl: 'https://example.com/opening',});createEvent
Crea un post EVENT con un titolo e un intervallo di inizio e fine. title è obbligatorio (lo richiede Google); startDay e endDay sono date YYYY-MM-DD, mentre startTime/endTime sono orari facoltativi da visualizzare. Il valore predefinito di sites è ['GOOGLE'].
await client.createEvent({name: 'Live music',locationIds: [16808],message: 'Join us Friday for live jazz!',title: 'Jazz Night',startDay: '2026-08-01',endDay: '2026-08-01',startTime: '7:00pm',endTime: '10:00pm',});createOffer
Crea un post OFFER con un coupon, uno sconto e le condizioni. title è obbligatorio; tutti gli altri campi dell'offerta sono facoltativi. Il valore predefinito di sites è ['GOOGLE'].
await client.createOffer({name: 'Summer sale',locationIds: [16808],message: '20% off whitening all week!',title: 'Summer Sale',couponCode: 'SUMMER20',discount: '20%',redeemUrl: 'https://example.com/sale',termsConditions: 'One per customer.',startDay: '2026-08-01',endDay: '2026-08-07',});Opzioni dell'offerta
createPost
Crea un post a partire da un corpo grezzo con campi non annidati, senza convalida lato client. Il metodo racchiude ciò che passi nell'oggetto input richiesto dall'API, quindi il corpo trasmesso è {"input": {...}}; un corpo privo di qualsiasi annidamento viene rifiutato con uno stato HTTP 400. Preferisci createAnnouncement, createEvent o createOffer, che costruiscono e convalidano questo corpo per te.
await client.createPost({postName: 'Grand Opening',locationIds: ['TG9jYXRpb246MTY4MDg='],postType: 'ANNOUNCEMENT',postSites: ['GOOGLE'],postMessage: [{ site: 'GOOGLE', message: 'We are now open!' }],});fetchPost
Recupera un post con il suo contenuto, lo stato di pubblicazione per ciascun sito e le statistiche. Usalo per interrogare periodicamente un post INPROGRESS finché non viene pubblicato.
let post = await client.fetchPost('U29jaWFsUG9zdDo0NDEyMg=='); while (post.status === 'INPROGRESS') {await new Promise((resolve) => setTimeout(resolve, 5000));post = await client.fetchPost('U29jaWFsUG9zdDo0NDEyMg==');} for (const detail of post.publishDetails ?? []) {if (detail.submissionError) { console.log('failed:', detail.submissionError);}}deletePost
Elimina un post e rimuovilo da tutti i siti su cui è stato pubblicato.
await client.deletePost('U29jaWFsUG9zdDo0NDEyMg==');fetchLocationPosts
Elenca le campagne di post destinate a una sede. Usa la paginazione con offset (page e perPage) e restituisce postsByLocation al completamento.
Questa route rifiuta un tag, quindi dalla versione 0.3.2 l'SDK accetta l'opzione per compatibilità con le versioni precedenti e non la trasmette mai. Usa fetchLocationBulkPosts quando devi filtrare per tag.
const posts = await client.fetchLocationPosts(16808, { page: 1, perPage: 10 });Opzioni
fetchBulkPost
Recupera una campagna collettiva con lo stato di pubblicazione e le statistiche per ciascuna sede.
const bulk = await client.fetchBulkPost('QnVsa1Bvc3Q6OTk=');fetchLocationBulkPosts
Elenca le campagne collettive (per più sedi) che includono una sede. Accetta le stesse opzioni di fetchLocationPosts.
const campaigns = await client.fetchLocationBulkPosts(16808, { page: 1, perPage: 10 });Risorse correlate
- Sedi, cerca gli ID delle sedi
- Gestione degli errori,
ValidationErrore codici di errore della piattaforma