Spaces:
Running
Running
| { | |
| "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 | |
| } | |
| } | |
| } | |
| } | |