Announce every Contentful publish in Slack with an AI summary

By General Input

The second a blog post, landing page, or release note goes live in Contentful, your team gets a Slack message with the title, author, live link, and a 2-3 sentence plain-English summary.

Integrations

  • Contentful
  • Slack Bot

Type

Agentic Task

Categories

  • Marketing
  • Operations

Whenever a Contentful entry is published, post a short "what just shipped" announcement to a designated Slack channel. This is a webhook-triggered agent: Contentful fires an outgoing webhook on the Entry.publish topic (see https://www.contentful.com/developers/docs/webhooks/overview/), the agent picks it up, and one Slack message goes out per qualifying publish.

Trigger: a Contentful outgoing webhook configured for the Entry.publish topic on the relevant space/environment. The webhook payload includes sys.id, sys.contentType.sys.id, sys.space.sys.id, sys.environment.sys.id, and sys.updatedBy — enough to identify the entry and refetch it.

Configuration the workflow should surface as inputs: (1) an allowlist of content type IDs to announce (default example: blogPost, landingPage, releaseNote); (2) the Slack channel ID or name to post to; (3) the public URL template for the live page, using {slug} as a placeholder (for example https://example.com/blog/{slug}); (4) optionally, the Contentful space/environment IDs if not carried by the webhook payload.

Steps to run on each webhook: 1) Read sys.contentType.sys.id from the payload. If it is NOT in the configured allowlist, exit silently — do not post to Slack. This is how we skip fixtures, snippets, and reference data. 2) Use Contentful's Get Entry to fetch the freshly published entry by its sys.id from the correct space and environment. 3) Extract the human-facing fields: title (fall back to name/heading if title is missing), slug, body/content/summary/description (whichever the content type uses), and the author reference if present. 4) If the entry has an author reference field pointing to another entry, call Get Entry a second time on that reference to resolve the author's display name. If the payload only carries a Contentful user id in sys.updatedBy or sys.publishedBy, surface it as a plain string — do not fail the workflow on a missing name. 5) Optionally call Get Content Type to resolve the content type's display name (for example "Blog Post" instead of "blogPost") so the Slack message reads nicely.

Compose the summary: write 2-3 sentences of plain-English prose describing what the entry is about, drawn strictly from the body/summary/description fields on the entry. Keep it factual and readable — no hype, no invented details. If the body is empty or the entry has no summarizable text yet, say so honestly ("No body content yet — this entry was published as a stub.") rather than fabricating a summary.

Post to Slack using the Slack Bot Send a Message action to the configured channel. The message should include: the entry title (bold), the resolved content type display name, the author name (or "unknown" if not resolvable), a "View page" link built from the configured URL template + slug, an "Edit in Contentful" link of the form https://app.contentful.com/spaces/{space_id}/environments/{environment_id}/entries/{entry_id}, and the 2-3 sentence AI-drafted summary underneath. Use Slack's mrkdwn conventions: *bold*, <url|text> for links, and short line breaks between sections so it renders cleanly in the channel.

Guardrails: exactly one Slack message per Entry.publish event (no threading, no follow-ups). Silently skip Entry.create, Entry.save, Entry.archive, Entry.unpublish, and Entry.delete — only Entry.publish qualifies. If Contentful returns 404 on Get Entry (rare — the entry was deleted between publish and fetch), skip that event without alerting. If the resolved content type is missing from the allowlist, exit before any Slack call. Never post partial or malformed messages if a required field is missing — degrade gracefully with sensible placeholders.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client accountGive your team Looker numbers without buying more seatsPause marketing emails to escalated customers, then restore them