投稿

listingsapi-js SDKを使用して、お知らせ、イベント、特典をGoogleとFacebookに公開します。

投稿メソッドは、Google Business ProfileとFacebookにコンテンツを公開し、サイトごとの公開ステータスと分析データを確認できるようにします。すべての投稿メソッドは、ListingsAPIクライアントインスタンスで直接使用できます。

公開処理は非同期です。作成呼び出しはstatus: 'INPROGRESS'を返し、投稿はバックグラウンドで公開されます。ステータスがSUCCESSになるまでfetchPostをポーリングし、サイトごとの失敗をpublishDetails[].submissionErrorで確認してください。

bulkPublish

1回の呼び出しで、複数の拠点のGoogleとFacebookに1つの投稿を公開します。sitesのデフォルトは両方です。メッセージ(またはサイトごとのマップ)はサイトごとに1つのエントリに展開され、拠点IDは自動的にエンコードされます。また、ネットワーク呼び出しの前にクライアント側でペイロードが検証されます(無効なペイロードは即座に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

サイトごとに本文を指定するには、messageにオブジェクトを渡します。

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

オプション

パラメータ型説明
namestring内部用のキャンペーン名(顧客には表示されません)。必須です。
locationIdsArray<string | number>公開先の拠点(数値またはbase64のID)。必須です。
messagestringまたはサイトごとのマップすべてのサイトに共通の投稿本文、または{ GOOGLE, FACEBOOK }マップ。必須です。
sitesPostSite[]対象サイトです。デフォルトは['GOOGLE', 'FACEBOOK']です。
postTypePostTypeANNOUNCEMENT(デフォルト)、EVENT、OFFER、COVID19、またはPRODUCTです。
ctaTypePostCtaTypeBOOK、ORDER、SHOP、LEARN_MORE、SIGN_UP、またはGET_OFFERです。ctaUrlが必要です。
ctaUrlstringCTAボタンのリンク先です。ctaTypeが必要です。
mediaUrlstringすべてのサイトで添付する、公開アクセス可能な画像のURLです。
scheduledDatesobject公開または有効期限の日時を指定するための{ startDatetime, endDatetime, removalSites }です。
contextInfoobjectpostTypeで必要となる場合に指定する、イベントまたは特典の詳細です。
additionalFieldsobjectリクエストボディにそのままマージする、追加のフラットなcamelCaseフィールドです。

createAnnouncement

ANNOUNCEMENT投稿を作成します。これは、CTAとメディアを任意で追加できるシンプルなメッセージです。bulkPublishと同じオプションを受け取りますが、postTypeとcontextInfoは除きます。ここでは、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

タイトルと開始・終了期間を指定して、EVENT投稿を作成します。titleは必須です(Googleで必須とされています)。startDayとendDayはYYYY-MM-DD形式の日付で、startTimeとendTimeは任意で指定できる表示用の時刻です。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

クーポン、割引、利用条件を指定して、OFFER投稿を作成します。titleは必須で、それ以外の特典フィールドはすべて任意です。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',});

特典のオプション

パラメータ型説明
titlestring特典のタイトル。必須です。
couponCodestring顧客が特典を利用する際に使うコードです。
discountstring割引の説明です。例:'20%'。
redeemUrlstringオンラインで特典を利用するためのリンクです。
termsConditionsstring利用条件のテキストです。
startDaystring特典の有効期間の開始日をYYYY-MM-DDで指定します。
endDaystring特典の有効期間の終了日をYYYY-MM-DDで指定します。

createPost

クライアント側で検証せずに、フラットなフィールドで構成された未加工のリクエストボディから投稿を作成します。このメソッドは、渡された内容をAPIが要求するinputオブジェクトでラップするため、実際に送信されるリクエストボディは{"input": {...}}になります。ラップされていないフラットなリクエストボディはHTTP 400で拒否されます。このリクエストボディの構築と検証を行うcreateAnnouncement、createEvent、またはcreateOfferの使用を推奨します。

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

fetchPost

投稿のコンテンツ、サイトごとの公開ステータス、分析データを取得します。INPROGRESS投稿が公開されるまでポーリングするために使用します。

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

投稿を削除し、公開先のすべてのサイトからも削除します。

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

fetchLocationPosts

指定した拠点を対象とする投稿キャンペーンの一覧を取得します。オフセットによるページネーション(pageとperPage)を使用し、postsByLocationに解決されます。

このルートはtagを拒否するため、SDKは0.3.2以降、後方互換性のためにこのオプションを受け付けますが、リクエストには一切含めません。タグによる絞り込みが必要な場合は、fetchLocationBulkPostsを使用してください。

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

オプション

パラメータ型説明
tagstringこのルートでは受け付けますが、送信しません。上記の注記を参照してください。
pagenumberページ番号(1始まり)です。
perPagenumber1ページあたりの結果件数です。
filtersobject投稿の絞り込み用フィールド(自動的にJSONエンコードされます)です。
sortFieldsobject{ field: 'created_at', order: 'Descending' }のような並べ替え用のオブジェクトです。

fetchBulkPost

一括キャンペーンを、拠点ごとの公開ステータスと分析データとともに取得します。

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

fetchLocationBulkPosts

指定した拠点を含む一括(複数拠点)キャンペーンの一覧を取得します。fetchLocationPostsと同じオプションを受け取ります。

TypeScript
const campaigns = await client.fetchLocationBulkPosts(16808, { page: 1, perPage: 10 });
  • 拠点、拠点 ID の検索
  • エラー処理、ValidationErrorおよびプラットフォームのエラーコード