Documentation
Notifications
A channel is where SmartAlert sends messages. A channel only delivers. To mute, review or change a rule, use the web app.
On this page
| Channel | Plan | Status |
|---|---|---|
| Telegram | Free and up | Available |
| Slack | Pro | Available |
| Discord | Pro | Available |
| Webhook | Pro | Available |
Channels per project: 1 on Free, 10 on Pro, 20 on Business.
Telegram
- Open Channels (the "Where to send" screen), enter a channel name and press Add. SmartAlert gives you a link to the bot.
- Open the link and press Start in the bot. To use a group chat, add the bot to the group and run the command there.
- The bot replies in the chat with the project name. The channel is active.
The link is one-time and works for 15 minutes. An expired link and an unknown link give the same reply: generate a new link.
There is one SmartAlert bot for everyone. You do not create a bot or share a bot token.
A channel gets messages only while it is active. If the bot is blocked, removed from the group or the chat is deleted, the channel becomes "revoked" and the app asks you to connect it again. A short Telegram failure does not revoke the channel.
What a message contains
- severity, rule name, project and contract;
- the value that fired the rule and the limit: the threshold, the range, or the norm at that moment and the deviation from it;
- the time, and a link to the rule page.
A norm message reads like "15 Transfer events, norm 40, deviation −25". The sign is written out: a rule for silence fires below the norm.
When the rule returns to normal, a second message says so and shows how long it lasted.
There are no buttons in the message yet.
Delivery log
Every delivery attempt is recorded. Use the log to see why a message did not arrive.
| Status | Meaning |
|---|---|
| sent | The channel accepted the message |
| failed | All attempts failed; the reason is in the log |
| skipped | Not sent on purpose: cooldown, daily limit reached or channel not active |
For a temporary error, SmartAlert retries up to 5 times over up to 15 minutes. You can retry a failed delivery by hand from the log.
An undelivered message never hides the alert. It stays in the alert history.
Slack, Discord, PagerDuty, email, webhook
Channels for Pro and up. Slack, Discord and webhook connect by address: paste the URL, press Send test, and the channel turns on after the test is delivered. A wrong address shows at once, not at night.
Slack
- In Slack, create an Incoming Webhook for the channel you want (Slack instructions) and copy its URL.
- In SmartAlert, open Channels, press Add channel, choose Slack and paste the URL.
- Press Send test.
The message has a color bar by severity, a title, the fields "Value", "Threshold / norm" and "Contract", and an "Open" link. There are no action buttons.
Discord
- In the settings of a Discord channel, open Integrations, then Webhooks, create a webhook and copy its URL.
- In SmartAlert: Channels, Add channel, Discord, paste the URL.
- Press Send test.
The message is an embed with a color by severity and the same fields.
PagerDuty
A firing opens an incident in your PagerDuty service and resolves it on its own when the rule is back to normal. No function in between.
- In PagerDuty, open the service, the Integrations tab, add an Events API v2 integration and copy the Integration Key.
- In SmartAlert: Channels, Add channel, PagerDuty, paste the key. For an EU account (…eu.pagerduty.com), tick the box under the field.
- Press Send test: a test incident appears in the service and resolves at once. The channel turns on.
A message to an address you confirm: SmartAlert sends a link that is valid for 7 days. Until then no firings go to the address.
Emails per day: Pro 200, Business 1000, Enterprise 5000. Free has no email. The limit resets at 00:00 UTC; past it the email is skipped and other channels keep working.
Webhook
A JSON request to your HTTPS URL. Use it for your own service. PagerDuty and email are channels of their own, above. SmartAlert creates a secret and shows it once; every request is signed with it. The format, signature check and retries are in the Webhook article.
Address and secret
- After you save, the address in the channel list is shown in part, for example
hooks.slack.com/…/XXXX(the last 4 characters). The full address and the secret are stored encrypted and never appear in logs. - Change the address in the channel menu: Edit address. Check the new address with a test.
- The webhook secret is not shown again. Change secret issues a new one. It works at once and the old one stops at the same moment: update the secret on the receiving side right before or right after the change.
If a channel is disabled
If the receiver answers a real delivery with 404 or 410 (the webhook was deleted), the delivery is marked failed and the channel becomes "disabled". The project owner gets one email, "SmartAlert: channel {name} is disabled", with an "Edit address" link. Enter a new address and pass the test, and the channel turns on again. A failed test does not disable a channel: it stays inactive until a test passes.
Rules
- HTTPS only. Private, loopback and link-local addresses are refused. Redirects are not followed.
- Timeout: 5 seconds. A 2xx answer means delivered. Retries work as for Telegram, see the delivery log above.
- The delivery log shows the receiver's answer: the code and the first 200 characters of the body.
- Free supports Telegram only.
- If a plan is lowered, these channels stop delivering and show "not delivered: Pro required". Channels are kept, and delivery resumes on Pro.
Custom notification text
A rule can have its own message text instead of the standard one, for example for a protocol's public Telegram channel. One text per rule, for all its channels. Plain text, up to 2,000 characters. The language is the one you wrote it in.
Variables are filled into the text:
| Variable | What is filled in | Example |
|---|---|---|
{rule} | Rule name | Withdrawal above $50,000 |
{value} | The firing value with its unit | $52,296 |
{threshold} | The threshold with its unit, without the comparison sign | $50,000 |
{network} | Network | Ethereum |
{tx_url} | Link to the transaction in the explorer | https://etherscan.io/tx/0xab…12 |
{alert_url} | Link to the firing in SmartAlert | — |
{rule}{value}{threshold}{network}{tx_url}{alert_url}Numbers are formatted in the channel's language, as in the standard message. If a variable has no value, for example the firing has no transaction, it becomes an empty string, and a line left with only spaces and punctuation is dropped. Literal curly braces are {{ and }}. With a typo in a variable the rule is not saved: the form suggests the right name.
Next to the field is a preview: how the message arrives in Telegram, email and PagerDuty. Its values come from the rule's last firing, or, if it has not fired yet, from an example based on the rule's condition.
Where it works. The custom text goes out only when the rule fires. "Back to normal" and "No data" arrive in the standard form.
- Telegram, Slack, Discord — the whole text. Markup characters arrive as typed, links as plain addresses.
- Email — the first line becomes the subject, the whole text the body.
- PagerDuty — the first line in the incident title, the whole text in the details.
- Webhook — the
textfield, the rest of the payload unchanged.
A text longer than the channel limit (Telegram — 4,096 characters, Discord — 2,000) is cut with "…" at the end.
Plan. Pro and above. On Free the standard text is shown locked. After a downgrade the custom text keeps working; you can edit it only on Pro and remove it on any plan.
Weekly digest
Once a week, a summary of last week: how many alerts fired, how many were accepted, rejected or left unanswered, how many were escalated. Plus up to three noisy rules with the week's numbers ("6 of 7 rejected").
Set it up in Project settings → Weekly digest.
| Chat digest | ||
|---|---|---|
| Whose | Personal, each member turns their own on | One per project |
| Where | The member's email | Telegram, Slack, Discord, webhook — one or more project channels |
| When | Monday 08:00 UTC | Day of week and time UTC, in steps of 15 minutes |
| Threshold tip | No | Where threshold fitting found one, a suggested value |
| Plan | All plans | Pro and above |
The week is always last week: Monday 00:00 to Monday 00:00 UTC, whatever day you pick. A channel gets the digest once, not once per member. A webhook receives JSON with the digest.weekly event.
Quiet week. If nothing fired, one line is sent. The "Send one line when nothing fired" box turns that off, and a quiet week then sends nothing to the chat.
Test. "Send a test" sends last week's digest with real numbers to the picked channels, before you save. The title starts with "Test · ". Once a minute and up to 20 times a day.
Other projects. You can apply the same on/off, day, time and quiet week to other Pro-and-above projects where you are an owner or member. Channels are not copied: each project has its own.
No digest goes out if it is off, the project has no contracts, or none of the picked channels works. The reason is shown on the settings screen next to "Next digest".
Plan. The chat digest is Pro and above. On Free the Monday email stays; the chat settings are kept and work again after moving to Pro.
Found a mistake or didn’t find an answer? Write to us