Alerts and notifications
xNode360 tells you when a node goes down or an agent stops answering: email, webhook, Slack and Telegram, with the events you choose.
What it is
When a service stops answering, xNode360 opens a single alert on the cause and tells you who is down as a consequence and who is only affected, with the distance in hops. When it comes back, it closes the alert and tells you. You don’t need to keep the map open.
The alert is raised on the root cause: if the database goes down and takes the API and the site with it, you get one alert on the database listing what depends on it, not three separate ones.
When it fires
| Event | When | What you get |
|---|---|---|
| Node down | A node goes offline and stays so for about a minute | “🔴 NAME is down”, with the nodes down as a consequence and the affected ones |
| Agent unreachable | An agent is silent for about a minute | “🟠 Agent NAME unreachable”: its nodes become unknown, not offline |
| Everything back up | The node comes back online, or the agent reconnects | “✅ NAME is back up” |
The one-minute confirmation avoids false alarms: a blip that recovers on its own triggers nothing.
The total delay depends on who runs the check: an agent notices a drop within seconds, a cloud check on its next cycle (every 10 minutes on the free plan, every minute on pro).
An unreachable agent does not mean your services are down: we simply aren’t checking them. That’s why its nodes become unknown and the alert is separate, in orange.
Where to find it
Open the map switcher (the map name, top left) and press Notifications & channels…. The button sits under the “Alert webhook” field and isn’t shown on the demo map, which is read-only. Settings apply to each map. While an alert is open you also see a pill at the top of the map, red for a node and orange for an agent, with the name and the number of nodes down and affected.
How to set it up
- Open Notifications & channels… from the map switcher.
- Under Which events choose what to receive: a node goes down, an agent is unreachable, everything is back up.
- Under Where to send alerts turn on email to the members and paste your Slack and/or Telegram details.
- Press Save. It applies at once, to every new alert.
If a field is invalid the panel marks it in red and the Save button stays off.
The channels
Sent to the map’s members (up to 5), only when an alert opens and when it closes, never to free-form addresses. Turn it off with the “Email to the map’s members” box.
Slack
- Go to
api.slack.com/apps, press Create New App → From scratch, give it a name and pick the workspace. - No permissions (scopes) are needed: open Incoming Webhooks and turn it on.
- Press Add New Webhook to Workspace, choose the channel and confirm.
- Copy the
https://hooks.slack.com/services/…URL and paste it into the panel’s Slack field.
Only hooks.slack.com/services/… URLs are accepted, up to 200 characters.
Telegram
- In Telegram open @BotFather, type
/newbotand choose a name and a username (it must end inbot): you get a token like123456789:AA…. - Open your bot and send it
/start. For a group, add the bot to the group and write a message. - Find the chat id by opening
https://api.telegram.org/bot<TOKEN>/getUpdatesin your browser, with your token, and looking for"chat":{"id":…. For a group it’s a negative number (-100…); for a public channel you can use@channelname, with the bot as an administrator. - Paste the token and chat id into the panel: both must be filled in.
The bot token is visible to anyone with access to the map. Don’t paste it in chats or shared documents; if you think it leaked, revoke it with /revoke on @BotFather.
Generic webhook
The Alert webhook field in the map switcher receives a JSON POST for every event, https only. The body has a type field and the node or agent data.
| type | When |
|---|---|
outage_opened | Alert opened. |
outage_updated | The impact of an already open alert changes (webhook only). |
outage_resolved | Alert closed, the node is back up. |
agent_unreachable | An agent isn’t answering. |
agent_recovered | The agent is reachable again. |
{ "type": "outage_opened", "workspace": "…", "node": { "id": "…", "label": "database" },
"down": [ { "id": "…", "label": "api", "hop": 1 } ],
"affected": [ { "id": "…", "label": "site", "hop": 2 } ] }
Preferences per event
| Box | Events included |
|---|---|
| A node goes down | Node down and impact changes |
| An agent is unreachable | Agent unreachable |
| Everything is back up | Node back up and agent reconnected |
The filter applies to every channel, the generic webhook included. With no settings everything is on, as before.
Slack and Telegram receive opening, closing and unreachable agents; impact updates go only to the generic webhook, to keep the noise down.
Limits and security
- Storm cap — at most 10 notifications every 10 minutes per map. The rest are skipped and the first message after the pause says how many.
- Retries — if Slack, Telegram or the webhook answer with a temporary error (5xx, 429, network), xNode360 retries up to 3 times. A failing channel doesn’t block the others.
- Long messages — very long lists are truncated (Telegram accepts at most 4096 characters).
- Secrets — tokens and URLs never end up in logs. Slack and Telegram only go to their own hosts (
hooks.slack.com,api.telegram.org); the generic webhook blocks private and internal addresses. - Effective at once — settings are re-read on every send: if you revoke a token, it stops being used immediately.
- Who can change them — any member of the map.
If nothing arrives
- Is the channel saved on the right map? Reopening the panel shows the saved values.
- Is the event on under “Which events”?
- Has at least a minute passed? A fault that recovers sooner triggers nothing.
- Does the node have a real check? A
trackedor manual node doesn’t change state on its own, so it raises no alert. - Is the agent paused? Its nodes are
unknown, which isn’t a failure. - Telegram: did you send
/startto the bot, or add it to the chat? Is a group’s chat id negative? - Slack: is the URL an Incoming Webhook one, and does the channel still exist?
There is no “send a test” button yet. To try a channel, create a node with a TCP check against a port where nothing listens, wait about a minute for the alert, then delete it.