Notifications
SETI AI's notification pipeline makes sure you hear about what matters — even when you're not watching the dashboard. A low-voltage event, an overheating pack, a finished report, an agent escalation: each can reach you by email, Discord (text and voice), and Slack, filtered by severity and protected against spam.
You decide which channels are on and what thresholds trigger an alert; the system and your AI agents handle the rest.
Related pages: Command Center · AI Agents · Agent Tools
Channels
Email (SMTP)
Sends through your own mail server. Each notification goes out as a styled message with both a plain-text and an HTML version, color-coded by severity (red for critical, amber for warning, blue for info), with the SETI AI / SETI Power Lab footer and a timestamp. You can list multiple recipients. TLS/STARTTLS is supported, and the subject line is tagged with the severity (e.g. [SETI AI CRITICAL] Low battery voltage).
Discord
The most flexible channel, with two delivery modes and voice:
- Webhook mode — the simplest setup: paste a channel webhook URL and messages post as rich embeds.
- Bot mode — connect a bot token and channel ID for more control (and access to voice features).
- Text-to-speech (TTS) — the agents can post a TTS message that Discord reads aloud to anyone in the voice channel, using Discord's built-in speech (no extra engine required).
- Voice / S2S — the agents can queue a message for the speech-to-speech voice engine to speak in a Discord voice channel — ideal for a lab or shop floor where nobody is at a screen, and for accessibility.
Discord sends are automatically rate-limited (a minimum gap between messages, and automatic back-off if Discord asks the system to slow down), so a burst of alerts never gets your webhook throttled or blocked.
Slack
Connect an incoming-webhook URL and alerts post as cleanly formatted Slack blocks — a severity header, the alert body, and a context line with the lab name and timestamp.
Severity levels
Every notification carries one of three severity levels, which control both its appearance and whether it's sent at all:
| Severity | Meaning | Default behavior |
|---|---|---|
| Critical | Immediate safety or operational risk | Sent by default |
| Warning | Needs attention, not an emergency | Sent by default |
| Info | Routine status / FYI | Not sent by default (opt-in) |
You can toggle each level on or off independently, so you can, for example, receive critical and warning alerts but suppress routine info chatter.
Alert thresholds — automatic battery monitoring
The system continuously checks live battery telemetry from your energy hardware (polled roughly every 60 seconds) against thresholds you set, and fires a notification the moment a limit is breached. Out of the box:
| Condition | Default threshold | Severity |
|---|---|---|
| Low battery voltage | 48.2 V | Critical |
| High battery voltage | 58.8 V | Warning |
| Low state of charge (SoC) | 20% | Critical |
| High battery temperature | 45°C | Critical |
Each alert includes the relevant context — voltage, SoC, state, current, time-to-go — so the message tells you not just that something happened but what the system looked like when it did. These thresholds, plus your SoC floor/ceiling and electricity rates, are all editable in Setup.
Anti-spam: cooldown
To prevent a flapping sensor from burying you in alerts, identical notifications are held back by a cooldown (5 minutes by default, configurable). The same alert won't re-send during its cooldown window — but a genuinely new or different alert always gets through. Test notifications can bypass the cooldown so you can verify your setup instantly.
Notification history
Every send is logged — channel, subject, severity, success or failure, and timestamp — and kept in a searchable history. You can review exactly what was sent and when, and confirm delivery, from the dashboard. Your agents can pull this too (see get_notification_history in Agent Tools), so you can simply ask "did the critical alert go out last night?"
Configuring channels in Setup
All notification configuration lives in the Setup screen (a dense Seti Stack widget), so it's one place for everything:
- Email — enable, SMTP host/port, username/password, TLS, from-address, and comma-separated recipient list.
- Discord — enable, webhook URL or bot token + channel ID, voice channel ID, bot-vs-webhook mode, and TTS toggle. (Invite, voice, and webhook setup are all covered here.)
- Slack — enable and webhook URL.
- Severity routing — turn critical / warning / info on or off, and set the cooldown.
- Battery thresholds — low/high voltage, low SoC, high temperature, plus SoC floor/ceiling.
- Energy rates — flat rate, plus peak/off-peak windows for cost analysis.
Settings are stored centrally and applied immediately. A built-in safety guard blocks any channel from being pointed at an internal, loopback, or private network address (fail-closed), so a misconfigured webhook or mail host can't be used to reach into protected infrastructure.
How alerts get triggered
Notifications fire from two sources:
1. Automatic threshold monitoring. After each telemetry poll, the system compares live battery metrics to your configured thresholds and sends an alert if any limit is breached — no human or AI involvement needed.
2. The AI agents. Bob and Bill can send notifications as part of their work (see AI Agents and Agent Tools). When the autonomous loop handles an event — Mini detects an anomaly, Bill analyzes it, Bob decides — a critical or warning outcome automatically pushes an external notification summarizing the alert, the affected pack, the severity, the pack's health, and the recommended actions.
In both cases, the message flows through the same pipeline: severity filter → cooldown → every enabled channel.
Customer use-cases
- Battery alert → Discord + email. A pack dips below the SoC floor at 2 AM. The system fires a critical alert: an email lands in your inbox and a red embed posts to your team's Discord channel — with the voltage, SoC, and state attached. You wake up knowing exactly what happened.
- Thermal event → spoken voice alert. A pack crosses the temperature warning threshold during a busy shop shift. The agent speaks the alert aloud in the Discord voice channel, so the floor team hears it without anyone watching a monitor.
- Scheduled report → email. "Bill, email me a weekly health report for the fleet." Bill generates it and
send_emails it to your recipient list — delivered, logged, and confirmable in history. - Suppress the noise. During commissioning you flip info notifications off and lengthen the cooldown, so testing chatter stays out of the team channel while critical alerts still get through.
- All-hands critical. For a genuine emergency the agent calls
send_alert, fanning the message out across email, Discord, and Slack at once — whatever you're watching, you'll see it.
Why this matters for you
- You're never in the dark. Real risks reach you on the channels you actually use.
- Signal, not noise. Severity filters and cooldowns keep alerts meaningful.
- Accountable. Full delivery history — you can prove what was sent and when.
- Hands-free and accessible. Voice alerts mean an operator doesn't need to be at a screen.
- Safe by design. Outbound channels are guarded against pointing at internal infrastructure.