Someone @-mentioning the PushMetrics agent in a Slack channel

Agents work as well from Slack as they do from the web app. Your team can @-mention the agent in a connected channel and have a real conversation with it, right there in the thread, without ever opening PushMetrics.

This page covers both directions: agents posting to Slack from a web conversation, and your team talking to agents in Slack.


Talking to an agent in Slack

Once Slack is connected and a channel is mapped to an agent, anyone in the channel can @-mention the agent and start a conversation. The agent reads the message, does the work, and replies in the same thread.

The agent replying in a Slack thread with a chart attached

Behind the scenes:

  1. Someone @-mentions the agent in a connected channel, or DMs it (if DMs are turned on).
  2. PushMetrics opens a new conversation for that thread. The Slack user becomes the requester. If the agent is jumping into a thread that's already in progress, the recent messages get pulled in first so the agent has context.
  3. The agent does the work: runs queries, builds charts, drafts an answer.
  4. The reply lands in the same thread as a normal Slack message. Charts and CSVs ride along as Slack file uploads. The conversation also lives on the PushMetrics Requests page, so everything that happened in Slack shows up there too.

Conversations that started in Slack get a small Slack icon next to them in the Requests list. Click into one and you'll see the full thread on the PushMetrics side, including every tool call the agent made.

A Slack-originated conversation opened on the Requests page in PushMetrics, showing the original Slack message and the agent's full work

Two reasons that's useful: you get the full picture (queries, charts, intermediate steps that don't fit cleanly into a Slack thread), and you can keep going on the conversation from the web app instead of typing long follow-ups in Slack.


What the agent can do in Slack

Same toolbox in Slack as on the web. The only differences are how messages get formatted and a few Slack-specific behaviours.

Reply in the same thread
When the conversation came from Slack, the reply goes back to the same thread automatically. No need to tell the agent where to post.
Attach charts and CSVs
Charts upload as images, query results as CSV files. Both appear inline in the thread.
Format messages properly
Agent markdown gets translated to Slack's mrkdwn: bold, italic, code blocks, lists. Replies longer than ~3,900 characters are split across multiple posts so they don't run into Slack's 4,000-character cap.
Send a "still working" update
For longer jobs, the agent can post a short status message early on so the channel knows it's still working. The placeholder message updates in place once the real reply is ready, instead of cluttering the thread with two posts.
Ask a follow-up question
If the agent isn't sure what you meant, it'll post a Block Kit message with up to five buttons, or just ask in plain text. Tap the answer and the agent picks up where it left off.
React with an emoji
A ✅ reaction lands on the original message once the agent has finished and posted its reply. Lightweight signal that the work is done, easy to scan in a busy thread.
Stay quiet when needed
In a busy thread the agent can decide a message wasn't meant for it and just stay quiet. More on this below.

Sending Slack messages from a web conversation

Even if the conversation is happening in the PushMetrics web app, the agent can still post to Slack. The trick is that you share a Slack block with the agent.

A Slack block is a saved destination: which workspace to post to, the default channel, formatting rules. Once it's shared, the agent can:

  • Post formatted messages to a channel, or several.
  • Reply in a specific thread, including the one that started the conversation.
  • Attach CSVs (from query results) and chart images.
  • Tweak the wording while still routing through the same destination.

So you can ask for "today's pipeline summary, posted to #sales-updates" and that's what shows up. No separate workflow setup needed.


When several people are in the thread

Slack channels get noisy. Multiple humans might be chatting in the same thread the agent is in, with not all of it directed at the agent. The agent knows the difference and stays quiet when a message clearly wasn't meant for it.

When it does join a thread that's already in motion, it pulls the previous messages in first so it knows what people were talking about before it answers.

🤫
This is one of the more useful Slack-specific behaviours. Without it, an agent in a busy channel would chime in on every message it could see, which gets old very fast.

Things worth knowing

A few details that aren't obvious but matter:

  • One thread, one conversation. Replies in the same Slack thread always continue the same PushMetrics conversation. A new thread = a new conversation.
  • Slack users get auto-added as recipients. First time a Slack user @-mentions an agent, they're added to your recipient list automatically so the agent can email them, mention them, or DM them later.
  • DMs are off by default. An admin can switch them on per inbound channel. Same for @-mentions.
  • The agent only sees channels you've mapped. If a channel isn't connected, mentions in it are ignored.
  • Mentions get resolved. When you write <@U123> or #sales-updates, the agent sees real names, not raw Slack IDs.

What happens between Slack and PushMetrics

You don't need to know any of this to use Slack agents, but if you're curious what's happening behind the scenes when a Slack message lands, here's the short version.

1. Verify it's really from Slack
Every event is checked against the workspace's Slack signing secret using HMAC. The timestamp on the request must be within 5 minutes of now. Anything that fails either check is dropped. No replay attacks, no forged events.
2. Skip duplicates
Slack occasionally redelivers the same event. We keep a short-lived log of recent event IDs in Redis, so the agent runs once per message even if Slack sends it three times.
3. Find the right agent
Each channel can be mapped to a specific agent via a route. If there's no route for the channel, the inbound channel's default agent picks it up instead.
4. Read the thread first
If the agent is joining a thread that's already in progress, the prior messages get pulled in so it has context.
5. Open a conversation
A new conversation is created in PushMetrics with the Slack user as the requester and a link back to the original thread. If a conversation already exists for that thread, we reuse it instead of starting a new one.
6. Run and reply
The agent uses its tools like in any web conversation, then posts the answer back into the thread along with any chart images or CSVs.

Inbound Channels: routing Slack messages to the right agent

Slack mentions don't all need to land on the same agent. You might have a Sales Assistant, an Engineering Helper, and a generic FAQ bot all running in parallel, each handling different channels. Inbound Channels is the wiring.

Find them under Settings → AI Capabilities → Inbound Channels.

The Inbound Channels list in PushMetrics, showing one Slack channel mapped to a default agent with two routes

The list shows each connected Slack workspace with its default agent, how many routes it has, and whether it's active. The Active toggle pauses or resumes the whole inbound channel without nuking any of its routes.

What's in an inbound channel

Click into one and you'll see two halves: general settings (which Slack workspace it talks to, which agent runs by default) and access controls (who's allowed to message the bot, and whether DMs and @-mentions are accepted).

The detail page for an inbound channel, with general settings and access control sections
Name
An internal label that only you see. Something like "Engineering Slack" or "Customer Support".
Integration
Which Slack workspace integration this routes through. Set up once on the Slack Integration page.
Default Agent
The agent that handles any message that doesn't match a more specific route. Every inbound channel needs one.
Access Mode
All users: anyone in the Slack workspace can message the bot. Allowlist only: only the Slack users you explicitly add; everyone else gets a polite "you don't have permission" reply.
DM enabled
On: people can DM the bot. Off: DMs get a "DMs aren't enabled" reply.
@Mention enabled
On: the bot replies when @-mentioned in a channel. Off: it ignores the mention entirely.
Status
Active or Paused. Paused keeps the configuration intact but stops accepting messages until you flip it back.

Routes: send specific channels to specific agents

A route says "messages from this Slack channel go to that agent". Without routes, every message lands on the Default Agent. Add a route to send a particular channel somewhere else.

The Add Route dialog: pick a Slack channel and the agent that should handle it

When you click Add Route:

1
Pick the Slack channel. The dropdown lists every channel in the connected workspace; public and private both work.
2
Pick the agent that should handle messages from that channel. Leave blank to fall back to the channel's Default Agent.
3
Save. The route's live immediately. You can disable it later without deleting it.
🧭
How routing decides. When a Slack message arrives, we look for an enabled route matching the channel ID. Got one? That route's agent runs. None? The inbound channel's Default Agent runs. If access controls (allowlist, DMs, @-mentions) reject the message, it never reaches an agent in the first place.

Setting up Slack for an agent

1
Connect Slack to PushMetrics. One-time setup. See Slack Integration.
2
Create the Slack blocks the agent needs. A Slack block is a saved destination (workspace, default channel, formatting) that the agent can post through.
3
Share those Slack blocks with the agent. Without sharing, the agent can't see the destinations, let alone post to them.
4
Map Slack channels to your agent. Settings → AI Capabilities → Inbound Channels. Pick the channel, pick the agent. Without this step, @-mentions in Slack go nowhere.

Example: smart Slack alerts

Combine a skill with Slack and you've got a smart alert. Instead of a fixed cron that posts the same template every day, the agent can:

A daily anomaly check
Run a SQL query that hunts for KPIs over their threshold.
If something looks off, build a chart that explains why.
Post the chart to Slack with a short note on what changed and why it might matter.

That last step is the difference between an alert nobody acts on and one that actually moves someone. The agent describes what it's seeing in plain English ("revenue is down 14% week over week, mostly driven by a drop in trial conversions") instead of dumping a chart and leaving the team to puzzle it out.