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).
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 asyncBerikan objek sebagai message untuk teks per situs:
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
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'].
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'].
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'].
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
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.
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.
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.
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.
const posts = await client.fetchLocationPosts(16808, { page: 1, perPage: 10 });Opsi
fetchBulkPost
Ambil kampanye massal beserta status penerbitan dan analitik per lokasi.
const bulk = await client.fetchBulkPost('QnVsa1Bvc3Q6OTk=');fetchLocationBulkPosts
Tampilkan daftar kampanye massal (multilokasi) yang mencakup suatu lokasi. Menerima opsi yang sama dengan fetchLocationPosts.
const campaigns = await client.fetchLocationBulkPosts(16808, { page: 1, perPage: 10 });Sumber daya terkait
- Lokasi, cari ID lokasi
- Penanganan kesalahan,
ValidationErrordan kode kesalahan platform