Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

notifications

Named channels that notify steps send into. rflow ships its own senders — no external webhook relays needed.

notifications:
  channels:
    ops:
      telegram:
        bot_token: ${TG_BOT_TOKEN}
        chat_id: ${TG_CHAT_ID}
    eng:
      slack:
        webhook_url: ${SLACK_WEBHOOK}
    alerts:
      discord:
        webhook_url: ${DISCORD_WEBHOOK}
    pager:
      pagerduty:
        routing_key: ${PD_ROUTING_KEY}
    oncall:
      opsgenie:
        api_key: ${OPSGENIE_API_KEY}
        eu: true
    sms:
      twilio:
        account_sid: ${TWILIO_ACCOUNT_SID}
        auth_token: ${TWILIO_AUTH_TOKEN}
        from: "+15550001111"
        to: "+15552223333"

Each channel configures exactly one sender (validation error otherwise).

telegram

FieldDescription
bot_token✅ Bot token from @BotFather
chat_id✅ Target chat/group id

slack

FieldDescription
webhook_url✅ An incoming webhook url

discord

FieldDescription
webhook_url✅ A channel webhook url

pagerduty

Sends through the Events API v2 (events.pagerduty.com/v2/enqueue, event_action: trigger).

FieldDescription
routing_key✅ The integration (routing) key of an Events API v2 integration

Severity follows what fired the notification: notify: steps send error, circuit breaker trips and liveness/stall breaches send critical, and approval requests send info.

opsgenie

Creates alerts via the Alert API (Authorization: GenieKey <api_key>).

FieldDescription
api_key✅ An API integration key
euUse the EU host api.eu.opsgenie.com (default false = api.opsgenie.com)

Priority follows the same taxonomy as pagerduty severity: circuit trips and liveness/stall breaches are P1, notify: steps P3, approval requests P5.

twilio

SMS through the Messages API (basic auth account_sid:auth_token).

FieldDescription
account_sid✅ Account SID
auth_token✅ Auth token
from✅ The sending Twilio number (E.164, e.g. +15550001111)
to✅ The destination number (E.164)

Using channels

steps:
  - id: alert
    notify:
      channel: ops
      message: "large transfer: ${{ format_units(trigger.args.value, 6) }} USDC"

Messages are full templates — any expression works, and values under secrets: are redacted if they ever end up in one.