Skip to content

Status & monitoring

2026-06-21 — JSON /status moved to bridge

The old trades.yourevenings.com/status was behind Cloudflare Access — the monitoring cron couldn't read it (302 → email PIN, ignores STATUS_TOKEN). Fix: ported the check functions to the bridge at https://bridge.yourevenings.com/status?token=<STATUS_TOKEN> (2026-06-21) and on 2026-06-22 moved the HTML dashboard to https://bridge.yourevenings.com/status.html so we could drop CF Access from trades.yourevenings.com entirely (needed for Google indexing of the marketing page). Same JSON shape. Implementation: bridge/src/status.js. Deepgram and ElevenLabs were dropped — they're visibility-only (Vapi uses its own STT/TTS keys at call time, so our admin-key billing doesn't reflect runtime health). Auth: the dashboard is now open-by-URL with the ?token=<STATUS_TOKEN> query param (no CF Access).

Dashboards

  • Pilots dashboard (per-pilot call log): https://bridge.yourevenings.com/pilots?key=<INTERNAL_API_KEY> — added 2026-06-22. Shows live pilots with 24h / 7d call counts, jobs captured, and flagged calls. Click any pilot to see every call with caller, callback, job, urgency, duration, SMS-handoff status, recording link, and quality flags.
  • Status JSON (cron): https://bridge.yourevenings.com/status?token=<STATUS_TOKEN>
  • Status site (humans): bridge.yourevenings.com/status.html — still on trades.yourevenings.com behind CF Access.
  • Refresh: 30s auto.
  • Source of truth (stack): monitoring cron aa4111a7 runs every 15 min.
  • Source of truth (pilots): daily digest cron 39e7d26e runs 07:00 UTC (08:00 BST).

Quality flags

The bridge /vapi-webhook computes these on every call write:

Flag Trigger
missing_callback callback_number empty or <10 digits
no_caller_name caller_name empty or '—'
no_job job empty or '—'
short_call duration <30s
not_clean_end endedReason not (assistant\|customer)-ended-call
extraction_empty structured-data object empty
sms_failed job-handoff SMS to trade errored

Review flagged calls weekly. Common fixes are prompt tweaks to the base Polly UK assistant — changes propagate to all live clones (they inherit the system message body at clone time, but the underlying call logic is the same model + voice config).

What's monitored

Component Check Pass criterion
YE bridge GET https://bridge.yourevenings.com/ not 000 or 5xx (404 OK)
Vapi assistant API responds, credits > 0 response 200, balance > $5
Twilio account API responds, balance > 0 response 200, balance > $5
Polly UK number Vapi reports number bound bound to assistant ID
Status site itself self-check 200

Alert behaviour

  • state-change-only. We don't alert on every poll — only when something flips colour.
  • Vapi transient timeouts → reported as skipped (silent), not yellow. Eliminates flap noise.
  • Bridge 404 → green (acceptable per HEARTBEAT.md).

Alert sinks

  • Telegram → Matt's chat (5336018303)
  • Cron failure-alert mode: announce

Heartbeats

Matt's main OpenClaw session runs heartbeats every 30 min:

  • Reads /data/.openclaw/workspace/HEARTBEAT.md
  • Runs curl https://bridge.yourevenings.com/
  • Reply HEARTBEAT_OK if all green
  • Trading is shut down — no trading checks run

When something goes red

  1. Check the status site.
  2. Check the failing component's dashboard (Vapi, Twilio, CF, bridge).
  3. See Runbooks for component-specific recovery.
  4. If you can't fix in 10 min, ping Matt.

What "skipped" means

A component check timed out or hit a transient network issue. Not a fail. If the next 15-min check is green, it was a blip. If two consecutive skippeds → investigate.