Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.devhelm.io/llms.txt

Use this file to discover all available pages before exploring further.

The alertChannels section of devhelm.yml defines where incident notifications are sent. Each channel has a name and a config block whose channelType discriminator selects the integration.

Common fields

FieldTypeRequiredDescription
namestringYesUnique channel name (used to reference from monitors and policies)
configobjectYesType-specific configuration. Must include channelType.
The schema is .strict() — any extra top-level keys (like a bare type:) are rejected at validate / plan / deploy. Always nest the integration kind inside config.channelType.

Channel types

Slack

alertChannels:
  - name: Slack Alerts
    config:
      channelType: slack
      webhookUrl: ${SLACK_WEBHOOK_URL}
      mentionText: "@channel"
Config fieldRequiredDescription
channelTypeYesAlways slack
webhookUrlYesSlack incoming webhook URL
mentionTextText to mention (e.g., @channel, @here, <@U123>)

PagerDuty

alertChannels:
  - name: PagerDuty On-Call
    config:
      channelType: pagerduty
      routingKey: ${PAGERDUTY_ROUTING_KEY}
      severityOverride: critical
Config fieldRequiredDescription
channelTypeYesAlways pagerduty
routingKeyYesPagerDuty Events API v2 routing key
severityOverrideOverride severity sent to PagerDuty

OpsGenie

alertChannels:
  - name: OpsGenie
    config:
      channelType: opsgenie
      apiKey: ${OPSGENIE_API_KEY}
      region: us
Config fieldRequiredDescription
channelTypeYesAlways opsgenie
apiKeyYesOpsGenie API integration key
regionOpsGenie region: us or eu

Discord

alertChannels:
  - name: Discord Alerts
    config:
      channelType: discord
      webhookUrl: ${DISCORD_WEBHOOK_URL}
      mentionRoleId: "123456789"
Config fieldRequiredDescription
channelTypeYesAlways discord
webhookUrlYesDiscord webhook URL
mentionRoleIdDiscord role ID to mention

Microsoft Teams

alertChannels:
  - name: Teams Channel
    config:
      channelType: teams
      webhookUrl: ${TEAMS_WEBHOOK_URL}
Config fieldRequiredDescription
channelTypeYesAlways teams
webhookUrlYesTeams incoming webhook URL

Email

alertChannels:
  - name: Ops Email
    config:
      channelType: email
      recipients:
        - ops@example.com
        - oncall@example.com
Config fieldRequiredDescription
channelTypeYesAlways email
recipientsYesList of email addresses (non-empty)

Webhook

alertChannels:
  - name: Custom Webhook
    config:
      channelType: webhook
      url: https://webhook.site/00000000-0000-0000-0000-000000000000
      signingSecret: ${WEBHOOK_SECRET}
      customHeaders:
        X-Source: devhelm
Config fieldRequiredDescription
channelTypeYesAlways webhook
urlYesHTTP endpoint URL
signingSecretHMAC signing secret for payload verification
customHeadersCustom headers sent with each request

Referencing channels

Monitors and notification policies reference channels by name:
monitors:
  - name: API Health
    type: HTTP
    config:
      url: https://api.example.com/health
    alertChannels: [Slack Alerts, PagerDuty On-Call]

notificationPolicies:
  - name: Critical Alerts
    escalation:
      steps:
        - channels: [Slack Alerts]
        - channels: [PagerDuty On-Call]
          delayMinutes: 5

Using environment variables

Store sensitive values (webhook URLs, API keys, routing keys) as environment variables and reference them with ${VAR} syntax. Set them in your shell or CI secrets — they’re resolved at deploy time.

Next steps

Notification policies

Route incidents through escalation chains.

Integrations

Setup guides for each channel type.