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).

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

Passe um objeto como message para definir o texto por site:

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

Opções

ParâmetroTipoDescrição
namestringNome interno da campanha (não exibido aos clientes). Obrigatório.
locationIdsArray<string | number>Locais para os quais publicar (IDs numéricos ou em base64). Obrigatório.
messagestring ou mapa por siteCorpo da postagem para todos os sites ou mapa { GOOGLE, FACEBOOK }. Obrigatório.
sitesPostSite[]Sites de destino; o padrão é ['GOOGLE', 'FACEBOOK'].
postTypePostTypeANNOUNCEMENT (padrão), EVENT, OFFER, COVID19 ou PRODUCT.
ctaTypePostCtaTypeBOOK, ORDER, SHOP, LEARN_MORE, SIGN_UP ou GET_OFFER. Exige ctaUrl.
ctaUrlstringDestino do botão de CTA. Exige ctaType.
mediaUrlstringURL pública da imagem anexada em todos os sites.
scheduledDatesobject{ startDatetime, endDatetime, removalSites } para publicação/expiração agendada.
contextInfoobjectDetalhes do evento ou da oferta quando postType os exige.
additionalFieldsobjectCampos extras de camelCase, sem aninhamento, incorporados ao corpo da requisição sem alteraçõ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'].

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

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'].

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

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'].

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

Opções da oferta

ParâmetroTipoDescrição
titlestringTítulo da oferta. Obrigatório.
couponCodestringCódigo que os clientes usam para resgatar a oferta.
discountstringDescrição do desconto, por exemplo, '20%'.
redeemUrlstringLink para resgate online.
termsConditionsstringTexto dos termos e condições.
startDaystringInício da validade da oferta, YYYY-MM-DD.
endDaystringFim da validade da oferta, YYYY-MM-DD.

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ê.

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

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

Exclua uma postagem e remova-a de todos os sites em que foi publicada.

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

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

Opções

ParâmetroTipoDescrição
tagstringAceito, mas não enviado nesta rota. Consulte a observação acima.
pagenumberNúmero da página (começando em 1).
perPagenumberResultados por página.
filtersobjectCampos de filtro de postagens (codificados automaticamente em JSON).
sortFieldsobjectObjeto de ordenação como { field: 'created_at', order: 'Descending' }.

fetchBulkPost

Obtenha uma campanha em massa com status de publicação e métricas por local.

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

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