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:
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.
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,) -> APIObjectresult = 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 asyncposts.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"].
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,) -> APIObjectresult = 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".
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,) -> APIObjectresult = 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.
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,) -> APIObjectresult = 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.
client.posts.create(body: dict) -> APIObjectErforderlich: postName, locationIds (base64), postType, postSites.
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.
client.posts.retrieve(post_id: str) -> APIObjectpost = 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.
client.posts.delete(post_id: str) -> APIObjectclient.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.
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,) -> APIObjectresult = 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.
client.posts.bulk_retrieve(bulk_post_id: str) -> APIObjectbulk = 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.
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,) -> APIObjectresult = client.posts.bulk_list_for_location(16808, page=1, per_page=10)for campaign in result.records: print(campaign.id, campaign.name)