β Back to docs home
π¨ Alert Center Integration Guide
Pipe your alert sources (ANPR / parking / security / any webhook) into Wabot Alert Center for automatic 3-tier escalation: WA text β WA voice note β real phone call.
1. Flow overview
Customer alert source β POST /alert/in β Wabot server
β
L1: WA text message (with one-tap ack link)
β (no ack in 30s)
L2: WA voice note PTT (TTS spoken)
β (no ack in 2 min)
L3: Twilio real call (press 1=ack / 2=human)
β (3 missed)
Escalate to contact #2, repeat L1βL3
β (everyone failed)
Owner Telegram fallback notification
2. Webhook protocol
Request
| Field | Value |
| Method | POST |
| URL | https://api.gowabot.com/license/v1/alert/in |
| Header | X-Alert-Token: <token> (from superadmin π― Sources tab) |
| Header | Content-Type: application/json |
Body
{
"title": "(required) alert title, < 500 chars",
"body": "(optional) detail text, < 5000 chars",
"severity": "(optional) info | warn | critical (defaults from source)",
"dedup_key": "(optional) custom dedup key; auto = sha1(source+title+body+payload)",
"payload": "(optional) any JSON object, < 30KB (preserves raw)"
}
Response
{ "ok": true, "event_id": 123, "status": "open", "deduplicated": false }
β οΈ Throttling rules
β’ Same dedup_key within 5 min only fires once
β’ Per-license rate: max 5 events / minute, excess marked throttled
β’ Monthly events_count_cap exceeded β rejected (see π Quota tab)
3. Three real scenarios
Scenario A Β· ANPR blacklist plate
curl -X POST https://api.gowabot.com/license/v1/alert/in \
-H "X-Alert-Token: YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "π Blacklist plate 6T1234",
"body": "Red SUV Β· north gate Β· 14:32:18",
"severity": "critical",
"payload": {
"plate": "6T1234",
"camera": "north_gate",
"confidence": 0.96,
"image_url": "https://camera.local/snap/abc.jpg"
}
}'
Scenario B Β· Parking lot full warning
curl -X POST https://api.gowabot.com/license/v1/alert/in \
-H "X-Alert-Token: YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "π
ΏοΈ Lot near full",
"body": "P1 occupancy 95%, only 5 spots left",
"severity": "warn",
"payload": { "lot": "P1", "occupancy": 0.95, "free": 5 }
}'
Scenario C Β· Security intrusion
curl -X POST https://api.gowabot.com/license/v1/alert/in \
-H "X-Alert-Token: YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "π‘οΈ Intrusion alert",
"body": "Backyard PIR triggered, no activity at this hour yesterday",
"severity": "critical",
"payload": { "sensor": "pir_yard", "zone": "back_yard" }
}'
4. Tiers & quota
| Tier | WA text | WA voice (L2) | Real call (L3) | Monthly voice cap |
| basic | β
unlimited | β | 5 min trial | 5 min |
| pro β | β
| β
| β
| 50 min |
| enterprise | β
| β
| β
| 500 min |
At 80% β owner Telegram preview; at 100% β auto downgrade (skip voice, keep WA text only).
5. Acknowledgement / escalation
After receiving WA text, contact taps π Tap to confirm link β escalation stops, ack written
On real call, press 1 = ack; press 2 = human handoff (still escalates)
6. Get a webhook token
- Sign in to admin.gowabot.com
- Go to π― Alert Sources tab
- Click + New source, pick license + kind (webhook/anpr/parking/security)
- After creating, click βοΈ Actions βΎ β π Copy curl, paste into your alert source system
7. Status codes
| Status | Meaning |
| 200 + status=open | Accepted, dispatcher started escalation |
| 200 + deduplicated=true | Same key within 5 min, reused previous event |
| 200 + status=throttled | Rate-limited (>5/min or monthly cap) |
| 401 missing_token | X-Alert-Token header missing |
| 403 invalid_token | Token invalid or disabled |
| 403 license_inactive | Customer license not active |
| 400 invalid_title | title missing or >500 chars |
Need help? [email protected]