Publicações
Publique comunicados, eventos e ofertas no Google e no Facebook com o SDK listingsapi-js.
Os métodos de postagem publicam conteúdo no Google Business Profile e no Facebook e permitem monitorar o status de publicação e as métricas por site. Todos os métodos de postagem ficam diretamente na instância do cliente ListingsAPI.
A publicação é assíncrona: as chamadas de criação retornam status: 'INPROGRESS', e a postagem é publicada em segundo plano. Consulte fetchPost periodicamente até que o status seja SUCCESS e verifique publishDetails[].submissionError para identificar falhas por site.
bulkPublish
Publique uma postagem no Google e no Facebook para vários locais em uma única chamada. O padrão de sites inclui ambos. A mensagem (ou o mapa por site) é expandida para uma entrada por site, os IDs dos locais são codificados automaticamente e o corpo da requisição é validado no cliente antes de qualquer chamada de rede (um corpo inválido lança ValidationError imediatamente).
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 asyncPasse um objeto como message para definir o texto por site:
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!',},});Opções
createAnnouncement
Crie uma postagem ANNOUNCEMENT: uma mensagem simples com CTA e mídia opcionais. Aceita as mesmas opções de bulkPublish, exceto postType e contextInfo; aqui, o padrão de 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
Crie uma postagem EVENT com um título e um período com início e fim. title é obrigatório (o Google o exige); startDay e endDay são datas no formato YYYY-MM-DD, e startTime/endTime são horários opcionais para exibição. O padrão de 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
Crie uma postagem OFFER com cupom, desconto e termos. title é obrigatório; todos os outros campos da oferta são opcionais. O padrão de 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',});Opções da oferta
createPost
Crie uma postagem a partir de um corpo bruto com campos sem aninhamento, sem validação no cliente. O método coloca os dados que você passa dentro do objeto input exigido pela API, de modo que o corpo transmitido é {"input": {...}}; um corpo totalmente sem aninhamento é rejeitado com o status HTTP 400. Prefira createAnnouncement, createEvent ou createOffer, que montam e validam esse corpo para você.
await client.createPost({postName: 'Grand Opening',locationIds: ['TG9jYXRpb246MTY4MDg='],postType: 'ANNOUNCEMENT',postSites: ['GOOGLE'],postMessage: [{ site: 'GOOGLE', message: 'We are now open!' }],});fetchPost
Obtenha uma postagem com seu conteúdo, status de publicação por site e métricas. Use esse método para consultar periodicamente uma postagem INPROGRESS até que ela seja publicada.
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
Exclua uma postagem e remova-a de todos os sites em que foi publicada.
await client.deletePost('U29jaWFsUG9zdDo0NDEyMg==');fetchLocationPosts
Liste as campanhas de postagens destinadas a um local. Usa paginação por deslocamento (page e perPage) e retorna uma promessa que é resolvida com postsByLocation.
Esta rota rejeita um tag, portanto, desde a versão 0.3.2, o SDK aceita a opção para manter a compatibilidade com versões anteriores e nunca a envia na requisição. Use fetchLocationBulkPosts quando precisar filtrar por tags.
const posts = await client.fetchLocationPosts(16808, { page: 1, perPage: 10 });Opções
fetchBulkPost
Obtenha uma campanha em massa com status de publicação e métricas por local.
const bulk = await client.fetchBulkPost('QnVsa1Bvc3Q6OTk=');fetchLocationBulkPosts
Liste as campanhas em massa (para vários locais) que incluem um local. Aceita as mesmas opções de fetchLocationPosts.
const campaigns = await client.fetchLocationBulkPosts(16808, { page: 1, perPage: 10 });Recursos relacionados
- Locais, consulte os IDs dos locais
- Tratamento de erros,
ValidationErrore códigos de erro da plataforma