Platform · Telephony
Answers on your numbers, around the clock.
And it never records a word before the caller consents. This is where software meets regulation: keypad digits drive the flow, a hand-off reaches your team warm and briefed — and the recorder fails closed until the caller says yes.

How each piece connects
- SAUDI-NUMBERS · SIP
Your Saudi numbers, answered here
We provision your Saudi numbers with every engagement, and calls to them are answered on this pipeline. A managed voice backend carries production calls today, with a self-hosted SIP path built into the same pipeline behind it — and on every path the consent gate is load-bearing: a call cannot reach an ungated pipeline.
- DTMF
The keypad is a first-class input
A pressed digit lands in the flow as the dtmf_input variable and drives the next transition — so "press 1" branches through the same condition nodes as speech does.
- WARM-TRANSFER
A hand-off with a briefing
Transfer is a two-step conference: the caller is redirected into a named conference room, then your team member is dialled in and hears a whisper briefing of the call before the bridge. Every attempt is persisted as a transfer event, idempotent so a retry never dials twice.
- REQUIRED_STRICT
Recording waits for a yes
Under the default required_strict policy the recorder arms only on recorded consent — refusal or timeout means no recording, and even a storage read error counts as no consent: the gate fails closed. What persists is a SHA-256 hash of the announcement the caller heard, not the audio.
- COMPLIANCE-ANNOUNCE
Disclosure before dialogue
AI disclosure and the recording notice are composed per language and played up front — «أنت تتحدث مع مساعد ذكاء اصطناعي» is platform behaviour, not a script suggestion.
Spec sheet — as enforced in code
- required_strict
Default consent policy
- fails closed — no recording
On consent read error
- SHA-256 hash
Announcement stored as
- 25s
Transfer dial timeout — default
- E.164
Transfer target validation
Consent policies are tenant-configurable; required_strict is the shipped default. The self-hosted SIP path is built and held behind a feature flag — SIP routing here describes how the platform connects, not numbers already in service.
The platform