Notification destinations are distinct from customer-facing delivery
channels (the ones under
/studio/channels). Channels are for offers and
creatives; notifications are for operators.Supported kinds
| Kind | Requires | Use for |
|---|---|---|
| Slack | Slack incoming webhook URL | Channel posts for ops alerts |
| Microsoft Teams | Teams incoming webhook URL | Adaptive card posts in a Teams channel |
| Outbound Webhook | URL, optional HMAC secret, optional headers | Any HTTPS endpoint — PagerDuty, Opsgenie, your own ingest |
| Ops Email (SES) | From address, list of recipient emails, optional reply-to | Broadcast alerts to an ops distribution list |
Add a destination
- Open Settings → Integrations and switch to the Notifications tab.
- Click Add Destination.
- Select a kind and fill in the kind-specific fields:
Slack
Slack
- In Slack, open Apps → Incoming Webhooks (or your workspace’s App Directory entry for incoming webhooks).
- Create a new webhook URL; choose the destination channel.
- Copy the webhook URL (starts with
https://hooks.slack.com/services/...). - In KaireonAI, paste it into the Webhook URL field.
- Name the destination (e.g.,
#ops-alerts). - Save and click Test — a test message should appear in Slack.
Microsoft Teams
Microsoft Teams
- In Teams, open the target channel → ⋯ → Connectors → Incoming Webhook.
- Create a new webhook; copy the URL (
https://outlook.office.com/webhook/...). - Paste into the Webhook URL field in KaireonAI and save.
- Click Test — a color-banded adaptive card should appear in the channel.
Outbound Webhook
Outbound Webhook
Use this for any HTTPS receiver: PagerDuty events, Opsgenie ingest, your own
observability service, an internal alert-bus.
- URL — HTTPS endpoint. Validated against private IP ranges and DNS rebinding before every POST.
- Shared Secret (optional) — when set, each POST includes an
X-Kaireon-Signature: sha256=<hex>header, HMAC-SHA256 over the exact body. - Headers (optional) — Additional headers to send (e.g.,
Authorization: Bearer ...). Header names are restricted toA–Z,0–9,_,-.
Ops Email (SES)
Ops Email (SES)
Reuses the platform’s existing Amazon SES credentials (configured under
Email in the same Integrations page) — you don’t enter credentials
again here.
- From Email — the sender address for ops notifications (must be SES-verified).
- Recipients — one or more addresses. Every fire sends to the full list.
- Reply-To (optional) — override the reply-to from the email integration.
Payload format
Every adapter receives the same logicalNotification payload and renders it into its native format:
- Slack renders a
header+section+fields+contextblock array, with a severity emoji in the header. - Teams posts a
MessageCardwith athemeColorkeyed by severity and fields asfacts. - Webhook POSTs
{ id, timestamp, notification }as JSON. - Ops Email renders an HTML + plain-text body with a colored severity band.
Test a destination
The Test button on each destination invokes the adapter’stestConnection() method, which sends a harmless probe:
- Slack/Teams: posts a “Connection test” message in-channel.
- Webhook: POSTs a test payload; any non-2xx response fails the test.
- Ops Email: sends a test email to only the first recipient.
POST /api/v1/notifications/providers/:id/test — see the
Notifications API reference.
Testing without EventBridge
Notifications do not depend on a cron being wired. You can fire ad-hoc notifications through three unconditional paths:- Test button in
/settings/integrations → Notifications— fires the adapter’stestConnection()probe. This is the fastest smoke test and works the moment a destination is saved. - Ad-hoc send API —
POST /api/v1/notifications/sendwith one or moreproviderIdsand anotificationpayload. Admin-only; tenant-scoped. Useful for CI smoke tests, custom automations, and manual paging. Full reference at the Notifications API reference. - Manual alert evaluation — when you want to exercise the full
alert-rule path without EventBridge, hit
/api/cron/tickdirectly with a validCRON_TOKEN. The tick fans out to every enabled rule and dispatches notifications through the same providers. See Alert Rules → Triggering evaluation manually.
Credential security
- Every sensitive field (webhook URL, HMAC secret, headers) is encrypted with
AES-256-GCM before persistence under the
PlatformSettingvault. - The GET list endpoint returns redacted configs — secret-like fields are
replaced with
••••••••. Operators re-enter secrets on edit. - Outbound webhook URLs are re-validated on every send via DNS resolution checks to prevent DNS rebinding attacks (private/reserved IP ranges are rejected).
Enable / disable and delete
- Each destination has an enable toggle. Disabled destinations are skipped when an alert rule fans out notifications.
- Deleting a destination does not delete the alert rules that reference it —
rule fire attempts will log a “Provider not found” entry and the rule’s
status will be
delivery_failed.