貼文

透過 client.posts 將公告、活動和優惠發布至 Google 和 Facebook。

所有貼文方法都位於 client.posts 下。接受 location_id 的方法可接受數值或 base64 編碼的 ID;請參閱 地點 ID。

貼文會發布至 2 個網站:GOOGLE 和 FACEBOOK。貼文類型包括 ANNOUNCEMENT、EVENT、OFFER、COVID19 和 PRODUCT。行動呼籲類型包括 BOOK、ORDER、SHOP、LEARN_MORE、SIGN_UP 和 GET_OFFER;cta_type 和 cta_url 必須一律一起提供。

非同步發布

發布作業以非同步方式執行。建立呼叫會傳回 status: INPROGRESS;請輪詢 posts.retrieve()(大量發布活動則輪詢 posts.bulk_retrieve()),直到狀態為 SUCCESS,並檢查 publishDetails[].submissionError 以確認各網站的失敗情形。

各網站的訊息

每個建立方法都接受以純文字字串或將網站對應至文字的 dict 作為 message;純文字字串會將相同文字發布至每個網站:

Python
message = {  "GOOGLE": "Book your summer checkup today!",  "FACEBOOK": "Summer checkups are here. Tag a friend who needs one!",}

當 message 為 dict 時,必須包含 sites 中每個網站的項目;若缺少任何項目,SDK 會在進行任何網路呼叫前引發 ValidationError。


posts.bulk_publish

透過 1 次呼叫,將同一則貼文發布至多個地點的 Google 和 Facebook。這是建議的貼文發布方式:sites 預設包含這 2 個網站,單一訊息(或各網站的 dict)會展開為每個網站各 1 個項目,地點 ID 會自動編碼,且用戶端會在進行任何網路呼叫前驗證酬載。

Python
client.posts.bulk_publish(    *,    name: str,    location_ids: list[str | int],    message: str | dict[str, str],    sites: list[str] | None = None,    post_type: str = "ANNOUNCEMENT",    cta_type: str | None = None,    cta_url: str | None = None,    media_url: str | None = None,    scheduled_dates: dict | None = None,    context_info: dict | None = None,    additional_fields: dict | None = None,) -> APIObject
引數型別說明
namestr內部活動名稱(不會顯示給客戶)。必填。
location_idslist[str | int]要發布至的所有地點(數值或 base64 ID)。必填。
messagestr | dict用於每個網站的貼文內文,或各網站的 dict。必填。
siteslist[str]目標網站。預設為 ["GOOGLE", "FACEBOOK"]。
post_typestrANNOUNCEMENT(預設)、EVENT、OFFER、COVID19 或 PRODUCT。
cta_typestr選填的行動呼籲按鈕;需要 cta_url。
cta_urlstrCTA 按鈕的連結目標。
media_urlstr選填的公開圖片 URL,會附加至每個網站的貼文。
scheduled_datesdict選填的 {"startDatetime", "endDatetime"} 時間範圍。
context_infodict當 post_type 需要時提供的活動或優惠詳細資訊。
additional_fieldsdict額外的扁平結構 camelCase 欄位,會原樣合併。
Python
result = client.posts.bulk_publish(  name="Holiday hours",  location_ids=[16808, 16809, 16810],  message="Open until 10pm through the holidays!",  media_url="https://cdn.example.com/holiday.jpg",  cta_type="LEARN_MORE",  cta_url="https://example.com/holiday-hours",)print(result.socialPost.id, result.socialPost.status)  # INPROGRESS, publishes async

posts.create_announcement

建立 ANNOUNCEMENT 貼文:純文字訊息,可選擇加入 CTA 和媒體。sites 預設為 ["GOOGLE"]。

Python
client.posts.create_announcement(    *,    name: str,    location_ids: list[str | int],    message: str | dict[str, str],    sites: list[str] | None = None,    cta_type: str | None = None,    cta_url: str | None = None,    media_url: str | None = None,    scheduled_dates: dict | None = None,    additional_fields: dict | None = None,) -> APIObject
Python
result = client.posts.create_announcement(  name="Grand Opening",  location_ids=[16808],  message="Acme Dental is now open!",  sites=["GOOGLE"],  cta_type="LEARN_MORE",  cta_url="https://acmedental.example.com/opening",)print(result.socialPost.id)

posts.create_event

建立包含標題及開始與結束時間範圍的 EVENT 貼文。Google 要求提供活動標題;若未提供,SDK 會引發 ValidationError。start_day 和 end_day 是日期(YYYY-MM-DD);start_time 和 end_time 是用於顯示的字串,例如 "10:00am"。

Python
client.posts.create_event(    *,    name: str,    location_ids: list[str | int],    message: str | dict[str, str],    title: str,    start_day: str,    end_day: str,    start_time: str | None = None,    end_time: str | None = None,    sites: list[str] | None = None,    cta_type: str | None = None,    cta_url: str | None = None,    media_url: str | None = None,    scheduled_dates: dict | None = None,    additional_fields: dict | None = None,) -> APIObject
Python
result = client.posts.create_event(  name="Free checkup day",  location_ids=[16808],  message="Join us for free dental checkups!",  title="Free Checkup Day",  start_day="2026-08-01",  end_day="2026-08-01",  start_time="10:00am",  end_time="4:00pm",  cta_type="BOOK",  cta_url="https://acmedental.example.com/book",)print(result.socialPost.id)

posts.create_offer

建立包含優惠券、折扣及條款的 OFFER 貼文。title 用於命名優惠,為必填欄位;start_day 和 end_day(YYYY-MM-DD)界定優惠的有效期間。

Python
client.posts.create_offer(    *,    name: str,    location_ids: list[str | int],    message: str | dict[str, str],    title: str,    coupon_code: str | None = None,    discount: str | None = None,    redeem_url: str | None = None,    terms_conditions: str | None = None,    start_day: str | None = None,    end_day: str | None = None,    sites: list[str] | None = None,    cta_type: str | None = None,    cta_url: str | None = None,    media_url: str | None = None,    scheduled_dates: dict | None = None,    additional_fields: dict | None = None,) -> APIObject
Python
result = client.posts.create_offer(  name="Summer whitening sale",  location_ids=[16808],  message="20% off teeth whitening all week!",  title="Summer Whitening Sale",  coupon_code="SUMMER20",  discount="20%",  redeem_url="https://acmedental.example.com/sale",  terms_conditions="One per patient. Not valid with other offers.",  start_day="2026-08-01",  end_day="2026-08-07",)print(result.socialPost.id)

posts.create

從原始主體 dict 建立貼文。您在 camelCase 中以扁平結構傳入欄位,輔助函式會在傳送前將這些欄位包裝在 API 要求的 input 物件中:實際傳送的主體為 {"input": {...}},絕不會是扁平結構的主體。locationIds 必須已經過 base64 編碼。建議優先使用上述具型別的建立方法,以使用關鍵字引數、自動 ID 編碼及用戶端驗證。

Python
client.posts.create(body: dict) -> APIObject

必填:postName、locationIds(base64)、postType、postSites。

Python
result = client.posts.create({  "postName": "Grand Opening",  "locationIds": ["TG9jYXRpb246MTY4MDg="],  "postType": "ANNOUNCEMENT",  "postSites": ["GOOGLE"],  "postMessage": [{"site": "GOOGLE", "message": "We are now open!"}],})print(result.socialPost.id)

posts.retrieve

取得貼文及其內容、各網站的發布狀態與分析資料。建立後請輪詢此方法,直到 status 為 SUCCESS。

Python
client.posts.retrieve(post_id: str) -> APIObject
Python
post = client.posts.retrieve("U29jaWFsUG9zdDo0NDEyMg==")print(post.status)for detail in post.publishDetails:  print(detail.site, detail.submissionError)

posts.delete

刪除貼文,並將其從所有已發布的網站移除。

Python
client.posts.delete(post_id: str) -> APIObject
Python
client.posts.delete("U29jaWFsUG9zdDo0NDEyMg==")

posts.list_for_location

列出以某個地點為目標的貼文活動。採用位移分頁:結果包含 .records,以及內含 totalPages、totalRecords 和 hasNextPage 的 .pageInfo。回傳資料位於 postsByLocation 下。

此路由會拒絕 tag,因此自 0.5.3 起,SDK 為了向後相容而接受此引數,但絕不會將其納入實際傳送的請求。需要依標籤篩選時,請使用 posts.bulk_list_for_location。

Python
client.posts.list_for_location(    location_id: str | int,    *,    tag: str = "all",    page: int | None = None,    per_page: int | None = None,    filters: dict | None = None,    sort_fields: dict | None = None,) -> APIObject
Python
result = client.posts.list_for_location(16808, page=1, per_page=10)for post in result.records:  print(post.id, post.name)print(result.pageInfo.totalRecords)

posts.bulk_retrieve

取得大量發布(多地點)活動,以及各地點的發布狀態與分析資料。

Python
client.posts.bulk_retrieve(bulk_post_id: str) -> APIObject
Python
bulk = client.posts.bulk_retrieve("QnVsa1Bvc3Q6OTk=")print(bulk.status)

posts.bulk_list_for_location

列出包含某個地點的大量發布(多地點)活動。參數與結果結構與 posts.list_for_location 相同。

Python
client.posts.bulk_list_for_location(    location_id: str | int,    *,    tag: str = "all",    page: int | None = None,    per_page: int | None = None,    filters: dict | None = None,    sort_fields: dict | None = None,) -> APIObject
Python
result = client.posts.bulk_list_for_location(16808, page=1, per_page=10)for campaign in result.records:  print(campaign.id, campaign.name)

另請參閱

  • 地點:建立及管理您發布貼文的地點
  • 商家資訊:查看各地點的同步狀態
  • 分析:Google、Bing、Facebook 商家檔案分析