Some checks failed
ClawSweeper Dispatch / dispatch (push) Has been cancelled
CodeQL / Security High (actions) (push) Has been cancelled
CodeQL / Security High (channel-runtime-boundary) (push) Has been cancelled
CodeQL / Security High (core-auth-secrets) (push) Has been cancelled
CodeQL / Security High (mcp-process-tool-boundary) (push) Has been cancelled
CodeQL / Security High (network-ssrf-boundary) (push) Has been cancelled
CodeQL / Security High (plugin-trust-boundary) (push) Has been cancelled
CodeQL / Security High (process-exec-boundary) (push) Has been cancelled
Docs Sync Publish Repo / sync-publish-repo (push) Has been cancelled
Docs / docs (push) Has been cancelled
OpenClaw Stable Main Closeout / Resolve stable release closeout inputs (push) Has been cancelled
OpenClaw Stable Main Closeout / Verify stable main closeout (push) Has been cancelled
Workflow Sanity / no-tabs (push) Has been cancelled
Workflow Sanity / actionlint (push) Has been cancelled
Workflow Sanity / generated-doc-baselines (push) Has been cancelled
CI / runner-admission (push) Has been cancelled
CI / preflight (push) Has been cancelled
CI / security-fast (push) Has been cancelled
CI / pnpm-store-warmup (push) Has been cancelled
CI / build-artifacts (push) Has been cancelled
CI / native-i18n (push) Has been cancelled
CI / ${{ matrix.check_name }} (push) Has been cancelled
CI / ${{ matrix.checkName }} (push) Has been cancelled
CI / checks-node-compat-node22 (push) Has been cancelled
CI / check-bundled-channel-config-metadata (push) Has been cancelled
CI / check-dependencies (push) Has been cancelled
CI / check-guards (push) Has been cancelled
CI / check-lint (push) Has been cancelled
CI / check-prod-types (push) Has been cancelled
CI / check-shrinkwrap (push) Has been cancelled
CI / check-test-types (push) Has been cancelled
CI / check-additional-boundaries-a (push) Has been cancelled
CI / check-additional-boundaries-bcd (push) Has been cancelled
CI / check-additional-extension-bundled (push) Has been cancelled
CI / check-additional-extension-channels (push) Has been cancelled
CI / check-additional-extension-package-boundary (push) Has been cancelled
CI / check-additional-runtime-topology-architecture (push) Has been cancelled
CI / check-session-accessor-boundary (push) Has been cancelled
CI / check-session-transcript-reader-boundary (push) Has been cancelled
CI / check-docs (push) Has been cancelled
CI / skills-python (push) Has been cancelled
CI / macos-swift (push) Has been cancelled
CI / ios-build (push) Has been cancelled
CI / ci-timings-summary (push) Has been cancelled
Native App Locale Refresh / Refresh native fa (push) Has been cancelled
Native App Locale Refresh / Refresh native fr (push) Has been cancelled
Native App Locale Refresh / Refresh native hi (push) Has been cancelled
Native App Locale Refresh / Refresh native id (push) Has been cancelled
Native App Locale Refresh / Refresh native it (push) Has been cancelled
Native App Locale Refresh / Refresh native ja-JP (push) Has been cancelled
Control UI Locale Refresh / plan (push) Has been cancelled
Control UI Locale Refresh / Refresh ${{ matrix.locale }} (push) Has been cancelled
Control UI Locale Refresh / Commit control UI locale refresh (push) Has been cancelled
Live Media Runner Image / Build live media runner image (push) Has been cancelled
Native App Locale Refresh / Refresh native ar (push) Has been cancelled
Native App Locale Refresh / Refresh native de (push) Has been cancelled
Native App Locale Refresh / Refresh native es (push) Has been cancelled
Native App Locale Refresh / Refresh native ko (push) Has been cancelled
Native App Locale Refresh / Refresh native nl (push) Has been cancelled
Native App Locale Refresh / Refresh native pl (push) Has been cancelled
Native App Locale Refresh / Refresh native pt-BR (push) Has been cancelled
Native App Locale Refresh / Refresh native ru (push) Has been cancelled
Native App Locale Refresh / Refresh native sv (push) Has been cancelled
Native App Locale Refresh / Refresh native th (push) Has been cancelled
Native App Locale Refresh / Refresh native tr (push) Has been cancelled
Native App Locale Refresh / Refresh native uk (push) Has been cancelled
Native App Locale Refresh / Refresh native vi (push) Has been cancelled
Native App Locale Refresh / Refresh native zh-CN (push) Has been cancelled
Native App Locale Refresh / Refresh native zh-TW (push) Has been cancelled
Native App Locale Refresh / Commit native locale refresh (push) Has been cancelled
Plugin Init Scaffold Validation / Validate provider scaffold (push) Has been cancelled
Plugin NPM Release / preview_plugins_npm (push) Has been cancelled
Plugin NPM Release / Validate release publish approval (push) Has been cancelled
Plugin NPM Release / preview_plugin_pack (push) Has been cancelled
Plugin NPM Release / publish_plugins_npm (push) Has been cancelled
Sandbox Common Smoke / sandbox-common-smoke (push) Has been cancelled
Website Installer Sync / static (push) Has been cancelled
Website Installer Sync / linux-docker (push) Has been cancelled
Website Installer Sync / macos-installer (push) Has been cancelled
Website Installer Sync / windows-installer (push) Has been cancelled
Website Installer Sync / sync-website (push) Has been cancelled
Adolf is a fork/vendored clone of github.com/openclaw/openclaw (v2026.6.11), free to diverge. Tree copied sans upstream .git; upstream remote added for future syncs. Node pinned to 24 (.nvmrc); engines already require >=22.19. Preserves docs/ARCHITECTURE.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LeqyaxJF2nbRXJtae2kNB2
915 lines
24 KiB
JSON
915 lines
24 KiB
JSON
{
|
|
"id": "voice-call",
|
|
"name": "Voice Call",
|
|
"description": "OpenClaw voice-call plugin for Twilio, Telnyx, and Plivo phone calls.",
|
|
"skills": ["./skills"],
|
|
"commandAliases": [{ "name": "voicecall" }],
|
|
"activation": {
|
|
"onStartup": true,
|
|
"onCommands": ["voicecall"]
|
|
},
|
|
"contracts": {
|
|
"tools": ["voice_call"]
|
|
},
|
|
"channelEnvVars": {
|
|
"voice-call": [
|
|
"TELNYX_API_KEY",
|
|
"TELNYX_CONNECTION_ID",
|
|
"TELNYX_PUBLIC_KEY",
|
|
"TWILIO_ACCOUNT_SID",
|
|
"TWILIO_AUTH_TOKEN",
|
|
"TWILIO_FROM_NUMBER",
|
|
"PLIVO_AUTH_ID",
|
|
"PLIVO_AUTH_TOKEN",
|
|
"NGROK_AUTHTOKEN",
|
|
"NGROK_DOMAIN"
|
|
]
|
|
},
|
|
"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
|
|
},
|
|
"numbers": {
|
|
"label": "Per-number Routing",
|
|
"help": "Inbound overrides keyed by dialed E.164 number.",
|
|
"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.provider": {
|
|
"label": "Streaming Provider",
|
|
"help": "Uses the first registered realtime transcription provider when unset.",
|
|
"advanced": true
|
|
},
|
|
"streaming.providers": {
|
|
"label": "Streaming Provider Config",
|
|
"advanced": true
|
|
},
|
|
"streaming.streamPath": {
|
|
"label": "Media Stream Path",
|
|
"advanced": true
|
|
},
|
|
"realtime.enabled": {
|
|
"label": "Enable Realtime Voice",
|
|
"advanced": true
|
|
},
|
|
"realtime.provider": {
|
|
"label": "Realtime Voice Provider",
|
|
"help": "Uses the first registered realtime voice provider when unset.",
|
|
"advanced": true
|
|
},
|
|
"realtime.streamPath": {
|
|
"label": "Realtime Stream Path",
|
|
"advanced": true
|
|
},
|
|
"realtime.instructions": {
|
|
"label": "Realtime Instructions",
|
|
"advanced": true
|
|
},
|
|
"realtime.toolPolicy": {
|
|
"label": "Realtime Tool Policy",
|
|
"help": "Controls the shared openclaw_agent_consult tool.",
|
|
"advanced": true
|
|
},
|
|
"realtime.consultPolicy": {
|
|
"label": "Realtime Consult Policy",
|
|
"help": "Guides when the realtime voice model should call openclaw_agent_consult.",
|
|
"advanced": true
|
|
},
|
|
"realtime.consultThinkingLevel": {
|
|
"label": "Consult Thinking Level",
|
|
"help": "Optional override for the regular agent run behind realtime openclaw_agent_consult calls.",
|
|
"advanced": true
|
|
},
|
|
"realtime.consultFastMode": {
|
|
"label": "Consult Fast Mode",
|
|
"help": "Optional fast mode override for the regular agent run behind realtime openclaw_agent_consult calls.",
|
|
"advanced": true
|
|
},
|
|
"realtime.fastContext.enabled": {
|
|
"label": "Enable Fast Realtime Context",
|
|
"help": "Searches memory/session context before the full consult agent.",
|
|
"advanced": true
|
|
},
|
|
"realtime.fastContext.timeoutMs": {
|
|
"label": "Fast Context Timeout",
|
|
"advanced": true
|
|
},
|
|
"realtime.fastContext.maxResults": {
|
|
"label": "Fast Context Result Limit",
|
|
"advanced": true
|
|
},
|
|
"realtime.fastContext.sources": {
|
|
"label": "Fast Context Sources",
|
|
"advanced": true
|
|
},
|
|
"realtime.fastContext.fallbackToConsult": {
|
|
"label": "Fallback To Full Consult",
|
|
"advanced": true
|
|
},
|
|
"realtime.agentContext.enabled": {
|
|
"label": "Enable Agent Voice Context",
|
|
"help": "Injects a compact agent identity and workspace context capsule into realtime voice instructions.",
|
|
"advanced": true
|
|
},
|
|
"realtime.agentContext.maxChars": {
|
|
"label": "Agent Voice Context Limit",
|
|
"advanced": true
|
|
},
|
|
"realtime.agentContext.includeIdentity": {
|
|
"label": "Include Agent Identity",
|
|
"advanced": true
|
|
},
|
|
"realtime.agentContext.includeWorkspaceFiles": {
|
|
"label": "Include Agent Workspace Files",
|
|
"advanced": true
|
|
},
|
|
"realtime.agentContext.files": {
|
|
"label": "Agent Voice Context Files",
|
|
"advanced": true
|
|
},
|
|
"realtime.providers": {
|
|
"label": "Realtime Provider Config",
|
|
"advanced": true
|
|
},
|
|
"tts.provider": {
|
|
"label": "TTS Provider Override",
|
|
"help": "Deep-merges with messages.tts (Microsoft is ignored for calls).",
|
|
"advanced": true
|
|
},
|
|
"tts.providers": {
|
|
"label": "TTS Provider Config",
|
|
"advanced": true
|
|
},
|
|
"publicUrl": {
|
|
"label": "Public Webhook URL",
|
|
"advanced": true
|
|
},
|
|
"skipSignatureVerification": {
|
|
"label": "Skip Signature Verification",
|
|
"advanced": true
|
|
},
|
|
"store": {
|
|
"label": "Call Log Store Path",
|
|
"advanced": true
|
|
},
|
|
"sessionScope": {
|
|
"label": "Session Scope",
|
|
"help": "Use per-phone to preserve caller memory across calls, or per-call to isolate every call into a fresh voice session."
|
|
},
|
|
"responseModel": {
|
|
"label": "Response Model",
|
|
"help": "Optional override. Falls back to the runtime default model when unset.",
|
|
"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", "object"]
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
},
|
|
"numbers": {
|
|
"type": "object",
|
|
"propertyNames": {
|
|
"pattern": "^\\+[1-9]\\d{1,14}$"
|
|
},
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"inboundGreeting": {
|
|
"type": "string"
|
|
},
|
|
"tts": {
|
|
"$ref": "#/properties/tts"
|
|
},
|
|
"agentId": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"responseModel": {
|
|
"type": "string"
|
|
},
|
|
"responseSystemPrompt": {
|
|
"type": "string"
|
|
},
|
|
"responseTimeoutMs": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"outbound": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"defaultMode": {
|
|
"type": "string",
|
|
"enum": ["notify", "conversation"]
|
|
},
|
|
"notifyHangupDelaySec": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
}
|
|
}
|
|
},
|
|
"maxDurationSeconds": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"staleCallReaperSeconds": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
},
|
|
"webhookSecurity": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"allowedHosts": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"trustForwardingHeaders": {
|
|
"type": "boolean"
|
|
},
|
|
"trustedProxyIPs": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"streaming": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"provider": {
|
|
"type": "string"
|
|
},
|
|
"streamPath": {
|
|
"type": "string"
|
|
},
|
|
"providers": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"preStartTimeoutMs": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"maxPendingConnections": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"maxPendingConnectionsPerIp": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"maxConnections": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
}
|
|
}
|
|
},
|
|
"realtime": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"provider": {
|
|
"type": "string"
|
|
},
|
|
"streamPath": {
|
|
"type": "string"
|
|
},
|
|
"instructions": {
|
|
"type": "string"
|
|
},
|
|
"toolPolicy": {
|
|
"type": "string",
|
|
"enum": ["safe-read-only", "owner", "none"]
|
|
},
|
|
"consultPolicy": {
|
|
"type": "string",
|
|
"enum": ["auto", "substantive", "always"]
|
|
},
|
|
"consultThinkingLevel": {
|
|
"type": "string",
|
|
"enum": ["off", "minimal", "low", "medium", "high", "xhigh", "adaptive", "max"]
|
|
},
|
|
"consultFastMode": {
|
|
"type": "boolean"
|
|
},
|
|
"tools": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": ["function"]
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"parameters": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": ["object"]
|
|
},
|
|
"properties": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
},
|
|
"required": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"required": ["type", "properties"]
|
|
}
|
|
},
|
|
"required": ["type", "name", "description", "parameters"]
|
|
}
|
|
},
|
|
"fastContext": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"timeoutMs": {
|
|
"type": "number",
|
|
"minimum": 1
|
|
},
|
|
"maxResults": {
|
|
"type": "number",
|
|
"minimum": 1
|
|
},
|
|
"sources": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "string",
|
|
"enum": ["memory", "sessions"]
|
|
}
|
|
},
|
|
"fallbackToConsult": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"agentContext": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"maxChars": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"includeIdentity": {
|
|
"type": "boolean"
|
|
},
|
|
"includeWorkspaceFiles": {
|
|
"type": "boolean"
|
|
},
|
|
"files": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"providers": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"publicUrl": {
|
|
"type": "string"
|
|
},
|
|
"skipSignatureVerification": {
|
|
"type": "boolean"
|
|
},
|
|
"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"
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
},
|
|
"providers": {
|
|
"type": "object",
|
|
"properties": {
|
|
"openai": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"apiKey": {
|
|
"type": ["string", "object"]
|
|
},
|
|
"baseUrl": {
|
|
"type": "string"
|
|
},
|
|
"model": {
|
|
"type": "string"
|
|
},
|
|
"voice": {
|
|
"type": "string"
|
|
},
|
|
"speed": {
|
|
"type": "number",
|
|
"minimum": 0.25,
|
|
"maximum": 4.0
|
|
},
|
|
"instructions": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"elevenlabs": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"apiKey": {
|
|
"type": ["string", "object"]
|
|
},
|
|
"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
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"microsoft": {
|
|
"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
|
|
}
|
|
}
|
|
},
|
|
"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
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"apiKey": {
|
|
"type": ["string", "object"]
|
|
}
|
|
},
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"prefsPath": {
|
|
"type": "string"
|
|
},
|
|
"maxTextLength": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"timeoutMs": {
|
|
"type": "integer",
|
|
"minimum": 1000,
|
|
"maximum": 120000
|
|
}
|
|
}
|
|
},
|
|
"store": {
|
|
"type": "string"
|
|
},
|
|
"sessionScope": {
|
|
"type": "string",
|
|
"enum": ["per-phone", "per-call"]
|
|
},
|
|
"responseModel": {
|
|
"type": "string"
|
|
},
|
|
"responseSystemPrompt": {
|
|
"type": "string"
|
|
},
|
|
"responseTimeoutMs": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
}
|
|
}
|
|
},
|
|
"configContracts": {
|
|
"compatibilityMigrationPaths": ["plugins.entries.voice-call.config"],
|
|
"secretInputs": {
|
|
"paths": [
|
|
{ "path": "twilio.authToken", "expected": "string" },
|
|
{ "path": "realtime.providers.*.apiKey", "expected": "string" },
|
|
{ "path": "streaming.providers.*.apiKey", "expected": "string" },
|
|
{ "path": "tts.providers.*.apiKey", "expected": "string" }
|
|
]
|
|
}
|
|
}
|
|
}
|