Postingan

Publikasikan pengumuman, acara, dan penawaran ke Google dan Facebook dengan SDK listingsapi-js.

Metode postingan menerbitkan konten ke Google Business Profile dan Facebook, lalu memungkinkan Anda memantau status penerbitan dan analitik per situs. Semua metode postingan tersedia langsung pada instans klien ListingsAPI.

Penerbitan bersifat asinkron: pemanggilan pembuatan mengembalikan status: 'INPROGRESS', dan postingan diterbitkan di latar belakang. Periksa fetchPost secara berkala hingga statusnya menjadi SUCCESS, dan periksa publishDetails[].submissionError untuk mengetahui kegagalan per situs.

bulkPublish

Terbitkan satu postingan ke Google dan Facebook untuk banyak lokasi dalam satu pemanggilan. Secara default, sites mencakup keduanya. Pesan (atau pemetaan per situs) dijabarkan menjadi satu entri per situs, ID lokasi dikodekan secara otomatis, dan payload divalidasi di sisi klien sebelum pemanggilan jaringan apa pun (payload yang tidak valid langsung memicu ValidationError).

TypeScript
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 async

Berikan objek sebagai message untuk teks per situs:

TypeScript
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!',},});

Opsi

ParameterTipeDeskripsi
namestringNama kampanye internal (tidak ditampilkan kepada pelanggan). Wajib.
locationIdsArray<string | number>Lokasi tujuan penerbitan (ID numerik atau base64). Wajib.
messagestring atau pemetaan per situsIsi postingan untuk semua situs, atau pemetaan { GOOGLE, FACEBOOK }. Wajib.
sitesPostSite[]Situs tujuan; nilai defaultnya adalah ['GOOGLE', 'FACEBOOK'].
postTypePostTypeANNOUNCEMENT (default), EVENT, OFFER, COVID19, atau PRODUCT.
ctaTypePostCtaTypeBOOK, ORDER, SHOP, LEARN_MORE, SIGN_UP, atau GET_OFFER. Memerlukan ctaUrl.
ctaUrlstringTujuan tombol CTA. Memerlukan ctaType.
mediaUrlstringURL gambar publik yang dilampirkan di setiap situs.
scheduledDatesobject{ startDatetime, endDatetime, removalSites } untuk penerbitan/kedaluwarsa terjadwal.
contextInfoobjectDetail acara atau penawaran jika diperlukan oleh postType.
additionalFieldsobjectField camelCase tambahan tanpa struktur bertingkat yang digabungkan ke dalam body permintaan tanpa perubahan.

createAnnouncement

Buat postingan ANNOUNCEMENT: pesan biasa dengan CTA dan media opsional. Menerima opsi yang sama dengan bulkPublish, kecuali postType dan contextInfo; di sini, nilai default sites adalah ['GOOGLE'].

TypeScript
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

Buat postingan EVENT dengan judul serta waktu mulai dan berakhir. title wajib diisi (diwajibkan oleh Google); startDay dan endDay adalah tanggal dalam format YYYY-MM-DD, sedangkan startTime/endTime adalah waktu tampilan opsional. Nilai default sites adalah ['GOOGLE'].

TypeScript
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

Buat postingan OFFER dengan kupon, diskon, dan ketentuan. title wajib diisi; semua field penawaran lainnya bersifat opsional. Nilai default sites adalah ['GOOGLE'].

TypeScript
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',});

Opsi penawaran

ParameterTipeDeskripsi
titlestringJudul penawaran. Wajib.
couponCodestringKode yang ditukarkan pelanggan.
discountstringDeskripsi diskon, misalnya '20%'.
redeemUrlstringTautan penukaran online.
termsConditionsstringTeks syarat dan ketentuan.
startDaystringAwal masa berlaku penawaran, YYYY-MM-DD.
endDaystringAkhir masa berlaku penawaran, YYYY-MM-DD.

createPost

Buat postingan dari body mentah yang berisi field tanpa struktur bertingkat, tanpa validasi di sisi klien. Metode ini membungkus data yang Anda berikan dalam objek input yang diwajibkan API, sehingga body yang dikirim adalah {"input": {...}}; body yang sepenuhnya tanpa struktur bertingkat ditolak dengan status HTTP 400. Utamakan penggunaan createAnnouncement, createEvent, atau createOffer, yang menyusun dan memvalidasi body ini untuk Anda.

TypeScript
await client.createPost({postName: 'Grand Opening',locationIds: ['TG9jYXRpb246MTY4MDg='],postType: 'ANNOUNCEMENT',postSites: ['GOOGLE'],postMessage: [{ site: 'GOOGLE', message: 'We are now open!' }],});

fetchPost

Ambil postingan beserta konten, status penerbitan per situs, dan analitiknya. Gunakan metode ini untuk memeriksa postingan INPROGRESS secara berkala hingga diterbitkan.

TypeScript
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

Hapus postingan dan hapus juga dari setiap situs tempat postingan tersebut diterbitkan.

TypeScript
await client.deletePost('U29jaWFsUG9zdDo0NDEyMg==');

fetchLocationPosts

Tampilkan daftar kampanye postingan yang menargetkan suatu lokasi. Menggunakan paginasi berbasis offset (page dan perPage), dan menghasilkan postsByLocation setelah selesai.

Rute ini menolak tag, sehingga sejak versi 0.3.2, SDK menerima opsi tersebut untuk kompatibilitas dengan versi sebelumnya dan tidak pernah mengirimkannya melalui jaringan. Gunakan fetchLocationBulkPosts jika Anda memerlukan pemfilteran berdasarkan tag.

TypeScript
const posts = await client.fetchLocationPosts(16808, { page: 1, perPage: 10 });

Opsi

ParameterTipeDeskripsi
tagstringDiterima tetapi tidak dikirim pada rute ini. Lihat catatan di atas.
pagenumberNomor halaman (dimulai dari 1).
perPagenumberJumlah hasil per halaman.
filtersobjectField filter postingan (dikodekan sebagai JSON secara otomatis).
sortFieldsobjectObjek pengurutan seperti { field: 'created_at', order: 'Descending' }.

fetchBulkPost

Ambil kampanye massal beserta status penerbitan dan analitik per lokasi.

TypeScript
const bulk = await client.fetchBulkPost('QnVsa1Bvc3Q6OTk=');

fetchLocationBulkPosts

Tampilkan daftar kampanye massal (multilokasi) yang mencakup suatu lokasi. Menerima opsi yang sama dengan fetchLocationPosts.

TypeScript
const campaigns = await client.fetchLocationBulkPosts(16808, { page: 1, perPage: 10 });