Skip to content
hellocron.com

Alert Channels

HelloCron can notify you about monitor events (failures, missed runs, timeouts, recoveries) through several channels. You can configure any number of channels and choose which event types each channel receives.

All channels are managed in the panel under Settings -> Notification Channels. Every channel has a Test button that sends a test notification only to that channel, so you can verify the configuration before relying on it.

ChannelAvailability
Emailall plans
Telegramall plans
Discordall plans
Webhookplan with webhook alerting
Slackplan with Slack alerting
PagerDutyplan with PagerDuty alerting

Email

The simplest channel. Leave the address field empty to use your account email, or enter a different address (for example a team alias).

Telegram

Telegram alerts are free and instant, and connecting takes one click.

  1. In the panel, add a channel of type Telegram and click Connect Telegram.
  2. Scan the QR code with your phone (or click Open in Telegram) and press Start in the chat that opens. For a group, use Add to a group instead and pick the group.
  3. The form fills in by itself and shows “Connected”. Save the channel and click Test.

Alerts are delivered by the official HelloCron bot. No tokens, no chat IDs, nothing to look up.

Advanced: your own bot. If you prefer alerts to come from a bot you control, expand Advanced: use your own bot in the form: create a bot via @BotFather (/newbot, copy the token in the 123456789:AAF... format), get the chat ID from https://api.telegram.org/bot<TOKEN>/getUpdates (group IDs are negative), and enter both fields. A channel with its own token always sends through that bot. HelloCron stores the token for delivery only and never includes it in logs.

Discord

Discord alerts use channel webhooks, no bot required.

  1. In Discord, open the target channel settings: Integrations -> Webhooks -> New Webhook.
  2. Copy the webhook URL (it starts with https://discord.com/api/webhooks/).
  3. In the panel, add a channel of type Discord and paste the URL.
  4. Click Test. Alerts arrive as embeds, green for recoveries and red for failures.

Slack

  1. Create an incoming webhook in your Slack workspace.
  2. In the panel, add a channel of type Slack and paste the webhook URL (starts with https://hooks.slack.com/services/).
  3. Click Test.

PagerDuty

PagerDuty alerts use the Events API v2, so failures open incidents and recoveries resolve them automatically.

  1. In PagerDuty, create a service (or open an existing one) and add an Events API v2 integration: Service -> Integrations -> Add integration -> Events API v2.
  2. Copy the Integration Key (also called a routing key, 32 characters).
  3. In the panel, add a channel of type PagerDuty and paste the key.
  4. Click Test.

How events map:

  • Failed, Missed and Timeout trigger an incident with critical severity; Degraded and Still failing use warning.
  • Recovered resolves the incident opened for that monitor, using a shared deduplication key, so one flapping monitor never piles up incidents.
  • Every incident carries a link back to the monitor in the HelloCron panel.

Webhook

Sends a JSON payload to any HTTP endpoint, useful for integrating with your own systems, on-call tools, or automation.

{
"id": 123,
"type": "failed",
"monitor_name": "db-backup",
"message": "Monitor db-backup failed",
"metadata": {},
"occurred_at": "2026-07-24T18:00:00+00:00"
}
  • Method: POST (default) or GET (payload as query parameters).
  • Custom headers: one per line as Header-Name: value, for example an Authorization header for your endpoint.
  • Slack and Discord webhook URLs are rejected here on purpose: their APIs expect a different payload format. Use the dedicated Slack or Discord channel type instead.

Variables

The payload above is the default. When the receiving system expects its own format, put variables in the URL, the body, or both:

VariableValue
$MONITORMonitor name
$STATUSEvent type: failed, recovered, missed, timeout, degraded, still_failing
$MESSAGEAlert message
$IDNotification id
$TIMETime of the event, ISO 8601

A custom body is sent exactly as written, so the receiving system decides the format, not us:

{"text": "$MONITOR is $STATUS", "detail": "$MESSAGE"}

Variables also work in the URL, which is the only option for systems that accept alerts through query parameters and no request body:

https://example.com/hook?monitor=$MONITOR&status=$STATUS

Escaping is handled per context and you do not need to think about it: values in the URL are percent-encoded, values in the body are escaped as JSON string content. A monitor named nightly backup & sync will not break the query string, and an error message containing quotes will not break the JSON.

Leave the body empty to keep the default payload.

Notification groups

A notification group is a named set of channels. A monitor assigned to a group alerts only that group’s channels; monitors without a group keep the default behaviour and alert every enabled channel on the account.

Typical setup: a “backups” group pointing at a dedicated Telegram chat and a “www” group pointing at the on-call webhook. Because an account can have several channels of the same type, each group can target its own Telegram chat.

Manage groups in Settings -> Notification channels -> Manage groups: create a group, tick its channels, and attach monitors (ping and HTTP/SSL checks alike) on the same page. You can also pick a group when editing a single monitor.

Two details worth knowing:

  • A group with no channels silences its monitors outside the panel (the in-app bell still works). The panel warns about this.
  • Deleting a group never deletes anything else: its monitors fall back to all account channels.

In config-as-code manifests the group travels as notification_group (the group’s name). Omitting the key detaches the group; unknown names are rejected with the error code notification_group_invalid.

Event types

Each channel subscribes to a subset of event types:

EventMeaning
Failedthe job reported a failure
Missedan expected run did not arrive in time
Timeoutthe job started but did not complete in time
Degradedthe check is failing intermittently
Recoveredthe monitor is healthy again
Still failingperiodic reminder while a failure is ongoing