Phone
Workspace-wide defaults for voice calls placed and received through Gravity Rail. Per-number configuration (work mode, brand, signup, anonymous calling) lives on each phone number itself — see Phone & Voice.
Go to Settings → Workspace → Phone.
Settings
| Setting | What It Does |
|---|---|
| Default Phone Number | The number used by default when an outbound call or SMS doesn't specify one (e.g., AI-initiated outreach with no per-workflow override). |
| Enable Audio Recording | When on, voice calls are recorded and stored securely in S3 for playback. Default off. |
| Enable Voicemail Detection | When on, AI-initiated outbound calls detect whether a human or voicemail answers. Default off. |
| Transcription Model | The speech-to-text (STT) model used to transcribe live operator sessions. Leave blank to use the workspace default. |
Enable Audio Recording
When enabled, every voice call on this workspace is recorded and the audio file is saved for later review. Recordings are encrypted at rest and accessed through the call detail view. For step-by-step playback, transcript sync, and compliance practices, see Call Recordings.
HIPAA note: Recordings can contain PHI. Treat them like any other patient data — limit access via roles, document the recording disclosure in your phone greeting, and follow your organisation's retention policy.
Enable Voicemail Detection
When enabled, AI-initiated outbound calls run Answering Machine Detection (AMD) at connect time. The result is exposed to your workflows so you can play a voicemail-drop, hang up, or proceed normally depending on what answered.
What it does
- The call connects and Twilio runs ~3–5 seconds of audio analysis.
- Twilio reports the result to Gravity Rail.
- The result is persisted on the
PhoneCallrecord asanswered_byand exposed to event rules and templates ascall.answered_by. - Your workflow can branch on the value.
Possible values for call.answered_by
| Value | Meaning |
|---|---|
human | A human answered. |
machine_start | Voicemail/answering machine detected, greeting is starting. |
machine_end_beep | Voicemail greeting finished with a beep — safe to start recording your message. |
machine_end_silence | Voicemail greeting finished with silence. |
machine_end_other | Voicemail greeting finished but the ending was ambiguous. |
fax | A fax machine answered. |
unknown | AMD couldn't classify the line in time. |
Branching on the result with an Event Rule
The most common pattern is to play a pre-recorded voicemail message and hang up when AMD reports a voicemail. Configure an event rule on the task:
- Object: any task on the workflow that initiates the call
- Event:
task:execute - Condition (CEL):
call.answered_by.startsWith("machine_end_") - Action:
audio:playwith parameters:clip_file_id: the file ID of the pre-recorded clipallow_interrupt:falsehang_up_on_audio_end:true
Humans (and ambiguous results) skip the rule and the regular AI conversation runs.
Latency cost
AMD adds ~3–5 seconds before the call is handed to the AI agent — even when a human answers. Combined with first-byte TTS latency (~1–2 s), human pickups feel ~4–7 s slower than calls placed without detection.
The setting is workspace-wide and off by default so only workspaces that need voicemail handling pay the cost. Toggle it on per workspace once you've configured the matching event rules.
Compliance
Twilio's AMD result is the only PHI-free data point we persist (it's an enum value, not audio). Audio is not stored as part of detection. If you also enable Audio Recording, the call audio is recorded as usual and inherits the same compliance treatment.
Transcription Model
The Transcription Model setting controls which speech-to-text (STT) engine is used when live operator sessions are transcribed in real time (i.e. when a human operator is on a call and their side of the conversation is being captured as text for AI assistance or audit purposes).
What it does
When set, Gravity Rail uses the selected STT model instead of the workspace-wide platform default to transcribe the operator's audio during a live session. This lets you tune transcription accuracy for a specific language, accent, or use-case without changing the global default.
Accepted values
| Value | Provider | Notes |
|---|---|---|
| (blank) | — | Uses platform default (deepgram:stt:flux-general-en). Recommended for most workspaces. |
| (empty string) | — | Disables live transcription for operator sessions. |
deepgram:stt:flux-general-en | Deepgram | English-optimised Flux model. Platform default. |
deepgram:stt:flux-general-en:selfhost | Deepgram | English Flux model on Gravity Rail's self-hosted GPU. Lower latency. Only selectable in environments where the self-hosted service is deployed (prod). |
deepgram:stt:flux-general-multi | Deepgram | Multilingual Flux model. Use when operators speak languages other than English. |
deepgram:stt:flux-general-multi:selfhost | Deepgram | Multilingual Flux model on Gravity Rail's self-hosted GPU. Lower latency. Only selectable in environments where the self-hosted service is deployed (prod). |
elevenlabs:stt:scribe | ElevenLabs | ElevenLabs Scribe model. |
elevenlabs:stt:scribe_v2 | ElevenLabs | ElevenLabs Scribe v2. |
elevenlabs:stt:scribe_v2_realtime | ElevenLabs | ElevenLabs Scribe v2 real-time variant. |
The value you enter is validated against the active model registry when the setting is saved. An invalid model ID is rejected with an error.
When to change it
- Multilingual operator teams — switch to
deepgram:stt:flux-general-multiif operators regularly speak languages other than English. - Accuracy-sensitive workflows — try alternative models if you find that the default produces too many transcription errors for a particular accent or terminology set.
- Disable transcription — set to an empty string if your workspace does not use live operator assistance and you want to avoid the transcription overhead.
Compliance
Live transcription output can contain PHI (patient names, symptoms, phone numbers spoken aloud). Each finalised turn is persisted as a chat message on the session's chat, encrypted at rest in the workspace database — it is not written to a separate transcript file, and the audio is not sent to any third-party transcription store beyond the STT provider that returns the text. Because transcripts live as ordinary chat messages, they follow the platform's default message handling: by default messages are retained for the life of the chat (Gravity Rail does not auto-expire them), and they are visible to anyone with role access to that chat. Treat transcripts like any other PHI — limit chat access via roles, document any operator-recording disclosure in your call greeting, and delete the chat when your organisation's retention policy requires it.
Tips
- Set the default phone number per workspace, not per workflow. Workflows can override it when needed, but a single workspace default keeps outbound caller ID consistent.
- Pair voicemail detection with a voicemail-drop clip. Without an
audio:playevent rule, voicemail-answered calls just fall through to the AI greeting, which talks to a voicemail box. - Test on a known voicemail before rolling out. Call a phone you can leave a voicemail on, confirm
call.answered_by == "machine_end_beep", and verify your event rule plays the clip end-to-end.
Related
- Phone & Voice — Per-number configuration: work modes, signup, anonymous callers, voicemail.
- Voice — Voice models, speech recognition, and pipeline tuning.
- Automation — Event rules and the
audio:playaction. - CEL Expressions — Conditions like
call.answered_by.startsWith(...).