Environment reference (2 of 2): brain, realtime, widget, API, behaviour, webhooks, operations
This page lists every environment variable the gateway reads. Set them in .env (or the container environment).
- Default is the value used when the variable is unset. Booleans show as
onoroff;unsetmeans the build has no default. Where a chapter states a default, this table follows the chapter. <LANG>rows are families: replace<LANG>with the language code upper-cased and-changed to_, so ml-IN becomesML_IN(for exampleGOOGLE_VOICE_ML_IN). A few families use the short code, such as_ML; the row says which.- Chapter links to the section that explains the setting.
- The list is split in two: this is part 2 (brain, realtime, widget, API, behaviour, webhooks, operations); part 1 is Environment reference (1 of 2).
AI brain
| Variable | Default | What it does | Chapter |
|---|---|---|---|
CUSTOM_LLM_AUTH_HEADER |
unset | Header name that carries the token when the type is header. | AI brain |
CUSTOM_LLM_AUTH_TOKEN |
unset | Token for bearer or header authentication. | AI brain |
CUSTOM_LLM_AUTH_TYPE |
none |
none, bearer or header. | AI brain |
CUSTOM_LLM_RESPONSE_FIELD |
unset | Dot path to the reply text when your JSON is not a recognised shape. | AI brain |
CUSTOM_LLM_SESSION_FIELD |
unset | Dot path to your session id in the reply. | AI brain |
CUSTOM_LLM_TIMEOUT |
30000 |
Request timeout in milliseconds. | AI brain |
CUSTOM_LLM_URL |
unset | Your HTTP endpoint. Required when the brain is custom. | AI brain |
LITEBOT_API_URL |
http://localhost:3000 |
Address of the LiteBot server. | AI brain |
LITEBOT_BOT_ID |
customer-service |
Bot that answers calls. | AI brain |
LITEBOT_ERROR_TEXT_GUARD |
on | Never speak an error that LiteBot returns as the reply. | AI brain |
LITEBOT_ERROR_TEXT_PATTERN |
unset | Regular expression for what counts as a relayed error. | AI brain |
LITEBOT_HANGUP_TOOLS |
hangupCall |
Comma-separated tool names that end the call. | AI brain |
LITEBOT_RECONCILE_COST |
on | At hang-up, read LiteBot's session total and correct the per-call cost. | AI brain |
LITEBOT_RECONCILE_TIMEOUT_MS |
1500 |
Hard cap on that lookup. | AI brain |
LITEBOT_SESSION_END |
on | Tell LiteBot the session ended so its end-of-session hooks run at once. | AI brain |
LITEBOT_SESSION_END_TIMEOUT_MS |
5000 |
Time allowed for that notification. | AI brain |
LITEBOT_STREAMING |
on | Speak the answer sentence by sentence as it arrives. Off waits for the whole answer. | AI brain |
LITEBOT_TIMEOUT |
30000 |
Request timeout in milliseconds. | AI brain |
LITEBOT_TRANSFER_TOOLS |
unset | Comma-separated tool names that trigger a transfer. Empty relies on the bot's escalate flag. | AI brain |
LLM_FINAL_TIMEOUT_MESSAGE |
built-in English | Spoken on hard AI failure. | AI brain |
LLM_FINAL_TIMEOUT_MESSAGE_ML |
built-in English | Malayalam (ml-IN) variant; other languages use the base message. | AI brain |
LLM_PROVIDER |
required | Always set litebot or custom. Unset is not a supported configuration. |
AI brain |
LLM_TIMEOUT_MESSAGE |
built-in English | Spoken when the AI is slow, while the gateway keeps waiting. | AI brain |
LLM_TIMEOUT_MESSAGE_ML |
built-in English | Malayalam (ml-IN) variant; other languages use the base message. | AI brain |
LLM_TIMEOUT_RETRY_MESSAGE |
built-in English | Spoken when the gateway retries a slow AI request. | AI brain |
LLM_TIMEOUT_RETRY_MESSAGE_ML |
built-in English | Malayalam (ml-IN) variant; other languages use the base message. | AI brain |
TIMEOUT_MESSAGE_ENABLED |
off | Speak the timeout message while a slow reply is still awaited. | AI brain |
Realtime mode
| Variable | Default | What it does | Chapter |
|---|---|---|---|
BOT_REGISTRY_EXTERNAL_DIR |
unset | Folder holding your bots, prompts and tools (config in the install directory). | Realtime mode |
BOT_REGISTRY_HOT_RELOAD |
on | Reload bot files when they change. | Realtime mode |
DEFAULT_BOT_ID |
default |
Bot used when a session names none (realtime modes). | Realtime mode |
GATEWAY_COMMIT_ON_SILENCE |
off | Commit the audio buffer when silence is detected. | Realtime mode |
GATEWAY_ENABLE_TRANSCRIPTION |
off | Ask the service to transcribe the caller. | Realtime mode |
GATEWAY_INSTRUCTIONS |
You are a helpful AI assistant. Be concise and natural. |
System instructions for the session. | Realtime mode |
GATEWAY_LOG_TRANSCRIPTS |
off | Write transcripts to the log. | Realtime mode |
GATEWAY_MAX_ERRORS |
10 |
Errors tolerated before the call is dropped. | Realtime mode |
GATEWAY_MAX_TOKENS |
4096 |
Most tokens per response. | Realtime mode |
GATEWAY_MODALITIES |
audio,text |
Output types requested. | Realtime mode |
GATEWAY_MODE |
off | Bridge every call to a remote realtime service. | Realtime mode |
GATEWAY_TEMPERATURE |
0.8 |
Sampling temperature. | Realtime mode |
GATEWAY_TRANSCRIPTION_MODEL |
whisper-1 |
Model used for that transcription. | Realtime mode |
GATEWAY_VAD_PREFIX_MS |
300 |
Audio kept from before speech starts. | Realtime mode |
GATEWAY_VAD_SILENCE_MS |
500 |
Silence that ends a turn. | Realtime mode |
GATEWAY_VAD_THRESHOLD |
0.5 |
Speech detection sensitivity. | Realtime mode |
GATEWAY_VAD_TYPE |
server_vad |
Speech detection type. | Realtime mode |
GATEWAY_VOICE |
alloy |
Voice requested from the service. | Realtime mode |
GEMINI_LIVE_API_KEY |
unset | Gemini Live key. Falls back to GEMINI_API_KEY. |
Realtime mode |
GEMINI_LIVE_DRAIN_MS |
15000 |
Ceiling for letting the goodbye finish at hang-up. | Realtime mode |
GEMINI_LIVE_DRAIN_STALL_MS |
300 |
Abort the wait if queued audio stops shrinking for this long. | Realtime mode |
GEMINI_LIVE_INBOUND_GAIN |
2.0 |
Gain applied to caller audio before it reaches the model. | Realtime mode |
GEMINI_LIVE_MODEL |
unset | Model used when the bot configuration names none. | Realtime mode |
GEMINI_LIVE_PRICE_AUDIO_IN_PER_1M |
unset | Audio input price, USD per million tokens, for cost tracking. Unset uses the built-in table. | Realtime mode |
GEMINI_LIVE_PRICE_AUDIO_OUT_PER_1M |
unset | Audio output price, USD per million tokens. Unset uses the built-in table. | Realtime mode |
GEMINI_LIVE_PRICE_TEXT_IN_PER_1M |
unset | Text input price, USD per million tokens. Unset uses the built-in table. | Realtime mode |
GEMINI_LIVE_PRICE_TEXT_OUT_PER_1M |
unset | Text output price, USD per million tokens. Unset uses the built-in table. | Realtime mode |
GEMINI_LIVE_TRANSCRIPTS |
on | Send caller and bot transcripts to logs and webhooks. | Realtime mode |
GEMINI_LIVE_VAD |
unset | Empty uses the model's own speech detection; silero uses local detection. | Realtime mode |
GEMINI_LIVE_VOICE |
unset | Voice used when the bot configuration names none. | Realtime mode |
LITEBOT_LIVE_API_KEY |
unset | LiteBot server key used to authenticate. | Realtime mode |
LITEBOT_LIVE_BOT_ID |
unset | Bot to start on LiteBot. Falls back to LITEBOT_BOT_ID. |
Realtime mode |
LITEBOT_LIVE_CONTINUOUS_STREAM |
on | Keep a steady audio stream to LiteBot even when the handset sends nothing during silence. | Realtime mode |
LITEBOT_LIVE_DRAIN_MS |
15000 |
Ceiling for letting the goodbye finish when the session ends. | Realtime mode |
LITEBOT_LIVE_DRAIN_STALL_MS |
300 |
Abort the wait if queued audio stops shrinking for this long. | Realtime mode |
LITEBOT_LIVE_FRAME_MS |
20 |
Length in milliseconds of each audio frame sent to LiteBot. | Realtime mode |
LITEBOT_LIVE_INBOUND_GAIN |
unset | Gain on caller audio. Falls back to GEMINI_LIVE_INBOUND_GAIN. |
Realtime mode |
LITEBOT_LIVE_INBOUND_RATE |
16000 |
Sample rate of caller audio; use 8000 if the bot is set up for 8 kHz. | Realtime mode |
LITEBOT_LIVE_KICKOFF |
on | Ask the bot to greet first once the session is ready. | Realtime mode |
LITEBOT_LIVE_MAX_BACKLOG_FRAMES |
25 |
Frames that may queue toward LiteBot before older ones are dropped. | Realtime mode |
LITEBOT_LIVE_PING_MS |
30000 |
Keep-alive interval; 0 disables it. | Realtime mode |
LITEBOT_LIVE_TOKEN |
unset | A JWT, as an alternative to the server key. | Realtime mode |
LITEBOT_LIVE_TRANSFER_TOOLS |
escalateToHuman |
Comma-separated tool names whose execution triggers a transfer. | Realtime mode |
LITEBOT_LIVE_URL |
unset | Base address of LiteBot (ws:// or wss://, host and port); the gateway adds /voice. Required for LiteBot Live. |
Realtime mode |
LLM_API_KEY |
unset | Key sent to the remote realtime service in gateway mode. | Realtime mode |
LLM_WEBSOCKET_URL |
unset | WebSocket address of the realtime service. Required in gateway mode. | Realtime mode |
REALTIME_PROVIDER |
unset | Empty runs the speech-recognition, brain and voice pipeline; gemini-live or litebot selects a realtime mode. | Realtime mode |
Browser widget
| Variable | Default | What it does | Chapter |
|---|---|---|---|
WEBSOCKET_AUDIO_ALLOWED_BOT_IDS |
unset | Comma-separated bot ids a page may choose. Empty allows any. | Browser widget |
WEBSOCKET_AUDIO_ALLOWED_ORIGINS |
unset | Comma-separated allowed origins. Empty allows any. | Browser widget |
WEBSOCKET_AUDIO_API_KEY |
unset | When set, a page must send it as ?apiKey= or an x-api-key header. Unset means no authentication. |
Browser widget |
WEBSOCKET_AUDIO_ENABLED |
off | Start the browser widget endpoint. | Browser widget |
WEBSOCKET_AUDIO_GREETING_MAX_CHARS |
500 |
Longest greeting text a page may send; longer text is cut. | Browser widget |
WEBSOCKET_AUDIO_HOST |
0.0.0.0 |
Address to listen on. Use 127.0.0.1 when a proxy on the same host fronts it. | Browser widget |
WEBSOCKET_AUDIO_IDLE_TIMEOUT_MS |
300000 |
Close a session with no audio or control messages for this long. 0 disables. | Browser widget |
WEBSOCKET_AUDIO_MAX_PAYLOAD_BYTES |
1048576 |
Largest single message accepted, in bytes. | Browser widget |
WEBSOCKET_AUDIO_MAX_PER_IP |
5 |
Simultaneous connections allowed from one client address. | Browser widget |
WEBSOCKET_AUDIO_MAX_SESSION_MS |
3600000 |
Hard limit on one session's length. 0 disables. | Browser widget |
WEBSOCKET_AUDIO_PORT |
8082 |
Port the endpoint listens on. | Browser widget |
WS_AUDIO_TTS_STREAMING |
on | Stream Google Chirp3-HD replies sentence by sentence to the browser. Off sends one message per sentence. | Browser widget |
HTTP API and outbound
| Variable | Default | What it does | Chapter |
|---|---|---|---|
HTTP_ALLOWED_IPS |
unset | Comma-separated IPs and IPv4 CIDR blocks allowed to call the API. Unset turns the whitelist off. | HTTP API |
HTTP_HOST |
127.0.0.1 |
Address the API listens on. | HTTP API |
HTTP_PORT |
8080 |
Port the HTTP API listens on. The fallback collides with AUDIOSOCKET_PORT, so set it explicitly (this manual uses 8081). |
HTTP API |
HTTP_TRUST_PROXY |
off | Read the client address from X-Forwarded-For. Set true only behind a reverse proxy. |
Browser widget |
OUTBOUND_DEFAULT_GREETING_<LANG> |
built-in text | Greeting text for dynamic outbound greetings in one language, for example OUTBOUND_DEFAULT_GREETING_ML_IN. |
Conversation behaviour |
OUTBOUND_ENABLED |
off | Open the outbound-call routes; otherwise they return 403. | HTTP API |
OUTBOUND_GREETING_MODE |
static |
Default greeting mode for outbound calls: static, dynamic or hybrid. | HTTP API |
OUTBOUND_ORIGINATE_ENDPOINT |
unset | Your webhook that places the call. | HTTP API |
OUTBOUND_STATIC_AUDIO_<LANG> |
unset | WAV played in static and hybrid outbound mode for one language, for example OUTBOUND_STATIC_AUDIO_ML_IN. |
Conversation behaviour |
OUTBOUND_TIMEOUT |
10000 |
Milliseconds to wait for that webhook. | HTTP API |
Conversation behaviour
| Variable | Default | What it does | Chapter |
|---|---|---|---|
BARGE_IN_DELAY |
200 |
Milliseconds at the start of playback during which interruption is ignored. | Conversation behaviour |
BARGE_IN_ECHO_GUARD |
on | Ignore the bot's own voice leaking back from the handset. | Conversation behaviour |
BARGE_IN_ECHO_LOG |
on | Log each ignored echo transcript. | Conversation behaviour |
BARGE_IN_ECHO_MARGIN_DB |
8 |
How many dB louder than the measured echo the caller must be. | Conversation behaviour |
BARGE_IN_ECHO_MAX_THRESHOLD |
24000 |
Upper limit for the echo-adjusted volume threshold. | Conversation behaviour |
BARGE_IN_ECHO_MAX_WORDS |
3 |
Longest transcript treated as echo. Longer ones, doubled words and yes or no words count as the caller. | Conversation behaviour |
BARGE_IN_ECHO_TAIL_MS |
800 |
After playback ends, transcripts that are the bot's own words are dropped for this long. | Conversation behaviour |
BARGE_IN_ECHO_WARMUP_PACKETS |
10 |
Audio packets at the start of playback in which interruption is ignored. | Conversation behaviour |
BARGE_IN_ECHO_WINDOW_MS |
4000 |
Window over which the echo level is measured, sampled only while the bot plays. | Conversation behaviour |
BARGE_IN_FALSE_TIMEOUT_MS |
1500 |
How long to wait for words before resuming. 0 disables holding. | Conversation behaviour |
BARGE_IN_MAX_RESUMES |
2 |
Resumes per turn before the tail is discarded. | Conversation behaviour |
BARGE_IN_MIN_WORDS |
0 |
Words needed to confirm an interruption. 0 means any transcript that passes the gate confirms. | Conversation behaviour |
BARGE_IN_RESET_HYSTERESIS |
5 |
Quiet frames needed before a new interruption can be counted. | Conversation behaviour |
BARGE_IN_RESUME |
on | Hold and resume after a false interruption. Off discards the unplayed tail every time. | Conversation behaviour |
BARGE_IN_THRESHOLD |
500 |
Volume threshold used when the detector is off. | Conversation behaviour |
BARGE_IN_USE_VAD |
on | Decide interruptions with the speech detector, not raw volume. | Conversation behaviour |
BARGE_IN_VAD_THRESHOLD |
0.5 |
Detector confidence needed to count as speech. | Conversation behaviour |
ENABLE_BARGE_IN |
off | Let callers interrupt the bot. | Conversation behaviour |
ENABLE_INCOMPLETE_TURN_DETECTION |
off | Honour the wait-for-more and give-time flags from the brain. | Conversation behaviour |
GOODBYE_MESSAGE |
unset | WAV played at a bot-initiated hang-up when the brain gave no closing words. | Conversation behaviour |
GOODBYE_MESSAGE_TEXT_EN |
Thank you for calling. Goodbye! |
Spoken goodbye text when no WAV exists. | Conversation behaviour |
GOODBYE_MESSAGE_TEXT_<LANG> |
unset | Spoken goodbye text for one language, short code (EN, ML, HI). |
Conversation behaviour |
GOODBYE_MESSAGE_<LANG> |
unset | Goodbye WAV for one language; the short code is used, for example GOODBYE_MESSAGE_ML. Beats GOODBYE_MESSAGE. |
Conversation behaviour |
LLM_HANGUP_DRAIN_MAX_MS |
15000 |
Longest the gateway waits for the goodbye audio to play out. | Conversation behaviour |
MAX_SILENCE_DURATION |
1000 |
Milliseconds of silence before the caller's speech is processed. | Conversation behaviour |
MIN_SPEECH_DURATION |
200 |
Minimum milliseconds of speech before processing. | Conversation behaviour |
MIN_UTTERANCE_LENGTH |
2 |
Shortest utterance, in characters, kept; shorter ones are treated as noise. | Conversation behaviour |
NOISE_FLOOR_CALIBRATION_MS |
1000 |
Listening-only period at the start of the call. | Conversation behaviour |
NOISE_FLOOR_ENABLED |
on | Learn each call's background level and set the interruption threshold from it. | Conversation behaviour |
NOISE_FLOOR_LOG |
on | Log the learned level. | Conversation behaviour |
NOISE_FLOOR_LOG_INTERVAL_MS |
5000 |
Interval between those log lines. | Conversation behaviour |
NOISE_FLOOR_MARGIN_DB |
6 |
How far above the quiet level the threshold sits. | Conversation behaviour |
NOISE_FLOOR_MAX_THRESHOLD |
2000 |
Highest threshold allowed. | Conversation behaviour |
NOISE_FLOOR_MIN_THRESHOLD |
200 |
Lowest threshold allowed. | Conversation behaviour |
NOISE_FLOOR_ROLLING_WINDOW_MS |
10000 |
Window used to track the quiet level afterwards. | Conversation behaviour |
PIPELINE_INBOUND_GAIN |
2.5 |
Gain applied to caller audio before recognition, speech detection and interruption checks. | Conversation behaviour |
PROCESSING_SOUND_DIR |
unset | Folder holding filler files. | Conversation behaviour |
PROCESSING_SOUND_ENABLED |
off | Play a filler sound while the AI works. | Conversation behaviour |
PROCESSING_SOUND_FILE |
unset | Your own filler file, absolute or relative to the install directory. | Conversation behaviour |
PROCESSING_SOUND_HARD_CUT |
on | Cut the filler the instant speech is ready. Off lets the phrase finish. | Conversation behaviour |
PROCESSING_SOUND_LOOP |
off | Repeat the sound while waiting. | Conversation behaviour |
PROCESSING_SOUND_LOOP_DELAY |
2000 |
Milliseconds between repeats. | Conversation behaviour |
PROCESSING_SOUND_START_DELAY |
2000 |
Milliseconds of waiting before the sound starts. | Conversation behaviour |
PROCESSING_SOUND_TRANSITION_DELAY |
unset | Pause in milliseconds after the filler before speech starts. | Conversation behaviour |
PROCESSING_SOUND_TYPE |
chime |
Built-in filler sound to use. | Conversation behaviour |
PROCESSING_SOUND_VOLUME |
0.3 |
Playback volume. | Conversation behaviour |
REDEMPTION_MS |
1400 |
Wait after the last transcript before the turn is processed. | Conversation behaviour |
TRANSFER_ERROR_MESSAGE |
unset | WAV played when the transfer fails or is disabled. | Conversation behaviour |
TRANSFER_ERROR_MESSAGE_<LANG> |
unset | Transfer-failure WAV for one language, short code (TRANSFER_ERROR_MESSAGE_ML). |
Conversation behaviour |
TRANSFER_ERROR_TEXT_EN |
I am sorry, I was unable to transfer you. Please try calling again. |
Spoken text when no error WAV exists. | Conversation behaviour |
TRANSFER_ERROR_TEXT_<LANG> |
unset | Transfer-failure text for one language, short code (EN, ML). |
Conversation behaviour |
TRANSFER_MESSAGE |
unset | WAV played before transferring. | Conversation behaviour |
TRANSFER_MESSAGE_TEXT_EN |
Please hold while I transfer you to a human agent. |
Spoken text when no WAV exists. | Conversation behaviour |
TRANSFER_MESSAGE_TEXT_<LANG> |
unset | Pre-transfer text for one language, short code (EN, ML). |
Conversation behaviour |
TRANSFER_MESSAGE_<LANG> |
unset | Pre-transfer WAV for one language, short code (TRANSFER_MESSAGE_ML). |
Conversation behaviour |
UTTERANCE_CHECK_INTERVAL |
500 |
Milliseconds between checks that the system is idle. | Conversation behaviour |
UTTERANCE_COMBINATION_WINDOW |
10000 |
Transcripts arriving within this window are combined. | Conversation behaviour |
UTTERANCE_MAX_WAIT |
30000 |
Longest wait for the system to become idle. | Conversation behaviour |
UTTERANCE_TIMEOUT |
3000 |
Milliseconds to wait for more speech before a turn is closed. | Conversation behaviour |
UTTERANCE_WINDOW_SIZE |
5 |
Most utterances buffered, to bound memory. | Conversation behaviour |
VAD_BUFFER_INTERVAL |
200 |
Milliseconds of audio between detector runs. | Conversation behaviour |
VAD_MAX_SPEECH_MS |
6000 |
Longest single speech segment before it is cut. | Conversation behaviour |
VAD_MIN_SPEECH_FRAMES |
4 |
Speech frames the detector needs to open a segment. | Conversation behaviour |
VAD_MIN_SPEECH_GATE_ADAPTIVE |
on | Discard segments that are both short and quiet. | Conversation behaviour |
VAD_MIN_SPEECH_GATE_DURATION_MS |
500 |
Segments shorter than this are candidates for discarding. | Conversation behaviour |
VAD_MIN_SPEECH_GATE_ENERGY_MULT |
2.0 |
A candidate is discarded if its peak is below the noise floor times this value. | Conversation behaviour |
VAD_MODEL |
v5 |
Speech detector model version. | Conversation behaviour |
VAD_NEGATIVE_THRESHOLD |
0.35 |
Confidence below which speech stops. Must be lower than the start value. | Conversation behaviour |
VAD_POSITIVE_THRESHOLD |
0.5 |
Confidence that starts speech. | Conversation behaviour |
VAD_PRE_SPEECH_FRAMES |
1 |
Frames kept from before speech starts. | Conversation behaviour |
VAD_REDEMPTION_FRAMES |
8 |
Quiet frames tolerated before speech is considered ended. | Conversation behaviour |
Webhooks and billing
| Variable | Default | What it does | Chapter |
|---|---|---|---|
BILLING_CDR_AUTH_HEADER |
Authorization |
Header that carries the token. | Webhooks and billing |
BILLING_CDR_AUTH_SCHEME |
Bearer |
Prefix before the token. Empty sends a bare token. | Webhooks and billing |
BILLING_CDR_AUTH_TOKEN |
unset | Token sent with each delivery. | Webhooks and billing |
BILLING_CDR_DIR |
./cdr |
Store root, relative to the working directory. | Webhooks and billing |
BILLING_CDR_ENABLED |
off | Master switch for billing records. | Webhooks and billing |
BILLING_CDR_KEEP_DELIVERED |
off | Archive delivered records in sent/. | Webhooks and billing |
BILLING_CDR_MAX_ATTEMPTS |
10 |
Attempts before a record is moved to dead letters. | Webhooks and billing |
BILLING_CDR_SECRET |
unset | Signing key, kept separate from WEBHOOK_SECRET. |
Webhooks and billing |
BILLING_CDR_SWEEP_MS |
60000 |
How often the gateway scans for records due a retry. | Webhooks and billing |
BILLING_CDR_TIMEOUT_MS |
5000 |
Milliseconds to wait for your endpoint. | Webhooks and billing |
BILLING_CDR_URL |
unset | Billing endpoint. Empty means store only. | Webhooks and billing |
COST_RATES_FILE |
unset | Path to your rates file. Empty reads config/pricing.json. |
Webhooks and billing |
COST_TRACKING_ENABLED |
on | Compute a cost for each call. | Webhooks and billing |
COST_USD_INR |
87 |
Conversion rate from US dollar list prices to rupees. | Webhooks and billing |
STATUS_WEBHOOK_MAX_PENDING |
500 |
Status-update deliveries allowed in flight before new ones are skipped. | Webhooks and billing |
WEBHOOK_AUTH_HEADER |
Authorization |
Header that carries the token. | Webhooks and billing |
WEBHOOK_AUTH_SCHEME |
Bearer |
Prefix before the token. Empty sends a bare token. | Webhooks and billing |
WEBHOOK_AUTH_TOKEN |
unset | Token sent with every request. Empty means no auth header. | Webhooks and billing |
WEBHOOK_MAX_PENDING |
200 |
Deliveries allowed in flight; beyond this new events are skipped. | Webhooks and billing |
WEBHOOK_METHOD |
POST |
HTTP method used for delivery. | Webhooks and billing |
WEBHOOK_SECRET |
unset | Signing key. Empty means requests are unsigned. | Webhooks and billing |
WEBHOOK_SSRF_CHECK |
on | Refuse a URL that resolves to a private or loopback address. Set false for a receiver on your local network. | Webhooks and billing |
WEBHOOK_TIMEOUT |
5000 |
Milliseconds to wait for your endpoint. | Webhooks and billing |
WEBHOOK_TOOL_DETAILS |
off | Include the tool-call list in the call-ended payload. | Webhooks and billing |
WEBHOOK_TOOL_MAX_BYTES |
2048 |
Cap per field; longer values are cut and flagged. | Webhooks and billing |
WEBHOOK_TOOL_MAX_ENTRIES |
50 |
Tool entries kept per call; the rest are counted. | Webhooks and billing |
WEBHOOK_TOOL_PAYLOADS |
off | Also include tool arguments and results, which may hold caller personal data. | Webhooks and billing |
WEBHOOK_URL |
unset | Your lifecycle endpoint. Empty disables webhooks. | Webhooks and billing |
Operations and tuning
| Variable | Default | What it does | Chapter |
|---|---|---|---|
LOG_LATENCY |
off | Log a per-turn response-time line and write logs/performance.csv. | Operations |
LOOP_LAG_WARN_MS |
40 |
Log a stall warning when the process falls this many milliseconds behind. | Operations |
LOOP_PROFILE_DIR |
/tmp |
Folder where those profiles are written. | Operations |
LOOP_PROFILE_MS |
0 |
Record a CPU profile of this many milliseconds on demand to help attribute stalls. 0 disables. | Operations |
NATIVE_RESAMPLER_AUTO_DISABLE_ON_ERROR_RATE |
0.01 |
Error rate, 0 to 1, at which the built-in resampler switches itself off. | Operations |
RTP_PACER_LEAD_MS |
350 |
Audio cushion for outbound SIP audio. | Operations |
RTP_PACER_WORKER |
on | Run the audio pacer in its own thread. Off paces on the main thread. | Operations |
TX_CATCHUP_SLACK_MS |
200 |
How far behind schedule a sender may fall before it catches up. Leave it. | Operations |
USE_NATIVE_RESAMPLER |
false |
false uses FFmpeg only; true uses the built-in resampler with fallback; compare runs both. | Operations |
Diagnostic and test-only
These switches exist for support and testing. Leave them unset unless Vexyl asks.
| Variable | What it does |
|---|---|
GATEWAY_LOG_RATE_LIMITS |
Log the realtime service's rate-limit updates. |
GEMINI_LIVE_AUDIO_DEBUG |
Log Gemini Live audio details for diagnosis. |
RECONCILE_LIVE_SESSION |
Test switch for the end-of-call cost lookup. |
TEST_GROQ_ON_START |
Run a Groq speech-recognition self-test at start-up. |
TEST_ITERATIONS |
Repeat count for the start-up self-tests. |
TEST_LANGUAGE |
Language used by the start-up self-tests. |
TEST_OPENAI_STT_ON_START |
Run an OpenAI speech-recognition self-test at start-up. |
TEST_STT_ON_START |
Run a speech-recognition self-test at start-up. |
TEST_TTS_ON_START |
Run a voice self-test at start-up. |