• Use Cases
  • Pricing
  • Security
  • Docs
Sign InStart free

The outbound integration layer for SaaS products: emit once, then let Meshes handle routing, retries, fan-out, and delivery history.

© Copyright 2026 Meshes, Inc. All Rights Reserved.

About
  • About
  • Security
  • Blog
  • Contact
  • FAQ
Product
  • Pricing
  • Demo
  • Integrations
  • Guides
  • Changelog
  • Status
Compare
  • All comparisons
  • Build vs buy
  • vs Paragon
  • vs Merge
  • vs n8n
  • vs Zapier
  • vs Make
Use Cases
  • All use cases
  • Embedded CRM sync
  • Per-tenant Slack
  • HMAC webhooks
  • Multi-env workspaces
  • Payment failed
  • User signup fan-out
  • Churn prevention
  • Trial expired events
Developers
  • Documentation
  • Agents
  • Tools
  • API Reference
  • MCP Server
  • llms.txt
Legal
  • Terms of Service
  • Privacy Policy
  • Acceptable Use Policy
  • Cookie Policy

WorkflowEmbedded Slack setup

Let Customers Connect Their Own Slack from the Embed

Customers configure their own Slack integration from inside your product. Your app emits one alert event; each workspace delivers it into whichever Slack channel that customer picked — no per-tenant OAuth plumbing in your codebase.

Start freeView documentation

Event signal:alert.triggered| Destination:Slack| Use case:Per-Tenant Slack Alerts| Typical setup:~20 minutes

Workflow outcome

The product event is small. The downstream effect is not.

The workflow starts with one alert.triggered event from your product and ends with a formatted Slack message in whichever channel each customer picked when they connected Slack from the embedded workspace UI.

Each customer authorizes Slack once inside the embed, selects a channel, and saves a rule. Your backend emits the product event with that customer's publishable key; Meshes delivers it to the workspace's Slack connection.

Why teams care

This is the kind of workflow buyers judge fast

Customers usually want your product's important events in their own Slack, not yours. Meshes turns that ask into a dashboard toggle instead of another subsystem in your codebase.

Keeping Slack OAuth, channel selection, and message templates per workspace means credentials stay scoped to the customer — a revoked token in one tenant never affects another.

The same pattern covers your own dev, staging, and production workspaces: each environment authorizes its own Slack and posts to its own channel so test data stays out of real ops rooms.

This is the flagship embedded-iPaaS pattern. Once the embed is wired up, every future Slack-like integration (CRM, email, webhooks) uses the same per-workspace connection model.

What it depends on

The supporting pieces behind a credible rollout

These pages stay focused on the workflow outcome, but the setup still needs the right workspace, destination connection, and event path underneath.

Meshes workspace per tenant

Provision one Meshes workspace per customer so each tenant has its own publishable key and its own connection scope.

Read more

Embedded workspace UI

Mount the embedded Meshes pages inside your product so customers can manage their own connections and rules without leaving your app.

Read more

Session API on your backend

Mint a workspace-scoped session for the current customer on your backend before loading the embed.

Read more

Slack integration enabled

Confirm Slack is enabled for your organization in Meshes so it appears in the embedded Connections page.

Read more

The source event

The payload that creates the downstream business outcome

Alert payloads usually carry severity, resource, and threshold context so a human can triage quickly. Keep the fields customer-facing — the workspace owner is the one reading the Slack message, not your internal team.

Event payload

alert.triggered
{
  "alert_id": "alrt_tyrion_42",
  "account_id": "acc_casterly",
  "severity": "high",
  "resource": "api_latency_p95",
  "value": 1840,
  "threshold": 1000,
  "triggered_at": "2026-04-17T16:02:00Z"
}

What matters most

  • severity

    Lets the rule filter so only alerts above the customer's chosen severity reach Slack.

  • resource

    Identifies what crossed the threshold so the Slack message is immediately actionable.

  • value + threshold

    Gives the customer a clear picture of how far the signal is from normal without opening another dashboard.

  • account_id

    Helps the customer link the alert back to the record in their own tools when they want more context.

  • triggered_at

    Lets the customer correlate the Slack message with their own monitoring timeline.

Field mapping view

What the destination needs from the event

Event fieldDestination targetWhy it matters
severitySlack message headerEmphasize high-severity alerts so the channel audience triages correctly.
resourceSlack message bodyTell the reader which resource crossed the threshold in plain language.
value + thresholdContext blockShow the delta so the reader knows how far off baseline the signal is.
account_idReference blockGive the customer a stable handle for follow-up in their own systems.
triggered_atTimestampKeep the alert anchored in time so it is easy to cross-reference.

The destination connection

The destination matters, but the connection quality matters just as much

Your customers connect Slack from the embedded Meshes workspace UI — not from your app. Mint a workspace-scoped session on your backend, mount the embed, and let the customer authorize Slack and pick a channel. The connection lives in that workspace only.

  • On your backend, call the Meshes Session API with the workspace ID for the signed-in customer to mint a session token.
  • Mount the embedded Meshes UI in your product using the launch URL and pass the session token when the iframe is ready.
  • Route the customer to the Connections page, where they authorize the Slack app and choose the channel that should receive alerts.
  • The resulting Slack connection is scoped to that workspace — the customer rotates or revokes it themselves, without your team ever seeing the token.
Slack IntegrationMeshes quickstart

Where Meshes matters

The product stays simple while the destination still gets the right shape

Most teams do not need another destination. They need the destination to stay in sync without embedding its delivery quirks, retries, and mapping logic into the product code path.

Event

alert.triggered

Destination

Slack

Use case

Per-Tenant Slack Alerts

Docs

Slack Integration

Once the customer connects Slack inside their workspace, create a rule that binds alert.triggered to a Slack Send Message action. You can pre-seed a default rule when you provision a workspace so every customer starts from a working baseline they can then adjust.

  • Filter on severity at the rule level so the customer controls which alerts actually post to Slack.
  • Use a templated Slack message so the alert stays readable even as the payload grows — the customer sees business context, not raw JSON.
  • Let the customer adjust the channel, threshold, and template inside the embed. Your product does not redeploy when they change their mind.
  • If you offer multiple severity tiers, consider separate rules routing to different channels so the customer can triage cleanly.

A sample event

The product-side code stays close to the business event

This is the part teams like: the source event stays readable and product-shaped while Meshes owns the destination-facing complexity.

TypeScript example

One emit call stays close to the business event

import MeshesEventsClient from '@mesheshq/events';

// Use the workspace publishable key that belongs to this customer.
// Your backend looks it up for the signed-in tenant before emitting.
const events = new MeshesEventsClient(tenant.meshesPublishableKey);

await events.emit({
  event: 'alert.triggered',
  resource: 'alert',
  resource_id: 'alrt_tyrion_42',
  payload: {
    alert_id: 'alrt_tyrion_42',
    account_id: 'acc_casterly',
    severity: 'high',
    resource: 'api_latency_p95',
    value: 1840,
    threshold: 1000,
    triggered_at: '2026-04-17T16:02:00Z',
  },
});

Destination outcome

Ask the customer to use Send Test Event from inside the embedded workspace UI to fire a sample alert.triggered, or trigger a real event from your product using that tenant's publishable key. The Slack message should land in the customer's chosen channel within seconds.

Send EventsSDK docs

Operational visibility

Delivery history is where this stops feeling like glue code

The difference between a nice demo and a usable product workflow is whether you can see what happened when the destination is slow, misconfigured, or unavailable.

In Meshes

What a healthy workflow looks like

  • Confirm in the embedded Meshes UI that the alert.triggered event was received on the workspace.
  • Verify the Slack rule matched and the Send Message action shows a successful attempt in the workspace's delivery history.
  • Check the customer's Slack channel for the formatted message with the expected fields.
  • If the message did not land, use the failed attempt details in the embed to diagnose auth, channel access, or template issues — the customer can resolve most of these without filing a ticket.

Why teams buy Meshes

The workflow stays sellable after launch

  • Retries handle transient Slack errors per workspace, so a failure in one customer's tenant does not affect any other tenant.
  • Replay scoped to the workspace lets the customer recover a missed alert after they fix an auth or template issue.
  • Per-workspace delivery history gives the customer the audit trail they expect without exposing any other tenant's data.

What's next

Keep exploring the same workflow from different angles

Use Case

Per-Tenant Slack Alerts

See the broader embedded-iPaaS pattern this guide implements across multiple customers.

Open link

Docs

Embedded Workspaces

Understand how the embedded Meshes UI mounts inside your product.

Open link

Docs

Session API

Mint workspace-scoped sessions from your backend so each customer only sees their own workspace.

Open link

Docs

OAuth Connections in the Embed

See how customers authorize Slack and other OAuth connections without secrets touching your backend.

Open link

Integration

Slack Integration

Read the Slack connection, action, and message template details.

Open link

Guide

Configure a Customer-Provided Webhook With HMAC Signing

See the same embedded pattern applied to customer-registered webhook endpoints.

Open link

Next stepStart free or keep reading the docs

Let every customer connect their own Slack

Mount the embed, let each customer authorize their Slack workspace, and route product alerts into whichever channel they pick — with per-workspace credentials and delivery history.

Start freeView documentation