{ "id": "voice-call", "uiHints": { "provider": { "label": "Provider", "help": "Use twilio, telnyx, or mock for dev/no-network." }, "fromNumber": { "label": "From Number", "placeholder": "+15550001234" }, "toNumber": { "label": "Default To Number", "placeholder": "+15550001234" }, "inboundPolicy": { "label": "Inbound Policy" }, "allowFrom": { "label": "Inbound Allowlist" }, "inboundGreeting": { "label": "Inbound Greeting", "advanced": true }, "telnyx.apiKey": { "label": "Telnyx API Key", "sensitive": true }, "telnyx.connectionId": { "label": "Telnyx Connection ID" }, "telnyx.publicKey": { "label": "Telnyx Public Key", "sensitive": true }, "twilio.accountSid": { "label": "Twilio Account SID" }, "twilio.authToken": { "label": "Twilio Auth Token", "sensitive": true }, "outbound.defaultMode": { "label": "Default Call Mode" }, "outbound.notifyHangupDelaySec": { "label": "Notify Hangup Delay (sec)", "advanced": true }, "serve.port": { "label": "Webhook Port" }, "serve.bind": { "label": "Webhook Bind" }, "serve.path": { "label": "Webhook Path" }, "tailscale.mode": { "label": "Tailscale Mode", "advanced": true }, "tailscale.path": { "label": "Tailscale Path", "advanced": true }, "tunnel.provider": { "label": "Tunnel Provider", "advanced": true }, "tunnel.ngrokAuthToken": { "label": "ngrok Auth Token", "sensitive": true, "advanced": true }, "tunnel.ngrokDomain": { "label": "ngrok Domain", "advanced": true }, "tunnel.allowNgrokFreeTierLoopbackBypass": { "label": "Allow ngrok Free Tier (Loopback Bypass)", "advanced": true }, "streaming.enabled": { "label": "Enable Streaming", "advanced": true }, "streaming.openaiApiKey": { "label": "OpenAI Realtime API Key", "sensitive": true, "advanced": true }, "streaming.sttModel": { "label": "Realtime STT Model", "advanced": true }, "streaming.streamPath": { "label": "Media Stream Path", "advanced": true }, "tts.provider": { "label": "TTS Provider Override", "help": "Deep-merges with messages.tts (Edge is ignored for calls).", "advanced": true }, "tts.openai.model": { "label": "OpenAI TTS Model", "advanced": true }, "tts.openai.voice": { "label": "OpenAI TTS Voice", "advanced": true }, "tts.openai.apiKey": { "label": "OpenAI API Key", "sensitive": true, "advanced": true }, "tts.elevenlabs.modelId": { "label": "ElevenLabs Model ID", "advanced": true }, "tts.elevenlabs.voiceId": { "label": "ElevenLabs Voice ID", "advanced": true }, "tts.elevenlabs.apiKey": { "label": "ElevenLabs API Key", "sensitive": true, "advanced": true }, "tts.elevenlabs.baseUrl": { "label": "ElevenLabs Base URL", "advanced": true }, "publicUrl": { "label": "Public Webhook URL", "advanced": true }, "skipSignatureVerification": { "label": "Skip Signature Verification", "advanced": true }, "store": { "label": "Call Log Store Path", "advanced": true }, "responseModel": { "label": "Response Model", "advanced": true }, "responseSystemPrompt": { "label": "Response System Prompt", "advanced": true }, "responseTimeoutMs": { "label": "Response Timeout (ms)", "advanced": true } }, "configSchema": { "type": "object", "additionalProperties": false, "properties": { "enabled": { "type": "boolean" }, "provider": { "type": "string", "enum": [ "telnyx", "twilio", "plivo", "mock" ] }, "telnyx": { "type": "object", "additionalProperties": false, "properties": { "apiKey": { "type": "string" }, "connectionId": { "type": "string" }, "publicKey": { "type": "string" } } }, "twilio": { "type": "object", "additionalProperties": false, "properties": { "accountSid": { "type": "string" }, "authToken": { "type": "string" } } }, "plivo": { "type": "object", "additionalProperties": false, "properties": { "authId": { "type": "string" }, "authToken": { "type": "string" } } }, "fromNumber": { "type": "string", "pattern": "^\\+[1-9]\\d{1,14}$" }, "toNumber": { "type": "string", "pattern": "^\\+[1-9]\\d{1,14}$" }, "inboundPolicy": { "type": "string", "enum": [ "disabled", "allowlist", "pairing", "open" ] }, "allowFrom": { "type": "array", "items": { "type": "string", "pattern": "^\\+[1-9]\\d{1,14}$" } }, "inboundGreeting": { "type": "string" }, "outbound": { "type": "object", "additionalProperties": false, "properties": { "defaultMode": { "type": "string", "enum": [ "notify", "conversation" ] }, "notifyHangupDelaySec": { "type": "integer", "minimum": 0 } } }, "maxDurationSeconds": { "type": "integer", "minimum": 1 }, "silenceTimeoutMs": { "type": "integer", "minimum": 1 }, "transcriptTimeoutMs": { "type": "integer", "minimum": 1 }, "ringTimeoutMs": { "type": "integer", "minimum": 1 }, "maxConcurrentCalls": { "type": "integer", "minimum": 1 }, "serve": { "type": "object", "additionalProperties": false, "properties": { "port": { "type": "integer", "minimum": 1 }, "bind": { "type": "string" }, "path": { "type": "string" } } }, "tailscale": { "type": "object", "additionalProperties": false, "properties": { "mode": { "type": "string", "enum": [ "off", "serve", "funnel" ] }, "path": { "type": "string" } } }, "tunnel": { "type": "object", "additionalProperties": false, "properties": { "provider": { "type": "string", "enum": [ "none", "ngrok", "tailscale-serve", "tailscale-funnel" ] }, "ngrokAuthToken": { "type": "string" }, "ngrokDomain": { "type": "string" }, "allowNgrokFreeTierLoopbackBypass": { "type": "boolean" } } }, "streaming": { "type": "object", "additionalProperties": false, "properties": { "enabled": { "type": "boolean" }, "sttProvider": { "type": "string", "enum": [ "openai-realtime" ] }, "openaiApiKey": { "type": "string" }, "sttModel": { "type": "string" }, "silenceDurationMs": { "type": "integer", "minimum": 1 }, "vadThreshold": { "type": "number", "minimum": 0, "maximum": 1 }, "streamPath": { "type": "string" } } }, "publicUrl": { "type": "string" }, "skipSignatureVerification": { "type": "boolean" }, "stt": { "type": "object", "additionalProperties": false, "properties": { "provider": { "type": "string", "enum": [ "openai" ] }, "model": { "type": "string" } } }, "tts": { "type": "object", "additionalProperties": false, "properties": { "auto": { "type": "string", "enum": [ "off", "always", "inbound", "tagged" ] }, "enabled": { "type": "boolean" }, "mode": { "type": "string", "enum": [ "final", "all" ] }, "provider": { "type": "string", "enum": [ "openai", "elevenlabs", "edge" ] }, "summaryModel": { "type": "string" }, "modelOverrides": { "type": "object", "additionalProperties": false, "properties": { "enabled": { "type": "boolean" }, "allowText": { "type": "boolean" }, "allowProvider": { "type": "boolean" }, "allowVoice": { "type": "boolean" }, "allowModelId": { "type": "boolean" }, "allowVoiceSettings": { "type": "boolean" }, "allowNormalization": { "type": "boolean" }, "allowSeed": { "type": "boolean" } } }, "elevenlabs": { "type": "object", "additionalProperties": false, "properties": { "apiKey": { "type": "string" }, "baseUrl": { "type": "string" }, "voiceId": { "type": "string" }, "modelId": { "type": "string" }, "seed": { "type": "integer", "minimum": 0, "maximum": 4294967295 }, "applyTextNormalization": { "type": "string", "enum": [ "auto", "on", "off" ] }, "languageCode": { "type": "string" }, "voiceSettings": { "type": "object", "additionalProperties": false, "properties": { "stability": { "type": "number", "minimum": 0, "maximum": 1 }, "similarityBoost": { "type": "number", "minimum": 0, "maximum": 1 }, "style": { "type": "number", "minimum": 0, "maximum": 1 }, "useSpeakerBoost": { "type": "boolean" }, "speed": { "type": "number", "minimum": 0.5, "maximum": 2 } } } } }, "openai": { "type": "object", "additionalProperties": false, "properties": { "apiKey": { "type": "string" }, "model": { "type": "string" }, "voice": { "type": "string" } } }, "edge": { "type": "object", "additionalProperties": false, "properties": { "enabled": { "type": "boolean" }, "voice": { "type": "string" }, "lang": { "type": "string" }, "outputFormat": { "type": "string" }, "pitch": { "type": "string" }, "rate": { "type": "string" }, "volume": { "type": "string" }, "saveSubtitles": { "type": "boolean" }, "proxy": { "type": "string" }, "timeoutMs": { "type": "integer", "minimum": 1000, "maximum": 120000 } } }, "prefsPath": { "type": "string" }, "maxTextLength": { "type": "integer", "minimum": 1 }, "timeoutMs": { "type": "integer", "minimum": 1000, "maximum": 120000 } } }, "store": { "type": "string" }, "responseModel": { "type": "string" }, "responseSystemPrompt": { "type": "string" }, "responseTimeoutMs": { "type": "integer", "minimum": 1 } } } }