Call Log
Total Calls
All time
Active
In progress
Dispatched
Operative sent
Escalated
Supervisor notified
Caller Address Trade Urgency Status Time
Loading calls…
Select a call Click any row to see triage data, recording, and comms log.
Dispatch Log
TimeOperativeCallMethodStatusConfirmed
Loading…
Team
NamePhoneTradesAvailable
Loading…
Workflow Builder

Each client has their own rule set. Rules run after every call — first match wins. Clients with no rules fall back to default handling and trigger an admin alert.

Loading…
Default fallback rule Always on
If no other rule matches → escalate to duty manager via SMS and email.
Routines

Automated routines that run on a schedule. Changes take effect on the next deployment.

Escalation timeout
If an operative doesn't confirm a dispatch within this window, automatically escalate to the supervisor.
Escalate after minutes
Morning summary email
Send a daily digest of overnight calls to the admin email at a set time each morning.
Send at
Auto-close stale calls
Mark calls as "incomplete" if they remain active after a given period.
Close after hours
GDPR auto-delete
Permanently deletes call records older than 90 days. Runs nightly at 2:00 AM UTC. Cannot be disabled — GDPR compliance.
Runs nightly 02:00 UTC Always on
Users
Admin users
UserEmailRoleLast sign in
Loading users…
Access control
All admin users have full platform access. Role-based permissions coming in a future release.
Two-factor authentication
Enforce 2FA for all admin users
Coming soon
Single Sign-On (SSO)
Microsoft / Google workspace login
Coming soon
Settings
Your account
Manage your admin profile.
Email
Your login email
Role
Admin
Platform
Read-only system information.
Platform
Safe-Haus v26.2.3.0
Environment
Development
Region
AWS eu-west-2 (London)
GDPR retention
90 days
Danger zone
Irreversible actions — proceed with care.
Sign out
Sign out of this admin session
Help & Docs Safe-Haus v26.2.3.0 — PoC ↗
How a call works
  1. 1

    Resident calls in out-of-hours

    The bOnline OOH number diverts to Twilio, which fires a webhook to Safe-Haus. A call record is created in the database immediately.

  2. 2

    GDPR consent plays

    "This call will be recorded and handled by an AI assistant..." — the caller continues to consent. No data is collected before this point.

  3. 3

    AI triage agent gathers the details

    Claude (the AI) has a natural conversation to capture: landlord/housing association, property address, caller's name and number, issue type, trade required, and urgency. It confirms the caller's number from the inbound call rather than asking them to repeat it.

  4. 4

    Workflow engine decides the route

    The triage data hits the workflow rules. Emergency calls go to dispatch; non-urgent calls are logged for next-day; drainage and incomplete calls escalate to a supervisor.

  5. 5

    Operative receives a dispatch SMS

    The matched operative gets a text with the job details. They reply YES to accept or NO to decline. If they don't reply within 30 seconds, the system tries an outbound call.

  6. 6

    ETA collected and resident notified

    On acceptance, the operative is asked how long until they're on site. Their reply (e.g. "30 mins") is stored, and the resident receives a personalised SMS: "Hi Mrs Davies, great news — [Name] is on their way and expects to arrive in approximately 30 mins."

  7. 7

    Job complete

    When the operative texts DONE, the call is marked complete and the resident receives a job-complete confirmation. Everything is logged in the portal for your records.

Status reference

Call statuses

StatusMeaning
ActiveCall is in progress or triage just completed — workflow running.
CompleteOperative marked the job DONE.
EscalatedPassed to a supervisor — no operative available or drainage/incomplete triage.
IncompleteCall ended before triage finished, or auto-closed after timeout.

Dispatch statuses

StatusMeaning
SentSMS dispatched, waiting for operative reply.
Awaiting ETAOperative said YES — system has asked for their ETA.
ConfirmedOperative confirmed with ETA. Resident has been notified.
DeclinedOperative said NO — system trying next available.
EscalatedNo operatives responded — supervisor alerted.
Job completeOperative sent DONE. Resident notified.
Trade types
TradeExamplesDefault routing
ElectricalNo power, tripped fuse, exposed wiringDispatch electrical operative → if none, escalate electrical supervisor
PlumbingBurst pipe, no hot water, overflowing tankDispatch multi-trade operative
DrainageBlocked drain, sewer smell, external floodingAlways escalate to drainage supervisor
JoineryDoor off hinges, broken window, security issueDispatch multi-trade operative
GeneralAnything that doesn't fit aboveDispatch multi-trade operative → if none, escalate duty manager
Tip: The AI classifies the trade during the call. If it's unsure, it defaults to "general" and flags the call for review. You can see the AI's classification in the call detail panel under Issue → Trade.
Setting up your team

Operatives

Add an operative under Team → Operatives. Enter their mobile number — this is where the dispatch SMS goes. Tick each trade they cover. Make sure Available is toggled on, or they won't be contacted.

To mark an operative unavailable temporarily (holiday, off-call), toggle Available off from their row in the table.

Supervisors

Add a supervisor under Team → Supervisors. Set their trade if they specialise (e.g. drainage) or leave it blank for a duty manager who covers everything.

Supervisors receive escalation SMS and email. The email field is important — escalations go there as well as by text so nothing gets missed.

Operative SMS replies: YES to accept, NO to decline, then a free-text ETA (e.g. "30 mins"), and DONE when the job is finished. Any unrecognised reply is logged and an admin alert is sent.
Workflow rules

Each rule is an IF / THEN: if certain conditions are met in the triage data, take a specific action.

Condition fieldsAction types
trade — electrical, plumbing, drainage, joinery, generaldispatch — send SMS to the best available operative
urgency — emergency, non_emergencyescalate — SMS + email the matching supervisor
landlord — housing association namelog_only — record the call, no dispatch (e.g. non-urgent)

Rules are checked in order — the first rule that matches wins. If no rules match, the built-in fallback escalates to the duty manager.

Example rule: IF trade = drainage → THEN escalate to drainage supervisor. This ensures drainage jobs always go to the specialist rather than a general operative.
Quick answers
QuestionAnswer
Why is a call showing as "active" with no dispatch?The workflow engine may not have found an available operative. Check Team → Operatives and make sure at least one is toggled Available for the relevant trade.
Can a resident reply to the confirmation SMS?Yes — any reply is logged in the comms log for that call and an admin alert is sent. The system sends an auto-acknowledgement so the resident isn't left waiting.
What happens if the operative doesn't reply?After 30 seconds without a reply, the system makes an outbound call to the operative. If that also fails, it escalates to the supervisor for that trade.
How long are call records kept?90 days from the call date. The GDPR auto-delete routine runs every night at 2:00 AM UTC and permanently removes records past their retention date. This cannot be disabled.
Where is the data stored?All data is in Supabase PostgreSQL hosted in the EU (London region) and AWS eu-west-2. No data leaves the UK.
How do I update the AI's script or greeting?The triage agent system prompt is in triage-agent.js in the Lambda codebase. Changes require a Lambda redeploy. Contact your platform administrator.
Safe-Haus v1.0 (PoC)  ·  Built by In-Haus  ·  AWS eu-west-2  ·  Supabase EU
What's new 26.2.3.0
Loading changelog…