INTERCEPT has a built-in alert engine that fires webhooks when decoded events match configurable rules. Forward pager messages (or events from any other mode) to Discord, Slack, n8n, Home Assistant, or any HTTP endpoint.
- Configure alert rules in the Alerts UI — each rule defines which mode and event type to watch, optional match criteria, and a severity level.
- When an incoming event matches a rule, INTERCEPT stores it in the alert log and POSTs a JSON payload to your configured webhook URL.
- All modes are supported: pager, sensor, ADS-B, AIS, ACARS, WiFi, Bluetooth, and more.
Set these environment variables in your .env file or docker-compose.yml:
| Variable | Default | Description |
|---|---|---|
ALERT_WEBHOOK_URL |
(empty) | URL to POST alert payloads to |
ALERT_WEBHOOK_SECRET |
(empty) | Optional token sent as X-Alert-Token header |
ALERT_WEBHOOK_TIMEOUT |
5 |
HTTP timeout in seconds |
ALERT_WEBHOOK_URL=https://your-endpoint.example.com/intercept-alerts
ALERT_WEBHOOK_SECRET=mysecrettoken- Open the Alerts panel in INTERCEPT
- Click New Rule
- Configure:
- Mode:
pager(or any other mode, or leave blank to match all) - Event type:
messagefor pager decodes (or blank to match all event types) - Match criteria: leave empty to forward everything, or add filters (e.g. capcode equals
1234567, or message containsFIRE) - Severity:
low,medium, orhigh
- Mode:
- Save and enable the rule
{
"id": 42,
"rule_id": 1,
"mode": "pager",
"event_type": "message",
"severity": "medium",
"title": "My Pager Rule",
"message": "message | 1234567",
"created_at": "2026-04-13T10:00:00+00:00",
"payload": {
"mode": "pager",
"event_type": "message",
"event": {
"capcode": "1234567",
"message": "UNIT 4 RESPOND TO 123 MAIN ST",
"type": "POCSAG1200"
},
"rule": { "id": 1, "name": "My Pager Rule" }
}
}Discord webhooks expect a different JSON format, so you need a relay between INTERCEPT and Discord.
Option A — No-code relay (recommended)
Use n8n, Make, or Pipedream to receive INTERCEPT's webhook and forward it to Discord with a custom message template. Point ALERT_WEBHOOK_URL at your workflow's ingest URL.
Option B — Self-hosted Python relay
Save as discord_relay.py and run it alongside INTERCEPT:
from flask import Flask, request
import urllib.request, json
app = Flask(__name__)
DISCORD_WEBHOOK_URL = "https://discord.com/api/webhooks/YOUR_ID/YOUR_TOKEN"
@app.post("/relay")
def relay():
data = request.get_json(force=True)
mode = data.get("mode", "unknown").upper()
title = data.get("title", "Alert")
message = data.get("message", "")
event = data.get("payload", {}).get("event", {})
lines = [f"**[{mode}]** {title}", message]
if event.get("capcode"):
lines.append(f"Capcode: `{event['capcode']}`")
if event.get("type"):
lines.append(f"Protocol: {event['type']}")
payload = json.dumps({"content": "\n".join(lines)}).encode()
req = urllib.request.Request(
DISCORD_WEBHOOK_URL,
data=payload,
headers={"Content-Type": "application/json"},
method="POST",
)
urllib.request.urlopen(req, timeout=5)
return "", 204
app.run(host="0.0.0.0", port=5051)Set ALERT_WEBHOOK_URL=http://localhost:5051/relay and run: python3 discord_relay.py
To only forward decodes from a specific capcode, set the rule's Match criteria:
| Field | Operator | Value |
|---|---|---|
capcode |
equals | 1234567 |
Multiple rules can coexist — e.g. one rule for all pager traffic and a second rule for emergency capcodes with high severity routed to a separate channel.