# Example: route alerts to Slack

This example shows how to route alert notifications to a Slack workspace using Notification Center.\
The workflow uses a connector, a preset, and a router to send alerts to specific Slack channels based on alert priority.

## Workflow overview

1. Create a Slack connector: defines where notifications are sent
1. Create a preset: defines how messages appear in Slack
1. Create a router and routing rules: defines which alerts go to Slack
1. Label alerts: ensures alerts match the correct router

## Create a Slack connector

1. Go to **Integrations**, then **Notification Center**, then **Connectors**.

1. Select **+ New connector**.

1. Select **Slack** as the destination type.

1. In **Details**, enter a connector name and optional description.

1. In **Configuration**:

   - **Integration:** Select the Slack integration. Create one if none exists.
   - **Channel:** Enter a default Slack channel (for example, `#infra-alerts`).

1. (Optional) Select **Advanced**, then **Dynamic fields**, define a dynamic channel.

   **Example:**

   ```text
   {% if alert.highestPriority == "P1" %}
   critical-alerts
   {% else %}
   general-alerts
   {% endif %}
   ```

1. Select **Send test notification** to confirm delivery.

1. Select **Create connector**.

## Create a preset (optional)

If you do not need message customization, use the system preset and skip this section.

To create a custom preset:

1. Go to **Integrations**, then **Notification Center**, then **Presets**.

1. Open the **Alerts** tab and select **Slack**.

1. Select **+ New alert preset**.

1. Customize message fields:

   | Field           | Example                                             |
   | --------------- | --------------------------------------------------- |
   | **Title**       | `[{{ alert.highestPriority }}] {{ alertDef.name }}` |
   | **Description** | `{{ alertDef.description }}`                        |
   | **Footer**      | `Triggered at {{ alert.timestamp }}`                |

1. Use the **Preview** panel to review output.

1. (Optional) Use **Send test notification** to validate with your Slack connector.

1. Select **Create preset**.

## Create a router and routing rule

1. Go to **Integrations**, then **Notification Center**, then **Routers**.

1. Select **+ New router**.

1. In **Details**, enter a name such as `Production Alerts`.

1. In **Routing labels**, add labels that this router matches:

   ```text
   group:sre
   environment:prod
   ```

1. Matching alerts appear in the **Matching entities** panel.

1. After creating the router, add a routing rule:

   - **Condition**

   ```text
   alert.highestPriority == "P1"
   ```

   - **Destination**
     - Connector: `Slack – Prod`
     - Preset: `Slack Critical Alerts`
   - (Optional) In **Fallback**, select a connector for unmatched alerts.
   - Select **Create router**.

## Add labels to alerts

1. Go to **Alerts**, then **Create alert**.

1. In **Labels**, add routing labels that match your router:

   ```text
   routing.team:sre
   routing.environment:prod
   ```

1. In **Notifications**, select **Notification Center**.

1. Save the alert.

## Example result

A triggered alert produces a Slack message similar to:

**Title:**\
`[P1] CPU Usage High – Production`

**Body:**\
`CPU usage for host server-1 exceeded 95%.`

**Footer:**\
`Triggered at 2025-11-11 10:04 UTC`

## Next steps

Route critical alerts to PagerDuty using connectors, presets, and routing rules in [Route p1 alerts to PagerDuty](https://coralogix.com/docs/user-guides/notification-center/user-scenarios/alerts-to-pagerduty/index.md).
