Skip to content

Notification Channels

To receive notifications from KloudMate, you need to set up notification channels — the communication platforms where alerts and incident updates are sent.

KloudMate supports the following notification channels:

  • Email
  • Slack
  • SNS
  • MS Teams
  • Webhook
  • Jira
  • KloudMate Incidents — bridges alerts and synthetic checks into Incident Management

In the case of multiple workspaces and AWS accounts, you must set up notifications for each account in their respective Settings.

Navigate to Settings > Notification Channels. The screen displays all existing channels with their name, type, and address.

image

  1. Click the Create button at the top-right corner.
  2. Select the desired channel type from the dropdown.

image

Once created, the channel appears in the list. You can Edit or Delete any channel using the more options (⋯) icon.

image

Below are the configuration steps for each specific channel type:

  1. Select Email from the dropdown menu.
  2. Enter a Name for the channel (e.g., demo) and your email address in the Address field.
  3. Click Submit.

image

KloudMate uses a single unified Slack app for both notifications and IM ChatOps. Installing it once gives you threaded notifications, message attribution, and the ability to acknowledge or resolve incidents directly from Slack.

  1. Select Slack from the dropdown menu, then click the Add to Slack button.
  2. You will be redirected to Slack’s OAuth flow. Pick the channel KloudMate should post into and approve the bot scopes.
  3. On approval, KloudMate creates the channel row and the Slack integration is also visible under Incidents → Settings → ChatOps.

Slack channel form

  1. Select MS Teams from the dropdown menu.
  2. Create an incoming webhook URL from Microsoft Teams by going to Channel > Connectors > Incoming Webhooks in the Microsoft Teams Apps.
  3. Enter the Team Channel Name and the Webhook Address in their respective fields.
  4. Click Submit.

image

Optionally, you can download the KloudMate logo from the link provided on the screen to update the webhook’s image in MS Teams.

  1. Select SNS from the dropdown menu.
  2. Copy the KloudMate SNS Access Policy displayed on the screen. Navigate to your AWS Console and paste the policy into your SNS topic. Update the placeholders in the policy with the correct values.
  3. Return to KloudMate, enter a Name and your Topic ARN in their respective fields.
  4. Click Submit.

image

  1. Select Webhook from the dropdown menu.
  2. Enter a Webhook Name and the Webhook URL in their respective fields.
  3. Under Secret, provide a secure key. This secret is used to generate an HMAC-SHA256 signature for each webhook payload, allowing you to verify that the request came from KloudMate.
  4. Click Submit.

image

When KloudMate sends a webhook to your configured URL, it includes an X-KM-Signature HTTP header. This signature is an HMAC-SHA256 hash generated using the payload body and the Secret you provided during configuration.

To ensure the webhook is genuinely from KloudMate, you should compute the hash on your server and compare it with the X-KM-Signature header.

Here are examples of how to perform this validation in common programming languages:

const crypto = require('crypto');

// Ensure you have access to the raw request body.
// For Express, you might use express.raw({ type: 'application/json' }) 
function verifySignature(req) {
  const signatureHeader = req.headers['x-km-signature'];
  const secret = 'YOUR_WEBHOOK_SECRET';
  
  // Create HMAC-SHA256 hash of the raw JSON body
  const expectedSignature = crypto
    .createHmac('sha256', secret)
    .update(req.rawBody) // Pass the raw JSON string here
    .digest('hex');

  return signatureHeader === expectedSignature;
}

Every webhook is delivered as a single POST with a JSON body and Content-Type: application/json. The body you receive is exactly the bytes that were HMAC-signed (see above), so verify the signature against the raw body before parsing.

The payload shape depends on which KloudMate feature triggered the notification:

  • Alert group notifications carry a top-level event field (opened, appended, resolved, or rca_completed) that identifies the lifecycle stage.
  • The other payloads have no event field — identify them by their distinctive top-level keys: slo_name (SLO burn rate), monitor_id (synthetic monitor), serviceName (new issue), and investigationId (AI investigation).

The tabs below show one representative example of each payload, with notes on how the variants differ.

Sent when an alert group opens, gains new alerts, resolves, or completes a root-cause analysis. Each rule reports its full instances array — no sampling, every instance in the notification is included, each tagged with its state — alongside per-state counts. Each rule also exposes commonLabels and commonAnnotations — the label and annotation values identical across all of that rule’s instances — so receivers and the chat/email templates can show them once instead of on every row; the individual instances[] still carry their own complete labels and annotations. Both totals and each rule’s counts are keyed by the user-facing state (Firing, Resolved, No Data, Error, Normal). group.mode is "group" for a correlated alert group and "standalone" for a single-alert notification (one per alarm rule). Chat and email channels cap how many instance rows they render; the webhook always carries the complete list.

{
  "event": "opened",
  "emitted_at": "2026-05-23T10:00:05.123Z",
  "group": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "title": "High CPU on payments-api",
    "state": "Open",
    "severity": "sev1",
    "severity_escalated": false,
    "opened_at": "2026-05-23T10:00:00.000Z",
    "resolved_at": null,
    "labels": { "service": "payments-api", "env": "production" },
    "annotations": { "runbook": "https://wiki.example.com/runbooks/cpu" },
    "routing_rule": { "id": "rr-1", "name": "Production critical" },
    "workspace_id": "ws-1",
    "signal_count": 2,
    "url": "https://app.kloudmate.com/ws-1/alerts/groups/550e8400-e29b-41d4-a716-446655440000",
    "mode": "group"
  },
  "totals": { "Firing": 2 },
  "rules": [
    {
      "alarm_id": "alarm-cpu-1",
      "alarm_name": "CPU > 90%",
      "commonLabels": { "service": "payments-api", "env": "production" },
      "commonAnnotations": { "runbook": "https://wiki.example.com/runbooks/cpu" },
      "counts": { "Firing": 2 },
      "instances": [
        {
          "source_event_id": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
          "state": "Firing",
          "labels": { "service": "payments-api", "env": "production", "host": "ip-10-0-1-23" },
          "annotations": {
            "runbook": "https://wiki.example.com/runbooks/cpu",
            "summary": "CPU at 96% on ip-10-0-1-23"
          },
          "received_at": "2026-05-23T10:00:00.000Z"
        },
        {
          "source_event_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
          "state": "Firing",
          "labels": { "service": "payments-api", "env": "production", "host": "ip-10-0-1-24" },
          "annotations": {
            "runbook": "https://wiki.example.com/runbooks/cpu",
            "summary": "CPU at 93% on ip-10-0-1-24"
          },
          "received_at": "2026-05-23T10:00:02.000Z"
        }
      ],
      "dashboardUrl": "https://app.kloudmate.com/ws-1/dashboards/db-1?panel=4"
    }
  ],
  "rca": null
}

Variants by event:

  • appended — new or still-firing alerts on an already-open group; each instance carries its current state, and counts/totals tally them by state.
  • resolvedgroup.state becomes "Resolved", group.resolved_at is set, and every instance reports "state": "Resolved", so counts/totals move under Resolved.
  • rca_completed — the rca object is populated instead of null:
"rca": {
  "investigation_id": "inv-9",
  "summary": "Deployment v1.42 introduced a regression in the payments service.",
  "url": "https://app.kloudmate.com/ws-1/assistant/investigations/inv-9"
}

KloudMate Incidents is the channel type that bridges into Incident Management. When an alert routes through a KloudMate Incidents channel, KloudMate opens an incident on the linked IM service automatically — no separate webhook plumbing required.

Create KloudMate Incidents channel

  1. Select KloudMate Incidents from the dropdown menu.
  2. Pick the IM service you want to bridge into from the Linked IM service dropdown. If you don’t have any services yet, KloudMate prompts you to create one first.
  3. Click Submit.

KloudMate automatically creates two rows:

  • A KloudMate Alert integration under the linked service.
  • A notification channel pointing at the integration’s signed loop URL.

KloudMate Incidents channels are HMAC-signed by default — the signing secret is generated and stored automatically; you don’t need to copy or paste it. The signing secret and linked service are fixed at creation; to change either, delete the channel and create a new one.

To wire it into the alert flow, add the channel as a destination on a Routing Rule.

  1. Select Jira from the dropdown menu and click the Connect Jira button.

image

  1. You will be redirected to the Jira authorization page. Click Accept to authorize the integration between KloudMate and your Atlassian account.

image

  1. You will be redirected back to the Jira Notification Channel configuration page in KloudMate.

image

Enter a Channel Name and select the following:

  • Site: your Jira site
  • Project: the Jira project to link
  • Issue Type: the type of issue to create (e.g., Task)
  • Status for Open state: the Jira status that corresponds to an open ticket (e.g., To Do, In Progress)
  • Status for Closed state: the Jira status that corresponds to a closed ticket (e.g., Done)
  1. Click Submit to complete the integration.

The Jira integration is one-way. Status changes in KloudMate are reflected in Jira, but changes made in Jira are not reflected in KloudMate.

Alert details in Jira

KloudMateJira
Alert nameTicket title
KloudMate account nameTicket title
Alert descriptionTicket description
Alert valueTicket description
Regression alertsTicket comment

Issues details in Jira

KloudMateJira
Issue’s service nameTicket title
KloudMate account nameTicket title
Regression IssuesTicket title
Issue nameTicket description
Issue commentsTicket comments

You can create a Jira ticket directly from an issue or alert details page to raise individual tickets that are not bound to a routing rule.

Prerequisite: A Jira notification channel must already be configured.

  1. Navigate to the Issue or Alert details page.
  2. Click the Create in Jira button. A dialog opens showing all Jira channels integrated with your KloudMate account, along with any previously linked Jira tickets for that issue.

image image

  1. Under Jira Channels, select the checkbox(es) for the channel(s) you want to raise a ticket in.
  2. Click Create Ticket.
  1. On the issue or alert details page, click the settings icon next to the Create in Jira button to open the Jira Tickets panel.
  2. The panel displays all Jira tickets currently linked to the issue, showing the Ticket ID, Site, Project, and Issue Type.
  3. Click the unlink icon next to the ticket you want to remove to unlink it from KloudMate.

image