Publishing to Google Business Profile
Attach a library asset to a Google Business Profile post from the cockpit composer.
The cockpit composer publishes Google Business Profile (GBP) Local Posts with a caption and one or more photos drawn from your Asset Library. Publishing is asynchronous: the modal returns in under three seconds, and the post is delivered to GBP in the background.
Composer flow
- Open the publish modal from the cockpit (or from a coach recommendation's Use in composer CTA).
- Pick an asset from the library โ only Ready assets are selectable.
- Write the caption that becomes the post
summary. - Click Publish.
The modal closes once the job is enqueued. Job status surfaces back in the cockpit; failures are operator-visible.
Post topic
WS-1 publishes the GBP STANDARD post topic only. The EVENT and OFFER topics โ with their date ranges and offer codes โ ship in WS-2.
Channels
GBP is the only enabled channel in WS-1. The composer's channel rail shows Instagram, Facebook, and TikTok as Coming soon pills so the publish destination is unambiguous. Those channels become selectable as their composer flows land in later workstreams.
Async delivery
Publishing enqueues a gbp.publish.local-post job. The handler resolves your GBP OAuth token, signs the asset blob URLs, and calls the GBP API. On success, the job row flips to CONFIRMED and each attached asset's lastPublishedAt is bumped โ so the library can surface "recently published" sorting.
The handler auto-refreshes expiring tokens. If GBP returns an error, the job row carries the failure detail for the next composer view to surface.
Double-submit safety
Each composer submit derives a per-org idempotency key from the org id, the asset id set, and the caption hash. If you click Publish twice on the same payload โ common when the network blips โ the second submit collapses to the existing job row instead of creating a duplicate post. The key is enforced as a unique constraint at the database layer; the safety is not best-effort.
If you change the caption or swap an asset, the key changes and a fresh job is enqueued.
Related
- Asset Library โ uploads, filtering, coach suggestions
- Why was my upload rejected?