Beiträge

Veröffentlichen Sie Ankündigungen, Veranstaltungen und Angebote über client.posts auf Google und Facebook.

Alle Methoden für Beiträge befinden sich unter client.posts. Methoden mit einem location_id akzeptieren numerische oder base64-kodierte IDs; siehe Standort-IDs.

Beiträge werden auf zwei Plattformen veröffentlicht: GOOGLE und FACEBOOK. Die Beitragstypen sind ANNOUNCEMENT, EVENT, OFFER, COVID19 und PRODUCT. Die Call-to-Action-Typen sind BOOK, ORDER, SHOP, LEARN_MORE, SIGN_UP und GET_OFFER; cta_type und cta_url müssen immer zusammen angegeben werden.

Asynchrone Veröffentlichung

Die Veröffentlichung erfolgt asynchron. Aufrufe zum Erstellen geben status: INPROGRESS zurück; fragen Sie posts.retrieve() (oder posts.bulk_retrieve() für Sammelkampagnen) wiederholt ab, bis der Status SUCCESS lautet, und prüfen Sie publishDetails[].submissionError auf Fehler bei den einzelnen Plattformen.

Plattformspezifische Texte

Jede Erstellungsmethode akzeptiert message entweder als einfache Zeichenfolge, mit der derselbe Text auf jeder Plattform veröffentlicht wird, oder als dict, das jeder Plattform einen Text zuordnet:

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

Wenn message ein dict ist, muss es für jede Plattform in sites einen Eintrag enthalten; fehlt einer, löst das SDK vor jedem Netzwerkaufruf ValidationError aus.


posts.bulk_publish

Veröffentlichen Sie mit einem einzigen Aufruf einen Beitrag für mehrere Standorte auf Google und Facebook. Dies ist die empfohlene Methode zum Veröffentlichen von Beiträgen: sites umfasst standardmäßig beide Plattformen, aus dem gemeinsamen Text (oder dem plattformspezifischen dict) wird ein Eintrag pro Plattform erzeugt, Standort-IDs werden automatisch kodiert und die Nutzdaten werden vor jedem Netzwerkaufruf clientseitig validiert.

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
ArgumentTypBeschreibung
namestrInterner Kampagnenname (für Kunden nicht sichtbar). Erforderlich.
location_idslist[str | int]Alle Standorte, für die veröffentlicht werden soll (numerische oder base64-kodierte IDs). Erforderlich.
messagestr | dictBeitragstext für alle Plattformen oder ein plattformspezifisches dict. Erforderlich.
siteslist[str]Zielplattformen. Standardwert ist ["GOOGLE", "FACEBOOK"].
post_typestrANNOUNCEMENT (Standard), EVENT, OFFER, COVID19 oder PRODUCT.
cta_typestrOptionale Call-to-Action-Schaltfläche; erfordert cta_url.
cta_urlstrZiel der CTA-Schaltfläche.
media_urlstrOptionale öffentliche Bild-URL, die auf jeder Plattform angehängt wird.
scheduled_datesdictOptionales Zeitfenster für {"startDatetime", "endDatetime"}.
context_infodictVeranstaltungs- oder Angebotsdetails, wenn post_type sie erfordert.
additional_fieldsdictZusätzliche, nicht verschachtelte camelCase-Felder, die unverändert übernommen werden.
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

Erstellen Sie einen Beitrag vom Typ ANNOUNCEMENT: einen einfachen Text mit optionaler CTA-Schaltfläche und optionalen Medien. Der Standardwert für sites ist ["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

Erstellen Sie einen Beitrag vom Typ EVENT mit einem Titel sowie einem Beginn und einem Ende. Google erfordert den Veranstaltungstitel; fehlt er, löst das SDK ValidationError aus. start_day und end_day sind Datumsangaben (YYYY-MM-DD); start_time und end_time sind Zeichenfolgen zur Anzeige, etwa "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

Erstellen Sie einen Beitrag vom Typ OFFER mit einem Gutschein, einem Rabatt und Bedingungen. title bezeichnet das Angebot und ist erforderlich; start_day und end_day (YYYY-MM-DD) begrenzen dessen Gültigkeitszeitraum.

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

Erstellen Sie einen Beitrag aus einem unverarbeiteten dict für den Anfragetext. Sie übergeben die Felder ohne Verschachtelung in camelCase, und die Hilfsfunktion bettet sie vor dem Senden in das von der API erforderliche input-Objekt ein: Der übertragene Anfragetext ist {"input": {...}}, niemals ein Anfragetext ohne Verschachtelung. locationIds muss bereits base64-kodiert sein. Verwenden Sie vorzugsweise die oben aufgeführten typisierten Erstellungsmethoden, um Schlüsselwortargumente, automatische ID-Kodierung und clientseitige Validierung zu nutzen.

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

Erforderlich: 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

Rufen Sie einen Beitrag mit seinem Inhalt, dem Veröffentlichungsstatus pro Plattform und den Analysedaten ab. Fragen Sie ihn nach dem Erstellen wiederholt ab, bis status den Wert SUCCESS hat.

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

Löschen Sie einen Beitrag und entfernen Sie ihn von jeder Plattform, auf der er veröffentlicht wurde.

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

posts.list_for_location

Listen Sie Beitragskampagnen auf, die auf einen Standort ausgerichtet sind. Die Paginierung erfolgt über einen Offset: Das Ergebnis enthält .records sowie .pageInfo mit totalPages, totalRecords und hasNextPage. Die Antwort wird unter postsByLocation zurückgegeben.

Diese Route lehnt tag ab, daher akzeptiert das SDK das Argument seit Version 0.5.3 zur Wahrung der Abwärtskompatibilität, überträgt es jedoch nie. Verwenden Sie posts.bulk_list_for_location, wenn Sie nach Tags filtern müssen.

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

Rufen Sie eine Sammelkampagne für mehrere Standorte mit dem Veröffentlichungsstatus und den Analysedaten pro Standort ab.

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

Listen Sie Sammelkampagnen für mehrere Standorte auf, die einen bestimmten Standort einschließen. Die Parameter und die Ergebnisstruktur entsprechen denen von 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)

Siehe auch

  • Standorte: Erstellen und verwalten Sie die Standorte, für die Sie Beiträge veröffentlichen
  • Einträge: Prüfen Sie den Synchronisierungsstatus pro Standort
  • Analysen: Profilanalysen für Google, Bing und Facebook