Set it up
You’ll create an Incoming Webhook in Slack, copy the URL, paste it into Forepost. Five minutes start to finish.Create a Slack app
Go to api.slack.com/apps and click Create New App → From scratch. Name it Forepost (or whatever you like) and pick the Slack workspace you want to post into.
Enable Incoming Webhooks
In the app’s left sidebar, open Incoming Webhooks and toggle Activate Incoming Webhooks to on.
Add a webhook for a channel
Scroll down and click Add New Webhook to Workspace. Pick the channel you want briefs posted to (we recommend a dedicated
#cx-leads or #support-pulse channel — not #general). Authorise.Copy the URL
You’ll be returned to the Incoming Webhooks page with a new entry. Copy the URL. It looks like
https://hooks.slack.com/services/T0XXX.../B0XXX.../abc123....Paste into Forepost
In Settings → Delivery → Slack delivery, paste the URL into the Incoming webhook URL field, toggle Slack delivery on, and Save settings.
Send a test
Click Send test to Slack. The brief should appear in your chosen channel within a couple of seconds. If it doesn’t, see Troubleshooting below.
How delivery works
- Independent channels. Slack and email fire independently from the same schedule. Turn either or both on. The same hour and timezone you set for the Daily Brief governs both.
- One Slack target per workspace. A webhook URL is tied to one channel. If you want the brief in two places, create two webhooks and decide which to use; for two channels in production we’d recommend keeping email on for whoever doesn’t sit in the Slack channel.
- Block Kit format. Briefs render as native Slack blocks (header, sections, divider, footer with links to the app). Long briefs are chunked across multiple sections so nothing gets truncated.
Capacity breach alerts
Slack delivery has a sub-feature that turns Forepost into a proactive agent rather than a scheduled poster: capacity breach alerts. When your capacity runway drops below 8 weeks, Forepost posts to your Slack channel right away — not at your daily brief hour, not in the Monday digest, but the next cron tick after the breach is detected. The alert names the runway in weeks, the human-handled volume, the team cap, and what adding one agent would do to the cap. Plain numbers, ready to share with finance. Rules:- Fires once per breach. First time you cross under 8 weeks, you get an alert. If the runway then worsens further (drops by at least 1 week since the last alert), you get another. If it stays the same or improves, you stay quiet.
- 24-hour cooldown. Even if the breach worsens twice in a day, you only get one alert. A flapping metric can’t spam your channel.
- Requires Slack delivery to be on. This feature rides the same webhook as the scheduled brief / digest. The toggle is in Settings → Delivery → Capacity breach alerts, on by default for users who already have Slack delivery configured.
Agent CSAT alerts
A second proactive surface, same channel, different trigger. When an agent’s CSAT trajectory sustains falling across 3+ weeks with a drop of 2pp or more, Forepost flips the agent’s flag in Settings → Team and posts to Slack with a drafted 1:1 agenda included in the same message:Forepost flagged Sarah Chen for review. CSAT sustained falling across 4 weeks (-5pp). Forepost drafted the 1:1 agenda below — paste straight into your notes.The agenda is generated at flag-time by the same model that writes the Daily Brief, following the same voice rules. It’s a copy-paste starting point for your notes, not a script. Rules:
Suggested 1:1 agenda for Sarah Chen
- Open by checking load — 62 tickets, see if anything’s changed.
- Walk through CSAT shape: 84% → 79% across four weeks, ask what’s driving it.
- Recognise her one-touch rate is still above the team average.
- Coach on one specific ticket type where CSAT slipped.
- Agree one thing to try this week, revisit at next 1:1.
- One alert per qualifying agent, not one per cron tick. After firing, Forepost holds a 7-day cooldown on re-asserting the same flag.
- If you clear the flag in Settings → Team, Forepost respects that for 30 days. Re-flagging after you’ve said “I’ve handled it” would feel adversarial; longer cooldown stops Forepost from overruling your judgement.
- Toggle: Settings → Delivery → Agent CSAT alerts. Independent of capacity breach alerts; some teams want one but not the other.
Recovery
When an auto-flagged agent’s CSAT trajectory tips back (no longer falling, no worse than -1pp across the current window), Forepost clears the flag itself and posts a short follow-up:Forepost cleared Sarah Chen’s flag. CSAT sustained rising across 4 weeks. Up 3pp across 4 weeks. The watchlist entry and the queued 1:1 action have both been auto-resolved — pick it back up manually if you still want the conversation.The auto-queued action in your Daily Brief gets marked dismissed in the same step, so your morning checklist stays current without you having to triage. If you’d rather Forepost hadn’t closed it, just re-queue the action manually or flag the agent again.
Ask Forepost in Slack (inbound)
The outbound webhook posts Forepost into Slack. The inbound Slack agent goes the other way: you @mention@forepost in a channel or DM the Forepost bot, and Forepost answers in-thread using the same agentic tool loop as Ask Forepost on the web (Ask Forepost).
One-time install
This needs a Slack app with bot permissions, distinct from the incoming webhook above. You can run both — they don’t conflict.Create the Slack app
At api.slack.com/apps, Create New App → From scratch, name it Forepost Agent (or similar), pick the workspace.
Add bot scopes
Under OAuth & Permissions → Scopes → Bot Token Scopes, add:
app_mentions:read, chat:write, im:history, im:read, im:write. These let the bot read mentions and DMs and post replies.Install the app
Under OAuth & Permissions, click Install to Workspace. Authorise. Copy the Bot User OAuth Token (starts with
xoxb-).Enable event subscriptions
Under Event Subscriptions, toggle on. Set the Request URL to
https://forepost-app.round-mode-162c.workers.dev/slack/events (or your own worker URL). Under Subscribe to bot events, add app_mention and message.im.Copy the signing secret
Under Basic Information → App Credentials, copy the Signing Secret. Forepost staff must set this as the worker’s
SLACK_SIGNING_SECRET env var (one-time op on our side). Email kian@forepost.ai with the secret.Using it
In any channel where you’ve invited the Forepost bot:@forepost what’s CSAT doing this month? @forepost what was Sarah’s last 8 weeks of tickets? @forepost what did you say about deflection last quarter?Or DM the Forepost bot the same questions. Replies arrive in-thread within a few seconds. The Slack agent always runs with tools on, so questions that need a lookup work natively without you needing to remember a toggle.
What it can do in Slack vs. the web
Slack replies are shorter — 3-6 sentences max, no headings, Slack mrkdwn formatting. Everything else is identical: same workspace context, same voice rules, same tool access. Conversation threads are NOT persisted as Ask Forepost threads on the web (each mention is its own one-shot turn); use the web Ask Forepost surface when you want multi-turn memory.Slash commands
If the Slack app is installed (see Ask Forepost in Slack above), three slash commands are available alongside@forepost mentions:
/forepost ask command acks within Slack’s 3-second window and posts the answer in-channel when the agentic turn finishes. /forepost action files a row in the actions table so it shows up on the next Daily Brief’s action history (origin tracked in slack_commands audit). /forepost now reads the latest Now bar snapshot — no extra helpdesk poll.
Responding to delegated actions from Slack
When a CX lead assigns an action to a teammate (see Action assignment), the assignee gets an email with a magic-link response form. The same email now mentions the Slack option inline — “Prefer Slack? Run/forepost respond <id> accept or /forepost respond <id> decline in your workspace’s Slack.” — so the assignee never has to discover the Slack path separately.
Useful when the team lives in Slack and would rather not jump to email.
Flow:
- The assignee runs
/forepost responsesto see open assignments for the workspace, shown as a numbered list with the action text. - They run
/forepost respond <id> accept "on it for Thursday"(ordecline "Sarah is on leave, suggest Tier 2"). - The assignment is marked
acceptedordeclined, the response note is recorded, and the leader gets an email mirroring the magic-link path (subject: X accepted your delegated action (via Slack)).
https://forepost-app.round-mode-162c.workers.dev/slack/commands. Slack will sign each request; the worker verifies the signature against SLACK_SIGNING_SECRET.
Privacy and security
The webhook URL is effectively a password. Anyone holding it can post to the channel as your Slack app. Forepost stores it in our D1 database alongside the rest of your subscription, transmitted only over HTTPS. We never log webhook URLs in plain text. If a URL leaks, revoke it from the Incoming Webhooks page in your Slack app config and paste a fresh URL into Forepost.Troubleshooting
Test send returns 'Send failed'
Test send returns 'Send failed'
Most common cause: the webhook URL has a typo or trailing whitespace. The URL must start with
https://hooks.slack.com/services/ exactly. Re-copy from the Slack admin page and try again.Test sends but the cron's Daily Brief doesn't post
Test sends but the cron's Daily Brief doesn't post
Check that Slack delivery is toggled on (not just the webhook field filled in) and that the Send at hour matches what you expect in your timezone. The cron only fires at that local hour.
Brief is late on a Slack-only setup
Brief is late on a Slack-only setup
The cron runs hourly on the hour UTC. If your local hour just ticked over you may wait up to 60 minutes for the next firing. Use Send test to Slack to verify the wiring; the daily brief will land at the next scheduled hour.
I want to remove Slack delivery
I want to remove Slack delivery
In Settings → Delivery → Slack delivery, untick the toggle and Save settings. Or delete the webhook URL field and save. The cron will stop posting to Slack on the next hourly tick.