Updates an existing AI voice agent with a new configuration. This is a full replacement operation
where all fields in the request body replace the existing configuration.
ElevenLabs, Cartesia, Inworld and xAI voice IDs are checked with the provider. A confirmed missing voice returns 400;
unavailable checks do not prevent saving. Other providers are not checked.
Request to create or update an agent with full configuration including name, description, behavior settings, call schedule, and inbound routing. Contains all agent properties such as enabled status, display name, optional description, complete agent configuration (TTS, LLM, STT, outbound SIP for making calls, webhooks, features, MCP connections, tools), default prompt variables in AdditionalData, time-based schedule for when outbound calls can be made, and inbound call routing configuration.
Complete configuration for the agent's behavior including voice settings (TTS), language model (LLM), speech recognition (STT), outbound SIP configuration for making calls, webhooks for event notifications, features like RAG and transfers, MCP connections for external services, and custom tools. This defines how the agent will interact during conversations and what capabilities it has.
Optional description explaining the agent's purpose, behavior, or use case. Useful for documentation and team collaboration to understand what this agent is designed to do.
Default data for variable interpolation in agent prompts. Values can be referenced in prompts using {{variableName}} syntax. These serve as default values for the agent and can be overridden on a per-call basis when enqueueing calls.
Time-based schedule defining when the agent can make outbound calls. Specifies available time slots for each day of the week and the timezone for schedule interpretation. Scheduled calls will only be placed during these time windows.
Configuration for routing inbound calls to this agent. To configure phone number routing for incoming calls, use the SIP phone numbers API to assign a phone number to this agent instead of using this field directly.
Expected version number for optimistic concurrency control. If provided and does not match the current server version, the update will be rejected with a 409 Conflict response containing the current server state. Omit to skip version checking (not recommended for UI clients).
Response
Agent updated successfully
Complete agent details including all configuration, identifiers, timestamps, schedule, and inbound routing. Contains the full agent state including enabled status, display name, optional description, complete agent configuration (TTS, LLM, STT, outbound SIP for making calls, webhooks, features, MCP connections, tools), default prompt variables in AdditionalData, unique identifiers, creation and update timestamps, call schedule for outbound calls, and inbound call routing configuration.
Complete configuration for the agent's behavior including voice settings (TTS), language model (LLM), speech recognition (STT), outbound SIP configuration for making calls, webhooks for event notifications, features like RAG and transfers, MCP connections for external services, and custom tools. This defines how the agent will interact during conversations and what capabilities it has.
Inbound call routing configuration showing which phone number routes incoming calls to this agent. Includes the unique configuration ID, assigned phone number, SIP URI for routing, and trunk URI. To modify phone number routing, use the SIP phone numbers API.
Time-based schedule defining when the agent can make outbound calls. Specifies available time slots for each day of the week and the timezone for schedule interpretation. Scheduled calls will only be placed during these time windows.
Optional description explaining the agent's purpose, behavior, or use case. Useful for documentation and team collaboration to understand what this agent is designed to do.
Default data for variable interpolation in agent prompts. Values can be referenced in prompts using {{variableName}} syntax. These serve as default values for the agent and can be overridden on a per-call basis when enqueueing calls.
Show child attributes
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Dasha BlackBox Documentation","description":"Build, deploy, and monitor voice AI agents with Dasha BlackBox. Complete documentation for creating intelligent conversational AI agents with advanced voice capabilities.","colors":{"primary":"#4F46E5","light":"#6366F1","dark":"#312E81"},"logo":{"light":"https://mintcdn.com/dasha-628f9d33/OIOU150RbPNcpw0P/docs/logo-wordmark-light.svg?fit=max\u0026auto=format\u0026n=OIOU150RbPNcpw0P\u0026q=85\u0026s=d09a8bf9e3455eda1fccc003884b3cdf","dark":"https://mintcdn.com/dasha-628f9d33/OIOU150RbPNcpw0P/docs/logo-wordmark-dark.svg?fit=max\u0026auto=format\u0026n=OIOU150RbPNcpw0P\u0026q=85\u0026s=1a3ce52b54cb5126d7f2cd2a42c27fa3","href":"https://blackbox.dasha.ai"},"favicon":"https://mintcdn.com/dasha-628f9d33/PM9rl5FBZe1J7dH8/docs/logo.svg?fit=max\u0026auto=format\u0026n=PM9rl5FBZe1J7dH8\u0026q=85\u0026s=21c9365f53a83564419467531fb20a5d","api":{"playground":{"display":"interactive"},"examples":{"languages":["javascript","curl","python"]}},"navbar":{"links":[{"href":"https://dasha.ai","label":"Explore other Dasha products"},{"href":"mailto:support+blackbox@dasha.ai","label":"Get Support"}],"primary":{"type":"button","label":"Go to Dashboard","href":"https://blackbox.dasha.ai"}},"footer":{"socials":{"x":"https://x.com/dashaai_","linkedin":"https://www.linkedin.com/company/dashaai","github":"https://github.com/dasha-ai"},"links":[{"header":"Resources","items":[{"label":"Main Website","href":"https://dasha.ai"},{"label":"Dashboard","href":"https://blackbox.dasha.ai"},{"label":"Status","href":"https://status.dasha.ai"}]},{"header":"Support","items":[{"label":"Get Support","href":"mailto:support+blackbox@dasha.ai"}]}]},"search":{"prompt":"Search Dasha BlackBox docs..."},"seo":{"metatags":{"canonical":"https://blackbox.dasha.ai"},"indexing":"navigable"},"styling":{"eyebrows":"breadcrumbs","codeblocks":{"theme":{"light":"github-light","dark":"github-dark"}},"latex":true},"integrations":{"posthog":{"apiKey":"phc_bF01JhDcDBEhCGS2wY8QMkGqrzgBQ25KxhcziHgwDvm","apiHost":"https://us.i.posthog.com"}},"errors":{"404":{"redirect":false,"title":"Page Not Found","description":"This page doesn't exist. Try using the search or navigation to find what you're looking for."}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"global":{"anchors":[{"anchor":"Status","icon":"chart-line","href":"https://status.dasha.ai"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"dasha-628f9d33","hasAudioNarration":false,"actualSubdomain":"dasha-628f9d33","customDomains":["docs.blackbox.dasha.ai"],"gitSource":{"type":"github","owner":"dasha-ai","repo":"blackbox-docs","deployBranch":"production","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aeafa53b434e7d02a3a2567","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"API Reference","count":119},{"language":"default","tag":"Documentation","count":64},{"language":"default","tag":"Create","count":19},{"language":"default","tag":"Advanced Features","count":18},{"language":"default","tag":"Deploy","count":11},{"language":"default","tag":"Introduction","count":9},{"language":"default","tag":"Calls","count":9},{"language":"default","tag":"Misc","count":9},{"language":"default","tag":"WebIntegrations","count":9},{"language":"default","tag":"Document","count":8}]},"assistantConfig":{"deflection":{"enabled":true,"email":"support@dasha.ai"}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"docs/api-reference/agents/update-agent","slug":"/docs/api-reference/agents/update-agent","pageMetadata":{"title":"Update agent","description":"Updates an existing AI voice agent with a new configuration. This is a full replacement operation\nwhere all fields in the request body replace the existing configuration.\nElevenLabs, Cartesia, Inworld and xAI voice IDs are checked with the provider. A confirmed missing voice returns 400;\nunavailable checks do not prevent saving. Other providers are not checked.","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json put /api/v1/agents/{agentId}","href":"/docs/api-reference/agents/update-agent","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Updates an existing AI voice agent with a new configuration. This is a full replacement operation\\nwhere all fields in the request body replace the existing configuration.\\nElevenLabs, Cartesia, Inworld and xAI voice IDs are checked with the provider. A confirmed missing voice returns 400;\\nunavailable checks do not prevent saving. Other providers are not checked.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={li:`li`,ol:`ol`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:`This is a full replacement operation (PUT). All fields in the request body replace the existing configuration.`}),`\n`,_jsx(Heading,{level:`2`,id:`best-practice-for-partial-updates`,children:`Best Practice for Partial Updates`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`GET the current agent configuration`}),`\n`,_jsx(_components.li,{children:`Modify only the fields you want to change`}),`\n`,_jsx(_components.li,{children:`PUT the complete updated configuration back`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`important-notes`,children:`Important Notes`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Omitted fields will be set to their default values or null`}),`\n`,_jsx(_components.li,{children:`Active calls continue with the old configuration until completion`}),`\n`,_jsx(_components.li,{children:`Changes take effect immediately for new calls`}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"github-light","dark":"github-dark"}},"config":{},"pageMetadata":{"title":"Update agent","description":"Updates an existing AI voice agent with a new configuration. This is a full replacement operation\nwhere all fields in the request body replace the existing configuration.\nElevenLabs, Cartesia, Inworld and xAI voice IDs are checked with the provider. A confirmed missing voice returns 400;\nunavailable checks do not prevent saving. Other providers are not checked.","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json put /api/v1/agents/{agentId}","href":"/docs/api-reference/agents/update-agent","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Best Practice for Partial Updates","slug":"best-practice-for-partial-updates","depth":2,"children":[]},{"title":"Important Notes","slug":"important-notes","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Agents"],"summary":"Update agent","description":"Updates an existing AI voice agent with a new configuration. This is a full replacement operation\nwhere all fields in the request body replace the existing configuration.\nElevenLabs, Cartesia, Inworld and xAI voice IDs are checked with the provider. A confirmed missing voice returns 400;\nunavailable checks do not prevent saving. Other providers are not checked.","parameters":["99390fc9-7baf-44b2-bdcc-f22d1127c14d"],"requestBody":"f7f1f156-2bb4-44a0-9923-53022adf8380","responses":{"200":"603def63-2e4a-42ad-8a7a-1e928ea6d551","400":"0b75638b-dbc3-4e0d-b9b4-6d1e18da8cb8","401":"9bce123e-fecd-4c93-b506-ed5ff9037bc7","403":"8ef4357e-9acf-4bbe-be0c-ef26b1608ad9","404":"628e5eb4-97b0-473c-8ad8-6edcb38ca65b","409":"f3a34d26-70ca-4027-91f4-71f63f5bb7bf","500":"0bc6cc84-5488-4914-998b-b28b3c6ecf3e"},"x-mint":{"content":"\u003cWarning>This is a full replacement operation (PUT). All fields in the request body replace the existing configuration.\u003c/Warning>\n\n## Best Practice for Partial Updates\n\n1. GET the current agent configuration\n2. Modify only the fields you want to change\n3. PUT the complete updated configuration back\n\n## Important Notes\n\n- Omitted fields will be set to their default values or null\n- Active calls continue with the old configuration until completion\n- Changes take effect immediately for new calls"},"method":"put","type":"path","servers":["5fb0835c-a4f0-4503-aebe-00595f89e21f"],"security":["438e7f68-a155-42fd-8675-9d1199ae2693","bcfc7084-0b9a-4851-80ea-de419eddc013"],"path":"/api/v1/agents/{agentId}","baseUrlOptions":["https://blackbox.dasha.ai"],"title":"Update agent","codeSamples":[],"requestExampleLanguages":["javascript","bash","python"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"99390fc9-7baf-44b2-bdcc-f22d1127c14d":{"name":"agentId","in":"path","description":"Agent identifier","required":true,"schema":{"type":"string","isRequired":true,"description":"Agent identifier","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"description":"Agent configuration","content":{"application/json":{"schema":{"type":"object","description":"Request to create or update an agent with full configuration including name, description, behavior settings, call schedule, and inbound routing. Contains all agent properties such as enabled status, display name, optional description, complete agent configuration (TTS, LLM, STT, outbound SIP for making calls, webhooks, features, MCP connections, tools), default prompt variables in AdditionalData, time-based schedule for when outbound calls can be made, and inbound call routing configuration.","required":["config","name"],"properties":{"name":{"maxLength":100,"minLength":1,"type":"string","description":"Display name for the agent. Used to identify the agent in the UI, logs, and API responses.","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"config":{"type":"object","description":"Complete configuration for the agent's behavior including voice settings (TTS), language model (LLM), speech recognition (STT), outbound SIP configuration for making calls, webhooks for event notifications, features like RAG and transfers, MCP connections for external services, and custom tools. This defines how the agent will interact during conversations and what capabilities it has.","required":["llmConfig","primaryLanguage","ttsConfig"],"properties":{"primaryLanguage":{"minLength":1,"type":"string","description":"Primary language for the agent's conversations. Uses language codes like \"en-US\", \"es-ES\", \"fr-FR\". This determines the default language for speech synthesis and recognition.","isRequired":true,"uniqueKey":"config.primaryLanguage","typeLabel":"string"},"ttsConfig":{"type":"object","description":"Text-to-speech configuration controlling how the agent's voice sounds. Includes voice provider selection, voice ID, speed, stability, and pronunciation dictionary settings. Defines the agent's vocal characteristics during conversations.","required":["vendor","voiceId"],"properties":{"voiceId":{"minLength":1,"type":"string","description":"Voice identifier from the selected vendor. Specifies which voice the agent uses for speech synthesis. Each vendor has different voice IDs representing distinct voice characteristics like gender, accent, and speaking style.","isRequired":true,"uniqueKey":"config.ttsConfig.voiceId","typeLabel":"string"},"vendor":{"minLength":1,"type":"string","description":"Text-to-speech vendor providing the voice synthesis service. Identifies which TTS provider to use such as ElevenLabs, Cartesia, Dasha, Inworld, Lmnt, or Google. Different vendors offer different voice qualities, latency characteristics, and pricing.","isRequired":true,"uniqueKey":"config.ttsConfig.vendor","typeLabel":"string"},"model":{"oneOf":[{"type":"string","description":"TTS model identifier for vendors that support multiple model versions. Allows selecting specific synthesis models or quality tiers when available from the vendor.","default":null,"uniqueKey":"config.ttsConfig.model.oneOf.0","typeLabel":"string"},{"type":"null","description":"TTS model identifier for vendors that support multiple model versions. Allows selecting specific synthesis models or quality tiers when available from the vendor.","default":null,"uniqueKey":"config.ttsConfig.model.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.model","typeLabel":"string | null"},"speed":{"oneOf":[{"type":"number","description":"Speech speed multiplier controlling how fast the agent speaks. Values above 1.0 increase speaking rate, values below 1.0 decrease it. Affects the overall pace of conversation and can be adjusted to match user preferences or content requirements.","format":"double","default":1,"uniqueKey":"config.ttsConfig.speed.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Speech speed multiplier controlling how fast the agent speaks. Values above 1.0 increase speaking rate, values below 1.0 decrease it. Affects the overall pace of conversation and can be adjusted to match user preferences or content requirements.","format":"double","default":1,"uniqueKey":"config.ttsConfig.speed.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.speed","typeLabel":"number\u003cdouble> | null"},"speedAdjustment":{"oneOf":[{"type":"object","description":"Speed adjustment settings controlling whether users can request the agent to speak faster or slower during conversations. Allows dynamic speed changes based on user feedback.","default":{"version":"v1","strategy":"OnRequest"},"required":["strategy"],"properties":{"strategy":{"type":"string","description":"Speed adjustment strategy determining when and how the agent can change its speaking rate. Controls whether speed adjustments are disabled entirely or enabled on user request.","enum":["Disabled","OnRequest"],"isRequired":true,"uniqueKey":"config.ttsConfig.speedAdjustment.oneOf.0.strategy","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"config.ttsConfig.speedAdjustment.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.ttsConfig.speedAdjustment.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.speedAdjustment","typeLabel":"object | null"},"vendorSpecificOptions":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.ttsConfig.vendorSpecificOptions.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Vendor-specific TTS options that are unique to particular speech synthesis providers. Allows passing custom parameters for advanced voice configuration that isn't covered by standard settings.","uniqueKey":"config.ttsConfig.vendorSpecificOptions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.ttsConfig.vendorSpecificOptions.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Vendor-specific TTS options that are unique to particular speech synthesis providers. Allows passing custom parameters for advanced voice configuration that isn't covered by standard settings.","uniqueKey":"config.ttsConfig.vendorSpecificOptions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.vendorSpecificOptions","typeLabel":"object | null"},"responsiveness":{"oneOf":[{"maximum":1,"minimum":0,"type":"number","description":"Response timing control determining how quickly the agent begins speaking after the user finishes. Range is 0 to 1, where higher values make the agent respond faster and lower values add more deliberate pauses. Affects the conversational rhythm and turn-taking behavior.","format":"double","default":null,"uniqueKey":"config.ttsConfig.responsiveness.oneOf.0","typeLabel":"number\u003cdouble>"},{"maximum":1,"minimum":0,"type":"null","description":"Response timing control determining how quickly the agent begins speaking after the user finishes. Range is 0 to 1, where higher values make the agent respond faster and lower values add more deliberate pauses. Affects the conversational rhythm and turn-taking behavior.","format":"double","default":null,"uniqueKey":"config.ttsConfig.responsiveness.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.responsiveness","typeLabel":"number\u003cdouble> | null"},"interruptionSensitivity":{"oneOf":[{"maximum":1,"minimum":0,"type":"number","description":"Controls how easily the user can interrupt the agent while it is speaking. Range is 0 to 1, where higher values make interruptions easier to trigger and lower values require more user speech before the agent stops. A value of 0 makes the agent non-interruptible by normal speech. When unset, the agent uses its default interruptible behavior (equivalent to 1).","format":"double","default":null,"uniqueKey":"config.ttsConfig.interruptionSensitivity.oneOf.0","typeLabel":"number\u003cdouble>"},{"maximum":1,"minimum":0,"type":"null","description":"Controls how easily the user can interrupt the agent while it is speaking. Range is 0 to 1, where higher values make interruptions easier to trigger and lower values require more user speech before the agent stops. A value of 0 makes the agent non-interruptible by normal speech. When unset, the agent uses its default interruptible behavior (equivalent to 1).","format":"double","default":null,"uniqueKey":"config.ttsConfig.interruptionSensitivity.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.interruptionSensitivity","typeLabel":"number\u003cdouble> | null"},"pronunciationDictionary":{"oneOf":[{"type":"object","description":"Reference to a pronunciation dictionary for customizing how specific words or phrases are pronounced. Allows correcting mispronunciations, defining custom pronunciations for brand names, or adjusting phonetic rendering for domain-specific terminology.","required":["hash","id"],"properties":{"id":{"minLength":1,"type":"string","description":"Unique identifier of the pronunciation dictionary to use. References a dictionary that has been created and uploaded to the system containing custom phonetic rules and pronunciation mappings.","isRequired":true,"uniqueKey":"config.ttsConfig.pronunciationDictionary.oneOf.0.id","typeLabel":"string"},"hash":{"minLength":1,"type":"string","description":"Content hash of the pronunciation dictionary for version tracking and cache invalidation. Ensures the correct version of the dictionary is applied and allows detecting when dictionary content has been updated.","isRequired":true,"uniqueKey":"config.ttsConfig.pronunciationDictionary.oneOf.0.hash","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.ttsConfig.pronunciationDictionary.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.ttsConfig.pronunciationDictionary.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.pronunciationDictionary","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.ttsConfig","typeLabel":"object"},"llmConfig":{"type":"object","description":"Language model configuration defining the agent's intelligence and conversation behavior. Includes model selection, system prompts, temperature, token limits, and conversation flow settings. Controls how the agent understands and responds to user input.","required":["model","prompt","vendor"],"properties":{"model":{"minLength":1,"type":"string","description":"Language model identifier. Specifies which model to use from the configured vendor.","isRequired":true,"uniqueKey":"config.llmConfig.model","typeLabel":"string"},"vendor":{"minLength":1,"type":"string","description":"Model vendor or provider identifier.","isRequired":true,"uniqueKey":"config.llmConfig.vendor","typeLabel":"string"},"prompt":{"minLength":1,"type":"string","description":"System prompt that defines the agent's personality, role, and behavior instructions. This prompt guides how the agent responds and interacts during conversations. Can reference variables from AdditionalData using {{variableName}} syntax.","isRequired":true,"uniqueKey":"config.llmConfig.prompt","typeLabel":"string"},"apiKey":{"oneOf":[{"type":"string","description":"API key for authenticating with the language model provider. Used to authorize requests to the vendor's API.","default":null,"uniqueKey":"config.llmConfig.apiKey.oneOf.0","typeLabel":"string"},{"type":"null","description":"API key for authenticating with the language model provider. Used to authorize requests to the vendor's API.","default":null,"uniqueKey":"config.llmConfig.apiKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.apiKey","typeLabel":"string | null"},"endpoint":{"oneOf":[{"type":"string","description":"Custom API endpoint URL for the language model. Use when connecting to self-hosted models or alternative API gateways instead of the default vendor endpoint.","default":null,"uniqueKey":"config.llmConfig.endpoint.oneOf.0","typeLabel":"string"},{"type":"null","description":"Custom API endpoint URL for the language model. Use when connecting to self-hosted models or alternative API gateways instead of the default vendor endpoint.","default":null,"uniqueKey":"config.llmConfig.endpoint.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.endpoint","typeLabel":"string | null"},"options":{"oneOf":[{"type":"object","description":"Advanced language model parameters including temperature, max tokens, top P, frequency/presence penalties, stop sequences, trailing prompt, reasoning mode, and retry settings. Controls the model's creativity, response length, and behavior characteristics.","properties":{"temperature":{"oneOf":[{"type":"number","description":"Temperature controls randomness in responses. Higher values (e.g., 0.8-1.0) make output more creative and varied, while lower values (e.g., 0.1-0.3) make it more focused and deterministic. Range is typically 0.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.temperature.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Temperature controls randomness in responses. Higher values (e.g., 0.8-1.0) make output more creative and varied, while lower values (e.g., 0.1-0.3) make it more focused and deterministic. Range is typically 0.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.temperature.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.temperature","typeLabel":"number\u003cdouble> | null"},"maxTokens":{"oneOf":[{"type":"integer","description":"Maximum number of tokens the model can generate in a response. Limits the length of the agent's replies to control costs and response times.","format":"int32","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.maxTokens.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum number of tokens the model can generate in a response. Limits the length of the agent's replies to control costs and response times.","format":"int32","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.maxTokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.maxTokens","typeLabel":"integer\u003cint32> | null"},"topP":{"oneOf":[{"type":"number","description":"Top P (nucleus sampling) controls diversity by considering only the most probable tokens whose cumulative probability reaches this threshold. Range is 0.0 to 1.0, where lower values make responses more focused.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.topP.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Top P (nucleus sampling) controls diversity by considering only the most probable tokens whose cumulative probability reaches this threshold. Range is 0.0 to 1.0, where lower values make responses more focused.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.topP.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.topP","typeLabel":"number\u003cdouble> | null"},"frequencyPenalty":{"oneOf":[{"type":"number","description":"Frequency penalty reduces repetition of tokens based on how often they've appeared in the response. Higher values (e.g., 0.5-1.0) discourage repetition more strongly. Range is typically -2.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.frequencyPenalty.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Frequency penalty reduces repetition of tokens based on how often they've appeared in the response. Higher values (e.g., 0.5-1.0) discourage repetition more strongly. Range is typically -2.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.frequencyPenalty.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.frequencyPenalty","typeLabel":"number\u003cdouble> | null"},"presencePenalty":{"oneOf":[{"type":"number","description":"Presence penalty reduces repetition by penalizing tokens that have already appeared, regardless of frequency. Encourages the model to discuss new topics. Range is typically -2.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.presencePenalty.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Presence penalty reduces repetition by penalizing tokens that have already appeared, regardless of frequency. Encourages the model to discuss new topics. Range is typically -2.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.presencePenalty.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.presencePenalty","typeLabel":"number\u003cdouble> | null"},"stop":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.llmConfig.options.oneOf.0.stop.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Stop sequences that cause the model to stop generating tokens. When the model encounters any of these strings, it will immediately stop generating further output.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.stop.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Stop sequences that cause the model to stop generating tokens. When the model encounters any of these strings, it will immediately stop generating further output.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.stop.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.stop","typeLabel":"string[] | null"},"trailingPrompt":{"oneOf":[{"type":"string","description":"Trailing prompt appended to the conversation context before the model generates a response. Useful for providing last-minute instructions or context.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.trailingPrompt.oneOf.0","typeLabel":"string"},{"type":"null","description":"Trailing prompt appended to the conversation context before the model generates a response. Useful for providing last-minute instructions or context.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.trailingPrompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.trailingPrompt","typeLabel":"string | null"},"reasoningMode":{"oneOf":[{"type":"string","description":"Reasoning mode for models that support structured thinking. Controls how the model approaches problem-solving and response generation.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningMode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Reasoning mode for models that support structured thinking. Controls how the model approaches problem-solving and response generation.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningMode.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningMode","typeLabel":"string | null"},"maxRetries":{"oneOf":[{"type":"integer","description":"Maximum number of retry attempts when API calls fail. Helps handle transient errors and rate limiting.","format":"int32","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.maxRetries.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum number of retry attempts when API calls fail. Helps handle transient errors and rate limiting.","format":"int32","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.maxRetries.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.maxRetries","typeLabel":"integer\u003cint32> | null"},"reasoningEffort":{"oneOf":[{"type":"string","description":"Reasoning effort level for models that support configurable thinking depth. Controls how much computational effort the model applies to reasoning through complex problems.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningEffort.oneOf.0","typeLabel":"string"},{"type":"null","description":"Reasoning effort level for models that support configurable thinking depth. Controls how much computational effort the model applies to reasoning through complex problems.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningEffort.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningEffort","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.llmConfig.options.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.llmConfig.options.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options","typeLabel":"object | null"},"vendorSpecificOptions":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.llmConfig.vendorSpecificOptions.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Vendor-specific options and parameters that are unique to particular LLM providers. Allows passing custom configuration that isn't covered by standard options.","uniqueKey":"config.llmConfig.vendorSpecificOptions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.llmConfig.vendorSpecificOptions.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Vendor-specific options and parameters that are unique to particular LLM providers. Allows passing custom configuration that isn't covered by standard options.","uniqueKey":"config.llmConfig.vendorSpecificOptions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.vendorSpecificOptions","typeLabel":"object | null"},"toolScopes":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.llmConfig.toolScopes.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Tool scope restrictions for limiting which tools the language model can access. When specified, the model can only use tools matching these scope identifiers. If not specified, all configured tools are available.","default":null,"uniqueKey":"config.llmConfig.toolScopes.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Tool scope restrictions for limiting which tools the language model can access. When specified, the model can only use tools matching these scope identifiers. If not specified, all configured tools are available.","default":null,"uniqueKey":"config.llmConfig.toolScopes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.toolScopes","typeLabel":"string[] | null"},"validateToolArguments":{"oneOf":[{"type":"boolean","description":"Opts in to JSON Schema validation of custom webhook tool arguments before the webhook is called. False or omitted preserves existing behavior. Use minLength in string schemas to forbid empty strings.","default":null,"uniqueKey":"config.llmConfig.validateToolArguments.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opts in to JSON Schema validation of custom webhook tool arguments before the webhook is called. False or omitted preserves existing behavior. Use minLength in string schemas to forbid empty strings.","default":null,"uniqueKey":"config.llmConfig.validateToolArguments.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.validateToolArguments","typeLabel":"boolean | null"},"enhancedTooling":{"oneOf":[{"type":"object","description":"Enhanced tooling: more accurate tool calling at a higher LLM usage cost, optionally on a different OpenAI model. Disabled when not set. When enabled, the slow marks on custom tools and MCP connections (IsLongRunning, LongRunningTools) are not used.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Whether enhanced tooling is enabled. Disabled by default: the agent then behaves exactly as before.","default":false,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether enhanced tooling is enabled. Disabled by default: the agent then behaves exactly as before.","default":false,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.isEnabled","typeLabel":"boolean | null"},"model":{"oneOf":[{"type":"string","description":"OpenAI model used for tool calling when enhanced tooling is enabled. Leave empty to use the platform's default model for tool calling. Accepted values: gpt-6-luna, gpt-6-sol, gpt-5.6-luna, gpt-5.6-terra, gpt-4.1-mini, gpt-4.1.","default":null,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.model.oneOf.0","typeLabel":"string"},{"type":"null","description":"OpenAI model used for tool calling when enhanced tooling is enabled. Leave empty to use the platform's default model for tool calling. Accepted values: gpt-6-luna, gpt-6-sol, gpt-5.6-luna, gpt-5.6-terra, gpt-4.1-mini, gpt-4.1.","default":null,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.model.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.model","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.llmConfig.enhancedTooling.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.enhancedTooling","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.llmConfig","typeLabel":"object"},"sttConfig":{"oneOf":[{"type":"object","description":"Speech-to-text configuration for converting user speech to text. Includes provider selection and recognition settings. Controls how the agent understands spoken input from users.","default":{"version":"v1","vendor":"Auto","vendorSpecificOptions":{}},"properties":{"vendor":{"type":"string","description":"Speech recognition vendor to use for transcribing user speech. Can be a specific provider like Deepgram or Microsoft, or Auto to let the system choose the best option automatically.","default":"Auto","enum":["Deepgram","Microsoft","Auto"],"uniqueKey":"config.sttConfig.oneOf.0.vendor","typeLabel":"enum\u003cstring>"},"vendorSpecificOptions":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Vendor-specific STT options that are unique to particular speech recognition providers. Allows passing custom parameters for advanced recognition configuration such as profanity filtering, punctuation, or language-specific settings.","uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Vendor-specific STT options that are unique to particular speech recognition providers. Allows passing custom parameters for advanced recognition configuration such as profanity filtering, punctuation, or language-specific settings.","uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions","typeLabel":"object | null"},"keywords":{"oneOf":[{"type":"array","items":{"required":["keyword"],"type":"object","properties":{"keyword":{"minLength":1,"type":"string","description":"Word or phrase to prioritize during speech recognition. The STT engine gives preference to recognizing this keyword when transcribing user speech, improving accuracy for domain-specific vocabulary.","isRequired":true,"uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX].keyword","typeLabel":"string"},"weight":{"oneOf":[{"type":"number","description":"Optional weight controlling how strongly the keyword should be prioritized. Higher weights increase the likelihood of the keyword being recognized over similar-sounding alternatives. When not specified, a default prioritization is applied.","format":"double","uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX].weight.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Optional weight controlling how strongly the keyword should be prioritized. Higher weights increase the likelihood of the keyword being recognized over similar-sounding alternatives. When not specified, a default prioritization is applied.","format":"double","uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX].weight.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX].weight","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"description":"Speech recognition keyword hint for improving transcription accuracy of specific words or phrases. Tells the STT engine to prioritize recognition of domain-specific terminology, product names, technical jargon, or proper nouns that may not be in standard dictionaries. Helps reduce misrecognition of important context-specific vocabulary.","uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of keywords or phrases that the speech recognition should prioritize or recognize more accurately. Helps improve transcription accuracy for domain-specific terminology, product names, or technical jargon that may not be in standard dictionaries. Each keyword can have an optional weight to control recognition priority.","default":null,"uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["keyword"],"type":"object","properties":{"keyword":{"minLength":1,"type":"string","description":"Word or phrase to prioritize during speech recognition. The STT engine gives preference to recognizing this keyword when transcribing user speech, improving accuracy for domain-specific vocabulary."},"weight":{"oneOf":[{"type":"number","description":"Optional weight controlling how strongly the keyword should be prioritized. Higher weights increase the likelihood of the keyword being recognized over similar-sounding alternatives. When not specified, a default prioritization is applied.","format":"double"},{"type":"null","description":"Optional weight controlling how strongly the keyword should be prioritized. Higher weights increase the likelihood of the keyword being recognized over similar-sounding alternatives. When not specified, a default prioritization is applied.","format":"double"}]}},"additionalProperties":false,"description":"Speech recognition keyword hint for improving transcription accuracy of specific words or phrases. Tells the STT engine to prioritize recognition of domain-specific terminology, product names, technical jargon, or proper nouns that may not be in standard dictionaries. Helps reduce misrecognition of important context-specific vocabulary."},"description":"List of keywords or phrases that the speech recognition should prioritize or recognize more accurately. Helps improve transcription accuracy for domain-specific terminology, product names, or technical jargon that may not be in standard dictionaries. Each keyword can have an optional weight to control recognition priority.","default":null,"uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig.oneOf.0.keywords","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.sttConfig.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.sttConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig","typeLabel":"object | null"},"outboundSipConfig":{"oneOf":[{"type":"object","description":"SIP configuration for making outbound calls. Includes phone number selection and trunk credentials. Required when the agent needs to initiate calls to phone numbers.","required":["authUser","server"],"properties":{"server":{"minLength":1,"type":"string","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Format is hostname:port (e.g., \"sip.example.com:5060\").","isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.0.server","typeLabel":"string"},"authUser":{"minLength":1,"type":"string","description":"Authentication user identifier as defined in RFC 3261. Different providers may call this \"username\", \"account\", \"user ID\", or other names depending on the SIP provider.","isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.0.authUser","typeLabel":"string"},"domain":{"oneOf":[{"type":"string","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.domain.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.domain.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.domain","typeLabel":"string | null"},"password":{"oneOf":[{"type":"string","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.password.oneOf.0","typeLabel":"string"},{"type":"null","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.password.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.password","typeLabel":"string | null"},"fromUser":{"oneOf":[{"type":"string","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.fromUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.fromUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.fromUser","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for SIP communication. Supported values are UDP (default), TCP, or TLS for encrypted connections.","default":"udp","enum":["udp","tcp","tls"],"uniqueKey":"config.outboundSipConfig.oneOf.0.transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.outboundSipConfig.oneOf.0.transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.transport","typeLabel":"enum\u003cstring> | null"},"cpsLimit":{"oneOf":[{"type":"integer","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsLimit.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsLimit.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsLimit","typeLabel":"integer\u003cint32> | null"},"cpsKey":{"oneOf":[{"type":"string","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsKey.oneOf.0","typeLabel":"string"},{"type":"null","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsKey","typeLabel":"string | null"},"displayName":{"oneOf":[{"type":"string","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.displayName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.outboundSipConfig.oneOf.0","typeLabel":"object"},{"type":"object","description":"SIP configuration for making outbound calls. Includes phone number selection and trunk credentials. Required when the agent needs to initiate calls to phone numbers.","required":["phoneNumbers","type"],"properties":{"phoneNumbers":{"type":"array","items":{"required":["phoneNumberId"],"type":"object","properties":{"phoneNumberId":{"type":"string","description":"Unique identifier of the SIP phone number configuration to use for outbound calls. References a phone number configured via the SIP phone numbers API.","format":"uuid","isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.1.phoneNumbers.items.[INDEX].phoneNumberId","typeLabel":"string\u003cuuid>"}},"additionalProperties":false,"description":"Reference to a configured SIP phone number. Contains the phone number ID that points to the full phone number configuration including trunk credentials.","uniqueKey":"config.outboundSipConfig.oneOf.1.phoneNumbers.items.[INDEX]","typeLabel":"object"},"description":"List of phone number references for outbound calling. Currently supports only one phone number in the list. Each reference points to a configured SIP phone number that contains the trunk credentials and settings.","isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.1.phoneNumbers","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"config.outboundSipConfig.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.outboundSipConfig.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig","typeLabel":"object · object · null"},"resultWebhook":{"oneOf":[{"type":"object","description":"Webhook URL to receive call results when conversations complete. The system will send a POST request with conversation outcome, transcript, and metadata to this URL.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri","isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.resultWebhook.oneOf.0.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.resultWebhook.oneOf.0.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.resultWebhook.oneOf.0.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.resultWebhook.oneOf.0.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.headers","typeLabel":"object | null"},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"],"isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.httpMethod","typeLabel":"enum\u003cstring>"},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams","typeLabel":"object | null"},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain.","isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.0.template","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.0","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.resultWebhook.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook","typeLabel":"object | null"},"features":{"oneOf":[{"type":"object","description":"Advanced features for the agent including RAG (knowledge base retrieval), call transfers (warm or cold), ambient background sounds, interruption handling, and recording options. Enables specialized agent capabilities beyond basic conversation.","default":{"version":"v1","postCallAnalysis":[],"talkFirst":{"version":"v1","delay":1,"isEnabled":false,"interruptible":true},"maxDuration":{"version":"v1","maxDurationSeconds":3600,"maxDurationInTransferSeconds":7200,"isEnabled":true},"ivrDetection":{"version":"v1","isEnabled":true,"enabledForChat":false,"enabledForInbound":false,"enabledForOutbound":true,"enabledForWebCall":false,"ivrNavigation":false},"ambientNoise":{"version":"v1","isEnabled":false,"ambientNoiseLevel":0.1},"languageSwitching":{"version":"v1","isEnabled":true},"fillers":{"version":"v1","isEnabled":true,"strategy":{"type":"static","texts":["um"]}},"backchannel":{"version":"v1","isEnabled":false},"turnTaking":{"version":"v1","vad":"asap_v2","vadFallback":"asap_v2"},"silenceManagement":{"version":"v1","isEnabled":true,"maxReminderAttempts":2,"reminderSilenceThresholdSeconds":5,"endWhenReminderLimitExceeded":true},"preConversationMedia":{"version":"v1","isEnabled":false,"enabledForInbound":false,"enabledForOutbound":false,"enabledForWebCall":false},"noiseSuppression":{"version":"v1","isEnabled":false,"type":"none","noiseSuppressionLevel":75,"recordWriteStrategy":"raw"}},"properties":{"transfer":{"oneOf":[{"type":"object","description":"Call transfer configuration. Supports warm transfer (agent stays on call), cold transfer (agent hangs up), or HTTP transfer (external API handles transfer). Enables the agent to transfer calls to other numbers or systems.","required":["endpointDestination","type","description"],"properties":{"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.description","typeLabel":"string"},"endpointDestination":{"minLength":1,"type":"string","description":"Transfer destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:1234567890@example.com\". The call is redirected to this endpoint using SIP REFER when the transfer is initiated.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.endpointDestination","typeLabel":"string"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.isEnabled","typeLabel":"boolean | null"},"sipUui":{"oneOf":[{"type":"string","description":"Optional User-to-User payload, encoded as RFC 7433 hex. Supports {{variableName}}\nfrom call additionalData and {{sip_endpoint}} for the caller.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipUui.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional User-to-User payload, encoded as RFC 7433 hex. Supports {{variableName}}\nfrom call additionalData and {{sip_endpoint}} for the caller.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipUui.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipUui","typeLabel":"string | null"},"sipHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers embedded in the Refer-To URI. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers embedded in the Refer-To URI. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders","typeLabel":"object | null"},"transferRoutes":{"oneOf":[{"type":"array","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].name","typeLabel":"string"},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX].endpoint","typeLabel":"string"}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX]","typeLabel":"object"},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations","typeLabel":"object[]"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Optional named transfer routes allowing the language model to choose between multiple destinations. Each route has a name, description, and list of endpoints. The model can select the appropriate route based on conversation context, enabling intelligent routing to different departments or specialists.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions."},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected."}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured."},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to."}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description."},"description":"Optional named transfer routes allowing the language model to choose between multiple destinations. Each route has a name, description, and list of endpoints. The model can select the appropriate route based on conversation context, enabling intelligent routing to different departments or specialists.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes","typeLabel":"object[] | null"},"holdMedia":{"oneOf":[{"type":"object","description":"Optional hold media configuration for playing audio during the transfer. When enabled, plays the specified media file on loop while the call is being transferred instead of using the agent's voice. Provides professional hold music or messages while the transfer completes.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.mediaFilename","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0","typeLabel":"object"},{"type":"object","description":"Call transfer configuration. Supports warm transfer (agent stays on call), cold transfer (agent hangs up), or HTTP transfer (external API handles transfer). Enables the agent to transfer calls to other numbers or systems.","required":["type","webhook","description"],"properties":{"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.description","typeLabel":"string"},"webhook":{"type":"object","description":"Webhook endpoint to call for transfer routing decisions. The system sends a POST request with conversation context and waits for a response specifying the transfer destination and type. The webhook should return a transfer decision in the response body indicating whether to perform a cold or warm transfer and to which endpoint.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers","typeLabel":"object | null"},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.httpMethod","typeLabel":"enum\u003cstring>"},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams","typeLabel":"object | null"},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0.template","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook","typeLabel":"object"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.isEnabled","typeLabel":"boolean | null"},"fallback":{"oneOf":[{"type":"object","description":"Fallback transfer configuration to use if the webhook request fails, times out, or returns an error. Ensures calls can still be transferred even when the routing system is unavailable. Can specify either a cold or warm transfer as the fallback behavior.","required":["endpointDestination","type","description"],"properties":{"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.description","typeLabel":"string"},"endpointDestination":{"minLength":1,"type":"string","description":"Transfer destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:1234567890@example.com\". The call is redirected to this endpoint using SIP REFER when the transfer is initiated.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.endpointDestination","typeLabel":"string"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.isEnabled","typeLabel":"boolean | null"},"sipUui":{"oneOf":[{"type":"string","description":"Optional User-to-User payload, encoded as RFC 7433 hex. Supports {{variableName}}\nfrom call additionalData and {{sip_endpoint}} for the caller.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipUui.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional User-to-User payload, encoded as RFC 7433 hex. Supports {{variableName}}\nfrom call additionalData and {{sip_endpoint}} for the caller.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipUui.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipUui","typeLabel":"string | null"},"sipHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers embedded in the Refer-To URI. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers embedded in the Refer-To URI. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders","typeLabel":"object | null"},"transferRoutes":{"oneOf":[{"type":"array","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].name","typeLabel":"string"},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX].endpoint","typeLabel":"string"}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX]","typeLabel":"object"},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations","typeLabel":"object[]"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Optional named transfer routes allowing the language model to choose between multiple destinations. Each route has a name, description, and list of endpoints. The model can select the appropriate route based on conversation context, enabling intelligent routing to different departments or specialists.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions."},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected."}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured."},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to."}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description."},"description":"Optional named transfer routes allowing the language model to choose between multiple destinations. Each route has a name, description, and list of endpoints. The model can select the appropriate route based on conversation context, enabling intelligent routing to different departments or specialists.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes","typeLabel":"object[] | null"},"holdMedia":{"oneOf":[{"type":"object","description":"Optional hold media configuration for playing audio during the transfer. When enabled, plays the specified media file on loop while the call is being transferred instead of using the agent's voice. Provides professional hold music or messages while the transfer completes.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.mediaFilename","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0","typeLabel":"object"},{"type":"object","description":"Fallback transfer configuration to use if the webhook request fails, times out, or returns an error. Ensures calls can still be transferred even when the routing system is unavailable. Can specify either a cold or warm transfer as the fallback behavior.","required":["endpointDestination","type","description"],"properties":{"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.description","typeLabel":"string"},"endpointDestination":{"minLength":1,"type":"string","description":"Operator destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The agent calls this endpoint first before bridging with the user.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.endpointDestination","typeLabel":"string"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.isEnabled","typeLabel":"boolean | null"},"sip":{"oneOf":[{"type":"object","description":"Optional SIP configuration override for placing the call to the operator. When specified, uses these SIP credentials instead of the agent's default outbound SIP settings for this specific transfer call.","properties":{"domain":{"oneOf":[{"type":"string","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.domain.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.domain.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.domain","typeLabel":"string | null"},"password":{"oneOf":[{"type":"string","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.password.oneOf.0","typeLabel":"string"},{"type":"null","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.password.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.password","typeLabel":"string | null"},"fromUser":{"oneOf":[{"type":"string","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.fromUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.fromUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.fromUser","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for SIP communication. Supported values are UDP (default), TCP, or TLS for encrypted connections.","default":"udp","enum":["udp","tcp","tls"],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.transport","typeLabel":"enum\u003cstring> | null"},"cpsLimit":{"oneOf":[{"type":"integer","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsLimit.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsLimit.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsLimit","typeLabel":"integer\u003cint32> | null"},"cpsKey":{"oneOf":[{"type":"string","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsKey.oneOf.0","typeLabel":"string"},{"type":"null","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsKey","typeLabel":"string | null"},"displayName":{"oneOf":[{"type":"string","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.displayName","typeLabel":"string | null"},"server":{"oneOf":[{"type":"string","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.server.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.server.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.server","typeLabel":"string | null"},"authUser":{"oneOf":[{"type":"string","description":"Authentication user identifier as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.authUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"Authentication user identifier as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.authUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.authUser","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip","typeLabel":"object | null"},"sipUui":{"oneOf":[{"type":"string","description":"Optional User-to-User payload on the operator call, encoded as RFC 7433 hex.\nSupports {{variableName}} from call additionalData and {{sip_endpoint}} for the caller.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipUui.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional User-to-User payload on the operator call, encoded as RFC 7433 hex.\nSupports {{variableName}} from call additionalData and {{sip_endpoint}} for the caller.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipUui.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipUui","typeLabel":"string | null"},"sipHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers on the operator call. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers on the operator call. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders","typeLabel":"object | null"},"interactionWithOperator":{"oneOf":[{"type":"object","description":"Behavior controlling what the agent says to the operator when they answer. Can use static predefined phrases or smart AI-generated context based on the conversation. Allows providing the operator with relevant information about the caller's needs before connecting them.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to customize how the AI agent interacts with the operator before bridging the call. Provides context-specific guidance for different scenarios, such as explaining the caller's situation, verifying operator availability, or following specific handoff protocols. Helps ensure smooth operator interactions while maintaining flexibility for different business processes.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to customize how the AI agent interacts with the operator before bridging the call. Provides context-specific guidance for different scenarios, such as explaining the caller's situation, verifying operator availability, or following specific handoff protocols. Helps ensure smooth operator interactions while maintaining flexibility for different business processes.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.additionalInstructions","typeLabel":"string | null"},"requireReadyBriefingAcceptance":{"type":"boolean","description":"When true, wait for operator readiness, deliver the configured briefing completely, and require later acceptance before bridging. Defaults to false, preserving the existing smart warm-transfer flow when absent or false.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.requireReadyBriefingAcceptance","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0","typeLabel":"object"},{"type":"object","description":"Behavior controlling what the agent says to the operator when they answer. Can use static predefined phrases or smart AI-generated context based on the conversation. Allows providing the operator with relevant information about the caller's needs before connecting them.","required":["type"],"properties":{"waitFirstAnswerFromOperator":{"oneOf":[{"type":"boolean","description":"Wait for voice detection from the operator before bridging the call. When enabled, the system waits for the operator to start speaking before connecting the caller, ensuring the operator is actively engaged and ready. When disabled, the call bridges immediately once other configured wait conditions are met or the timeout expires.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Wait for voice detection from the operator before bridging the call. When enabled, the system waits for the operator to start speaking before connecting the caller, ensuring the operator is actively engaged and ready. When disabled, the call bridges immediately once other configured wait conditions are met or the timeout expires.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator","typeLabel":"boolean | null"},"waitToneFromOperator":{"oneOf":[{"type":"array","items":{"type":"number","format":"double","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.0.items.[INDEX]","typeLabel":"number\u003cdouble>"},"description":"Audio frequency tones to wait for from the operator before bridging, specified in Hertz. Used to detect specific audio signals from the operator's phone system or IVR, such as 400Hz for readiness signals. The system listens for any of the specified frequencies and bridges the call when detected. Useful for integrating with legacy phone systems or custom operator signaling protocols.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.0","typeLabel":"number\u003cdouble>[]"},{"type":"null","items":{"type":"number","format":"double"},"description":"Audio frequency tones to wait for from the operator before bridging, specified in Hertz. Used to detect specific audio signals from the operator's phone system or IVR, such as 400Hz for readiness signals. The system listens for any of the specified frequencies and bridges the call when detected. Useful for integrating with legacy phone systems or custom operator signaling protocols.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitToneFromOperator","typeLabel":"number\u003cdouble>[] | null"},"waitDTMFFromOperator":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"DTMF key press tones to wait for from the operator before bridging the call. Accepts digit keys 0-9 and special keys like pound or star. The system waits for the operator to press any of the specified keys as an acknowledgment signal before connecting the caller. Common in call center environments where operators confirm readiness by pressing a specific key.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"DTMF key press tones to wait for from the operator before bridging the call. Accepts digit keys 0-9 and special keys like pound or star. The system waits for the operator to press any of the specified keys as an acknowledgment signal before connecting the caller. Common in call center environments where operators confirm readiness by pressing a specific key.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitDTMFFromOperator","typeLabel":"string[] | null"},"waitChecksTimeoutInS":{"oneOf":[{"type":"number","description":"Maximum time in seconds to wait for operator readiness signals before timing out. If the operator does not provide the expected voice, DTMF, or frequency tone signals within this timeout, the wait conditions are bypassed and the call proceeds according to failover configuration. Prevents indefinite waiting when operators are unavailable or unresponsive.","format":"double","default":4,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitChecksTimeoutInS.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Maximum time in seconds to wait for operator readiness signals before timing out. If the operator does not provide the expected voice, DTMF, or frequency tone signals within this timeout, the wait conditions are bypassed and the call proceeds according to failover configuration. Prevents indefinite waiting when operators are unavailable or unresponsive.","format":"double","default":4,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitChecksTimeoutInS.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitChecksTimeoutInS","typeLabel":"number\u003cdouble> | null"},"sayPhraseToOperator":{"oneOf":[{"type":"object","description":"Phrase configuration for introducing the caller to the operator before bridging. Allows the AI agent to provide context about the caller's needs, reason for transfer, or conversation summary to help the operator assist effectively. Can be configured to speak before or after the operator acknowledges, depending on call center workflow preferences.","required":["phrase"],"properties":{"phrase":{"minLength":1,"type":"string","description":"Phrase to speak to the operator when they answer. Should provide relevant context about the caller or their needs. Can include conversation summaries, caller identification, or reason for transfer to help the operator assist the user effectively.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.phrase","typeLabel":"string"},"beforeOperator":{"oneOf":[{"type":"boolean","description":"Controls timing of when the phrase is spoken. When true, the agent speaks immediately when the call connects, potentially before the operator fully answers. When false, waits for the operator to acknowledge before speaking the phrase.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls timing of when the phrase is spoken. When true, the agent speaks immediately when the call connects, potentially before the operator fully answers. When false, waits for the operator to acknowledge before speaking the phrase.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator","typeLabel":"object · object · null"},"sayPhraseToCustomer":{"oneOf":[{"type":"string","description":"Phrase to speak to the customer before bridging the call with the operator. Informs the user that they're being connected to a human agent. Can include reassurance or set expectations about the handoff.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sayPhraseToCustomer.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase to speak to the customer before bridging the call with the operator. Informs the user that they're being connected to a human agent. Can include reassurance or set expectations about the handoff.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sayPhraseToCustomer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sayPhraseToCustomer","typeLabel":"string | null"},"continueAfterOperatorDisconnected":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent resumes the conversation if the operator disconnects or hangs up. When true, the agent continues talking to the user after the operator leaves. When false, the call ends when the operator disconnects.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueAfterOperatorDisconnected.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent resumes the conversation if the operator disconnects or hangs up. When true, the agent continues talking to the user after the operator leaves. When false, the call ends when the operator disconnects.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueAfterOperatorDisconnected.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueAfterOperatorDisconnected","typeLabel":"boolean | null"},"continueRecordingInTransfer":{"oneOf":[{"type":"boolean","default":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecordingInTransfer.oneOf.0","typeLabel":"boolean"},{"type":"null","default":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecordingInTransfer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecordingInTransfer","typeLabel":"boolean | null"},"transferRoutes":{"oneOf":[{"type":"array","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].name","typeLabel":"string"},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX].endpoint","typeLabel":"string"}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX]","typeLabel":"object"},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations","typeLabel":"object[]"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions."},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected."}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured."},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to."}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description."},"default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes","typeLabel":"object[] | null"},"operatorName":{"oneOf":[{"type":"string","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.operatorName.oneOf.0","typeLabel":"string"},{"type":"null","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.operatorName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.operatorName","typeLabel":"string | null"},"continueRecognitionInTransfer":{"oneOf":[{"type":"boolean","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecognitionInTransfer.oneOf.0","typeLabel":"boolean"},{"type":"null","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecognitionInTransfer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecognitionInTransfer","typeLabel":"boolean | null"},"callerIdMode":{"oneOf":[{"type":"string","description":"Determines which phone number is displayed to the transfer destination (human agent) during warm transfer.\nAgentPhoneNumber (default): Uses the AI agent's configured outbound SIP fromUser as the caller ID.\nUserPhoneNumber: Uses the user's phone number (job.endpoint) as the caller ID.\nWhen null, defaults to AgentPhoneNumber behavior.","default":"agentPhoneNumber","enum":["userPhoneNumber","agentPhoneNumber"],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.callerIdMode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.callerIdMode.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.callerIdMode","typeLabel":"enum\u003cstring> | null"},"threewayMessaging":{"oneOf":[{"type":"object","description":"Optional threeway messaging configuration.\nWhen configured, delivers a unified phrase to BOTH user and operator\nsimultaneously before the bridge channel is executed.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to customize how the AI generates the announcement phrase spoken to both parties simultaneously. Guides the language model in crafting appropriate handoff messaging, such as maintaining professional tone, including issue summaries, providing reassurance, or mentioning specialist involvement. When not specified, the phrase is generated based solely on conversation context without additional constraints.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to customize how the AI generates the announcement phrase spoken to both parties simultaneously. Guides the language model in crafting appropriate handoff messaging, such as maintaining professional tone, including issue summaries, providing reassurance, or mentioning specialist involvement. When not specified, the phrase is generated based solely on conversation context without additional constraints.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0.additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0","typeLabel":"object"},{"type":"object","description":"Optional threeway messaging configuration.\nWhen configured, delivers a unified phrase to BOTH user and operator\nsimultaneously before the bridge channel is executed.","required":["type"],"properties":{"phrase":{"oneOf":[{"type":"string","description":"Phrase spoken to both caller and operator simultaneously right before bridging the call. Should be clear and concise as both parties will hear it at the same moment during the transfer transition. Common examples include connection announcements like \"Connecting you now\", hold notifications like \"Please hold while I connect you\", or representative introduction messages like \"You are now being connected to a representative\".","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1.phrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to both caller and operator simultaneously right before bridging the call. Should be clear and concise as both parties will hear it at the same moment during the transfer transition. Common examples include connection announcements like \"Connecting you now\", hold notifications like \"Please hold while I connect you\", or representative introduction messages like \"You are now being connected to a representative\".","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1.phrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1.phrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging","typeLabel":"object · object · null"},"holdMedia":{"oneOf":[{"type":"object","description":"Optional hold media configuration for warm transfers.\nWhen enabled, plays media via media:// protocol instead of using the respond node\nto communicate with users during transfer.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.mediaFilename","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia","typeLabel":"object | null"},"fallbackToColdTransfer":{"type":"boolean","description":"When true and the warm transfer fails (the operator does not answer, the operator briefing fails, or the operator call cannot be placed), the agent cold-transfers the caller to the same destination before applying the failover behavior. Defaults to false.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.fallbackToColdTransfer","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback","typeLabel":"object · object · null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1","typeLabel":"object"},{"type":"object","description":"Call transfer configuration. Supports warm transfer (agent stays on call), cold transfer (agent hangs up), or HTTP transfer (external API handles transfer). Enables the agent to transfer calls to other numbers or systems.","required":["endpointDestination","type","description"],"properties":{"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.description","typeLabel":"string"},"endpointDestination":{"minLength":1,"type":"string","description":"Operator destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The agent calls this endpoint first before bridging with the user.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.endpointDestination","typeLabel":"string"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.isEnabled","typeLabel":"boolean | null"},"sip":{"oneOf":[{"type":"object","description":"Optional SIP configuration override for placing the call to the operator. When specified, uses these SIP credentials instead of the agent's default outbound SIP settings for this specific transfer call.","properties":{"domain":{"oneOf":[{"type":"string","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.domain.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.domain.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.domain","typeLabel":"string | null"},"password":{"oneOf":[{"type":"string","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.password.oneOf.0","typeLabel":"string"},{"type":"null","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.password.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.password","typeLabel":"string | null"},"fromUser":{"oneOf":[{"type":"string","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.fromUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.fromUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.fromUser","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for SIP communication. Supported values are UDP (default), TCP, or TLS for encrypted connections.","default":"udp","enum":["udp","tcp","tls"],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.transport","typeLabel":"enum\u003cstring> | null"},"cpsLimit":{"oneOf":[{"type":"integer","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsLimit.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsLimit.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsLimit","typeLabel":"integer\u003cint32> | null"},"cpsKey":{"oneOf":[{"type":"string","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsKey.oneOf.0","typeLabel":"string"},{"type":"null","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsKey","typeLabel":"string | null"},"displayName":{"oneOf":[{"type":"string","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.displayName","typeLabel":"string | null"},"server":{"oneOf":[{"type":"string","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.server.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.server.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.server","typeLabel":"string | null"},"authUser":{"oneOf":[{"type":"string","description":"Authentication user identifier as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.authUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"Authentication user identifier as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.authUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.authUser","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip","typeLabel":"object | null"},"sipUui":{"oneOf":[{"type":"string","description":"Optional User-to-User payload on the operator call, encoded as RFC 7433 hex.\nSupports {{variableName}} from call additionalData and {{sip_endpoint}} for the caller.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipUui.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional User-to-User payload on the operator call, encoded as RFC 7433 hex.\nSupports {{variableName}} from call additionalData and {{sip_endpoint}} for the caller.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipUui.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipUui","typeLabel":"string | null"},"sipHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers on the operator call. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers on the operator call. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders","typeLabel":"object | null"},"interactionWithOperator":{"oneOf":[{"type":"object","description":"Behavior controlling what the agent says to the operator when they answer. Can use static predefined phrases or smart AI-generated context based on the conversation. Allows providing the operator with relevant information about the caller's needs before connecting them.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to customize how the AI agent interacts with the operator before bridging the call. Provides context-specific guidance for different scenarios, such as explaining the caller's situation, verifying operator availability, or following specific handoff protocols. Helps ensure smooth operator interactions while maintaining flexibility for different business processes.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to customize how the AI agent interacts with the operator before bridging the call. Provides context-specific guidance for different scenarios, such as explaining the caller's situation, verifying operator availability, or following specific handoff protocols. Helps ensure smooth operator interactions while maintaining flexibility for different business processes.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.additionalInstructions","typeLabel":"string | null"},"requireReadyBriefingAcceptance":{"type":"boolean","description":"When true, wait for operator readiness, deliver the configured briefing completely, and require later acceptance before bridging. Defaults to false, preserving the existing smart warm-transfer flow when absent or false.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.requireReadyBriefingAcceptance","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0","typeLabel":"object"},{"type":"object","description":"Behavior controlling what the agent says to the operator when they answer. Can use static predefined phrases or smart AI-generated context based on the conversation. Allows providing the operator with relevant information about the caller's needs before connecting them.","required":["type"],"properties":{"waitFirstAnswerFromOperator":{"oneOf":[{"type":"boolean","description":"Wait for voice detection from the operator before bridging the call. When enabled, the system waits for the operator to start speaking before connecting the caller, ensuring the operator is actively engaged and ready. When disabled, the call bridges immediately once other configured wait conditions are met or the timeout expires.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Wait for voice detection from the operator before bridging the call. When enabled, the system waits for the operator to start speaking before connecting the caller, ensuring the operator is actively engaged and ready. When disabled, the call bridges immediately once other configured wait conditions are met or the timeout expires.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator","typeLabel":"boolean | null"},"waitToneFromOperator":{"oneOf":[{"type":"array","items":{"type":"number","format":"double","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.0.items.[INDEX]","typeLabel":"number\u003cdouble>"},"description":"Audio frequency tones to wait for from the operator before bridging, specified in Hertz. Used to detect specific audio signals from the operator's phone system or IVR, such as 400Hz for readiness signals. The system listens for any of the specified frequencies and bridges the call when detected. Useful for integrating with legacy phone systems or custom operator signaling protocols.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.0","typeLabel":"number\u003cdouble>[]"},{"type":"null","items":{"type":"number","format":"double"},"description":"Audio frequency tones to wait for from the operator before bridging, specified in Hertz. Used to detect specific audio signals from the operator's phone system or IVR, such as 400Hz for readiness signals. The system listens for any of the specified frequencies and bridges the call when detected. Useful for integrating with legacy phone systems or custom operator signaling protocols.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitToneFromOperator","typeLabel":"number\u003cdouble>[] | null"},"waitDTMFFromOperator":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"DTMF key press tones to wait for from the operator before bridging the call. Accepts digit keys 0-9 and special keys like pound or star. The system waits for the operator to press any of the specified keys as an acknowledgment signal before connecting the caller. Common in call center environments where operators confirm readiness by pressing a specific key.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"DTMF key press tones to wait for from the operator before bridging the call. Accepts digit keys 0-9 and special keys like pound or star. The system waits for the operator to press any of the specified keys as an acknowledgment signal before connecting the caller. Common in call center environments where operators confirm readiness by pressing a specific key.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitDTMFFromOperator","typeLabel":"string[] | null"},"waitChecksTimeoutInS":{"oneOf":[{"type":"number","description":"Maximum time in seconds to wait for operator readiness signals before timing out. If the operator does not provide the expected voice, DTMF, or frequency tone signals within this timeout, the wait conditions are bypassed and the call proceeds according to failover configuration. Prevents indefinite waiting when operators are unavailable or unresponsive.","format":"double","default":4,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitChecksTimeoutInS.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Maximum time in seconds to wait for operator readiness signals before timing out. If the operator does not provide the expected voice, DTMF, or frequency tone signals within this timeout, the wait conditions are bypassed and the call proceeds according to failover configuration. Prevents indefinite waiting when operators are unavailable or unresponsive.","format":"double","default":4,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitChecksTimeoutInS.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitChecksTimeoutInS","typeLabel":"number\u003cdouble> | null"},"sayPhraseToOperator":{"oneOf":[{"type":"object","description":"Phrase configuration for introducing the caller to the operator before bridging. Allows the AI agent to provide context about the caller's needs, reason for transfer, or conversation summary to help the operator assist effectively. Can be configured to speak before or after the operator acknowledges, depending on call center workflow preferences.","required":["phrase"],"properties":{"phrase":{"minLength":1,"type":"string","description":"Phrase to speak to the operator when they answer. Should provide relevant context about the caller or their needs. Can include conversation summaries, caller identification, or reason for transfer to help the operator assist the user effectively.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.phrase","typeLabel":"string"},"beforeOperator":{"oneOf":[{"type":"boolean","description":"Controls timing of when the phrase is spoken. When true, the agent speaks immediately when the call connects, potentially before the operator fully answers. When false, waits for the operator to acknowledge before speaking the phrase.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls timing of when the phrase is spoken. When true, the agent speaks immediately when the call connects, potentially before the operator fully answers. When false, waits for the operator to acknowledge before speaking the phrase.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator","typeLabel":"object · object · null"},"sayPhraseToCustomer":{"oneOf":[{"type":"string","description":"Phrase to speak to the customer before bridging the call with the operator. Informs the user that they're being connected to a human agent. Can include reassurance or set expectations about the handoff.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sayPhraseToCustomer.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase to speak to the customer before bridging the call with the operator. Informs the user that they're being connected to a human agent. Can include reassurance or set expectations about the handoff.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sayPhraseToCustomer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sayPhraseToCustomer","typeLabel":"string | null"},"continueAfterOperatorDisconnected":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent resumes the conversation if the operator disconnects or hangs up. When true, the agent continues talking to the user after the operator leaves. When false, the call ends when the operator disconnects.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueAfterOperatorDisconnected.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent resumes the conversation if the operator disconnects or hangs up. When true, the agent continues talking to the user after the operator leaves. When false, the call ends when the operator disconnects.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueAfterOperatorDisconnected.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueAfterOperatorDisconnected","typeLabel":"boolean | null"},"continueRecordingInTransfer":{"oneOf":[{"type":"boolean","default":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecordingInTransfer.oneOf.0","typeLabel":"boolean"},{"type":"null","default":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecordingInTransfer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecordingInTransfer","typeLabel":"boolean | null"},"transferRoutes":{"oneOf":[{"type":"array","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].name","typeLabel":"string"},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX].endpoint","typeLabel":"string"}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX]","typeLabel":"object"},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations","typeLabel":"object[]"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions."},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected."}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured."},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to."}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description."},"default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes","typeLabel":"object[] | null"},"operatorName":{"oneOf":[{"type":"string","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.operatorName.oneOf.0","typeLabel":"string"},{"type":"null","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.operatorName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.operatorName","typeLabel":"string | null"},"continueRecognitionInTransfer":{"oneOf":[{"type":"boolean","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecognitionInTransfer.oneOf.0","typeLabel":"boolean"},{"type":"null","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecognitionInTransfer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecognitionInTransfer","typeLabel":"boolean | null"},"callerIdMode":{"oneOf":[{"type":"string","description":"Determines which phone number is displayed to the transfer destination (human agent) during warm transfer.\nAgentPhoneNumber (default): Uses the AI agent's configured outbound SIP fromUser as the caller ID.\nUserPhoneNumber: Uses the user's phone number (job.endpoint) as the caller ID.\nWhen null, defaults to AgentPhoneNumber behavior.","default":"agentPhoneNumber","enum":["userPhoneNumber","agentPhoneNumber"],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.callerIdMode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.callerIdMode.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.callerIdMode","typeLabel":"enum\u003cstring> | null"},"threewayMessaging":{"oneOf":[{"type":"object","description":"Optional threeway messaging configuration.\nWhen configured, delivers a unified phrase to BOTH user and operator\nsimultaneously before the bridge channel is executed.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to customize how the AI generates the announcement phrase spoken to both parties simultaneously. Guides the language model in crafting appropriate handoff messaging, such as maintaining professional tone, including issue summaries, providing reassurance, or mentioning specialist involvement. When not specified, the phrase is generated based solely on conversation context without additional constraints.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to customize how the AI generates the announcement phrase spoken to both parties simultaneously. Guides the language model in crafting appropriate handoff messaging, such as maintaining professional tone, including issue summaries, providing reassurance, or mentioning specialist involvement. When not specified, the phrase is generated based solely on conversation context without additional constraints.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0.additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0","typeLabel":"object"},{"type":"object","description":"Optional threeway messaging configuration.\nWhen configured, delivers a unified phrase to BOTH user and operator\nsimultaneously before the bridge channel is executed.","required":["type"],"properties":{"phrase":{"oneOf":[{"type":"string","description":"Phrase spoken to both caller and operator simultaneously right before bridging the call. Should be clear and concise as both parties will hear it at the same moment during the transfer transition. Common examples include connection announcements like \"Connecting you now\", hold notifications like \"Please hold while I connect you\", or representative introduction messages like \"You are now being connected to a representative\".","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1.phrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to both caller and operator simultaneously right before bridging the call. Should be clear and concise as both parties will hear it at the same moment during the transfer transition. Common examples include connection announcements like \"Connecting you now\", hold notifications like \"Please hold while I connect you\", or representative introduction messages like \"You are now being connected to a representative\".","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1.phrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1.phrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging","typeLabel":"object · object · null"},"holdMedia":{"oneOf":[{"type":"object","description":"Optional hold media configuration for warm transfers.\nWhen enabled, plays media via media:// protocol instead of using the respond node\nto communicate with users during transfer.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.mediaFilename","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia","typeLabel":"object | null"},"fallbackToColdTransfer":{"type":"boolean","description":"When true and the warm transfer fails (the operator does not answer, the operator briefing fails, or the operator call cannot be placed), the agent cold-transfers the caller to the same destination before applying the failover behavior. Defaults to false.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.fallbackToColdTransfer","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer","typeLabel":"object · object · object · null"},"postCallAnalysis":{"oneOf":[{"type":"array","items":{"required":["labels","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Name identifier for this analysis configuration. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used to identify this analysis in the results.","isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].name","typeLabel":"string"},"labels":{"type":"array","items":{"required":["description","name","type"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Field name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. This name is used as the key in the analysis results.","isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].name","typeLabel":"string"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of what information to extract and how to interpret it. Guides the language model in identifying and extracting the relevant data from the conversation. Should clearly explain what to look for and how to categorize or format the extracted information.","isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].description","typeLabel":"string"},"type":{"type":"string","description":"Data type for the extracted value. Determines the structure and format of the extracted information and constrains what the language model can return.","enum":["string","number","boolean","enum"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"values":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].values.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Allowed values for enum type labels. When Type is Enum, the extracted value must be one of these predefined options. The language model selects the most appropriate value from this list based on the conversation content.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].values.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Allowed values for enum type labels. When Type is Enum, the extracted value must be one of these predefined options. The language model selects the most appropriate value from this list based on the conversation content.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].values.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].values","typeLabel":"string[] | null"},"required":{"oneOf":[{"type":"boolean","description":"Indicates whether this field must be populated. When true, the analysis will always attempt to extract a value for this field. When false, the field may be left empty if the relevant information is not found in the conversation.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].required.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Indicates whether this field must be populated. When true, the analysis will always attempt to extract a value for this field. When false, the field may be left empty if the relevant information is not found in the conversation.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].required.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].required","typeLabel":"boolean | null"}},"additionalProperties":false,"description":"Data field definition for post-call analysis extraction. Specifies a piece of information to identify and extract from conversation transcripts such as customer sentiment, appointment details, or business outcomes. The language model analyzes the completed conversation and attempts to populate this field based on the description and type constraints.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX]","typeLabel":"object"},"description":"List of data fields to extract from the conversation transcript. Each label defines a piece of information to identify and extract, such as customer sentiment, appointment times, order numbers, or custom business outcomes. The language model analyzes the conversation and populates these labels based on the transcript content.","isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels","typeLabel":"object[]"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this post-call analysis. When enabled, the system performs the configured analysis after each call completes and includes results in the completion webhook payload.","default":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this post-call analysis. When enabled, the system performs the configured analysis after each call completes and includes results in the completion webhook payload.","default":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].isEnabled","typeLabel":"boolean | null"}},"additionalProperties":false,"description":"Post-call analysis configuration for automatically extracting structured data from conversation transcripts after calls complete. Defines labels and fields to extract using language model analysis of the conversation. Enables automated classification, sentiment analysis, information extraction, and business outcome tracking from completed calls. Results are included in the completed webhook payload for integration with CRM systems, analytics platforms, or business intelligence tools.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Post-call analysis configurations for extracting insights after conversations complete. Multiple analysis tasks can be configured to process transcripts and generate structured data.","default":[],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["labels","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Name identifier for this analysis configuration. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used to identify this analysis in the results."},"labels":{"type":"array","items":{"required":["description","name","type"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Field name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. This name is used as the key in the analysis results."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of what information to extract and how to interpret it. Guides the language model in identifying and extracting the relevant data from the conversation. Should clearly explain what to look for and how to categorize or format the extracted information."},"type":{"type":"string","description":"Data type for the extracted value. Determines the structure and format of the extracted information and constrains what the language model can return.","enum":["string","number","boolean","enum"]},"values":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"Allowed values for enum type labels. When Type is Enum, the extracted value must be one of these predefined options. The language model selects the most appropriate value from this list based on the conversation content."},{"type":"null","items":{"type":"string"},"description":"Allowed values for enum type labels. When Type is Enum, the extracted value must be one of these predefined options. The language model selects the most appropriate value from this list based on the conversation content."}]},"required":{"oneOf":[{"type":"boolean","description":"Indicates whether this field must be populated. When true, the analysis will always attempt to extract a value for this field. When false, the field may be left empty if the relevant information is not found in the conversation."},{"type":"null","description":"Indicates whether this field must be populated. When true, the analysis will always attempt to extract a value for this field. When false, the field may be left empty if the relevant information is not found in the conversation."}]}},"additionalProperties":false,"description":"Data field definition for post-call analysis extraction. Specifies a piece of information to identify and extract from conversation transcripts such as customer sentiment, appointment details, or business outcomes. The language model analyzes the completed conversation and attempts to populate this field based on the description and type constraints."},"description":"List of data fields to extract from the conversation transcript. Each label defines a piece of information to identify and extract, such as customer sentiment, appointment times, order numbers, or custom business outcomes. The language model analyzes the conversation and populates these labels based on the transcript content."},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this post-call analysis. When enabled, the system performs the configured analysis after each call completes and includes results in the completion webhook payload.","default":true},{"type":"null","description":"Enables or disables this post-call analysis. When enabled, the system performs the configured analysis after each call completes and includes results in the completion webhook payload.","default":true}]}},"additionalProperties":false,"description":"Post-call analysis configuration for automatically extracting structured data from conversation transcripts after calls complete. Defines labels and fields to extract using language model analysis of the conversation. Enables automated classification, sentiment analysis, information extraction, and business outcome tracking from completed calls. Results are included in the completed webhook payload for integration with CRM systems, analytics platforms, or business intelligence tools."},"description":"Post-call analysis configurations for extracting insights after conversations complete. Multiple analysis tasks can be configured to process transcripts and generate structured data.","default":[],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis","typeLabel":"object[] | null"},"talkFirst":{"oneOf":[{"type":"object","description":"Controls whether the agent speaks first when the call connects. When enabled, the agent greets the user immediately rather than waiting for the user to speak first.","default":{"version":"v1","delay":1,"isEnabled":false,"interruptible":true},"properties":{"phrase":{"oneOf":[{"type":"string","description":"Greeting phrase the agent should speak immediately when the call connects. This is spoken before the normal conversation flow begins, allowing the agent to introduce itself or provide an opening statement on outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.phrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Greeting phrase the agent should speak immediately when the call connects. This is spoken before the normal conversation flow begins, allowing the agent to introduce itself or provide an opening statement on outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.phrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.phrase","typeLabel":"string | null"},"delay":{"oneOf":[{"type":"number","description":"Delay in seconds before speaking the greeting phrase. Allows time for the call connection to stabilize or for the user to say hello first if desired. The agent waits this duration after call connection before speaking the configured phrase.","format":"double","default":1,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.delay.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Delay in seconds before speaking the greeting phrase. Allows time for the call connection to stabilize or for the user to say hello first if desired. The agent waits this duration after call connection before speaking the configured phrase.","format":"double","default":1,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.delay.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.delay","typeLabel":"number\u003cdouble> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables the talk first feature. When enabled, the agent speaks the configured greeting phrase after the specified delay when the call connects.","default":false,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables the talk first feature. When enabled, the agent speaks the configured greeting phrase after the specified delay when the call connects.","default":false,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.isEnabled","typeLabel":"boolean | null"},"interruptible":{"oneOf":[{"type":"boolean","description":"Controls whether the user can interrupt the greeting phrase. When true, the agent stops speaking the greeting if the user starts talking. When false, the agent completes the entire greeting phrase before listening for user input.","default":true,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.interruptible.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the user can interrupt the greeting phrase. When true, the agent stops speaking the greeting if the user starts talking. When false, the agent completes the entire greeting phrase before listening for user input.","default":true,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.interruptible.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.interruptible","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst","typeLabel":"object | null"},"maxDuration":{"oneOf":[{"type":"object","description":"Maximum duration limit for conversations. The call will be automatically ended if it exceeds the configured time limit.","default":{"version":"v1","maxDurationSeconds":3600,"maxDurationInTransferSeconds":7200,"isEnabled":true},"properties":{"maxDurationSeconds":{"oneOf":[{"type":"integer","description":"Maximum duration in seconds for normal conversations before the call is automatically ended. Prevents calls from running indefinitely and helps control costs and resource usage.","format":"int32","default":3600,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationSeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum duration in seconds for normal conversations before the call is automatically ended. Prevents calls from running indefinitely and helps control costs and resource usage.","format":"int32","default":3600,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationSeconds","typeLabel":"integer\u003cint32> | null"},"maxDurationInTransferSeconds":{"oneOf":[{"type":"integer","description":"Maximum duration in seconds for conversations that have been transferred. Allows longer durations for transferred calls since they may involve more complex interactions or human operators. The call is automatically ended when this limit is exceeded during a transfer.","format":"int32","default":7200,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationInTransferSeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum duration in seconds for conversations that have been transferred. Allows longer durations for transferred calls since they may involve more complex interactions or human operators. The call is automatically ended when this limit is exceeded during a transfer.","format":"int32","default":7200,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationInTransferSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationInTransferSeconds","typeLabel":"integer\u003cint32> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables maximum duration enforcement. When enabled, calls are automatically terminated when they exceed the configured duration limits.","default":true,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables maximum duration enforcement. When enabled, calls are automatically terminated when they exceed the configured duration limits.","default":true,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.isEnabled","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration","typeLabel":"object | null"},"ivrDetection":{"oneOf":[{"type":"object","description":"IVR (Interactive Voice Response) detection for identifying automated phone systems. Helps the agent recognize and respond appropriately to menu prompts and automated messages.","default":{"version":"v1","isEnabled":true,"enabledForChat":false,"enabledForInbound":false,"enabledForOutbound":true,"enabledForWebCall":false,"ivrNavigation":false},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Master enable flag for IVR and answering machine detection. When enabled, the system attempts to detect whether calls are answered by humans or machines and behaves according to the configured settings.","default":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Master enable flag for IVR and answering machine detection. When enabled, the system attempts to detect whether calls are answered by humans or machines and behaves according to the configured settings.","default":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.isEnabled","typeLabel":"boolean | null"},"enabledForChat":{"oneOf":[{"type":"boolean","description":"Enables answering machine detection for chat conversations. When enabled, the system attempts to detect automated chat responses or bot interactions.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForChat.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables answering machine detection for chat conversations. When enabled, the system attempts to detect automated chat responses or bot interactions.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForChat.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForChat","typeLabel":"boolean | null"},"enabledForInbound":{"oneOf":[{"type":"boolean","description":"Enables answering machine detection for inbound phone calls. When enabled, the system detects if the caller is a human or an automated system calling your phone numbers.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForInbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables answering machine detection for inbound phone calls. When enabled, the system detects if the caller is a human or an automated system calling your phone numbers.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForInbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForInbound","typeLabel":"boolean | null"},"enabledForOutbound":{"oneOf":[{"type":"boolean","description":"Enables answering machine detection for outbound phone calls. When enabled, the system detects whether a human or voicemail/IVR system answered the call, allowing the agent to leave messages or navigate menus as configured.","default":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForOutbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables answering machine detection for outbound phone calls. When enabled, the system detects whether a human or voicemail/IVR system answered the call, allowing the agent to leave messages or navigate menus as configured.","default":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForOutbound","typeLabel":"boolean | null"},"enabledForWebCall":{"oneOf":[{"type":"boolean","description":"Enables answering machine detection for web-based voice calls. When enabled, the system detects automated responses in web call scenarios.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForWebCall.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables answering machine detection for web-based voice calls. When enabled, the system detects automated responses in web call scenarios.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForWebCall.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForWebCall","typeLabel":"boolean | null"},"ivrNavigation":{"oneOf":[{"type":"boolean","description":"Enables IVR menu navigation using DTMF tone sending. When enabled, the agent attempts to navigate through automated phone menus by sending touch-tone digits before giving up on the call. Useful for reaching human operators through phone trees on outbound calls.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.ivrNavigation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables IVR menu navigation using DTMF tone sending. When enabled, the agent attempts to navigate through automated phone menus by sending touch-tone digits before giving up on the call. Useful for reaching human operators through phone trees on outbound calls.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.ivrNavigation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.ivrNavigation","typeLabel":"boolean | null"},"experimental":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Experimental features. `ivr_voice_recognition` (boolean) turns on audio-based machine detection;\n`ivr_voice_recognition_engine` selects its engine: `\"dasha\"` (default) or `\"amdy\"` (amdy.io).\n`ivr_voice_recognition_immediate` (boolean, amdy.io only) asks for a verdict as soon as amdy.io has one,\nwhich takes less audio but is less confident; off, amdy.io listens longer before deciding.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Experimental features. `ivr_voice_recognition` (boolean) turns on audio-based machine detection;\n`ivr_voice_recognition_engine` selects its engine: `\"dasha\"` (default) or `\"amdy\"` (amdy.io).\n`ivr_voice_recognition_immediate` (boolean, amdy.io only) asks for a verdict as soon as amdy.io has one,\nwhich takes less audio but is less confident; off, amdy.io listens longer before deciding.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental","typeLabel":"object | null"},"behavior":{"oneOf":[{"type":"object","description":"Behavior configuration controlling what the agent says or does when an answering machine or IVR is detected. Static behaviors use predefined phrases, while smart behaviors use the language model to generate contextual responses based on the conversation.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to guide the language model in generating voicemail messages. Provides context about what information to include, tone to use, or specific details to mention. Supports variable interpolation using {{variableName}} syntax for dynamic instructions based on call data.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to guide the language model in generating voicemail messages. Provides context about what information to include, tone to use, or specific details to mention. Supports variable interpolation using {{variableName}} syntax for dynamic instructions based on call data.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0.additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0","typeLabel":"object"},{"type":"object","description":"Behavior configuration controlling what the agent says or does when an answering machine or IVR is detected. Static behaviors use predefined phrases, while smart behaviors use the language model to generate contextual responses based on the conversation.","required":["type"],"properties":{"staticPhrase":{"oneOf":[{"type":"string","description":"Voicemail message to speak when an answering machine is detected. The agent says this exact phrase after detection. Supports variable interpolation using {{variableName}} syntax to include dynamic data like caller names, phone numbers, or appointment details in the message.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Voicemail message to speak when an answering machine is detected. The agent says this exact phrase after detection. Supports variable interpolation using {{variableName}} syntax to include dynamic data like caller names, phone numbers, or appointment details in the message.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior","typeLabel":"object · object · null"},"screeningAssistantBehavior":{"oneOf":[{"type":"object","description":"Optional prompt-driven behavior for automated assistants that screen calls before connecting the caller to a person.\nWhen omitted, call screening retains the existing pass-through behavior.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions that control what the agent says and how long it waits while screening is active.\nSupports variable interpolation using {{variableName}} syntax.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions that control what the agent says and how long it waits while screening is active.\nSupports variable interpolation using {{variableName}} syntax.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0.additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior","typeLabel":"object | null"},"staticPhraseForIVR":{"oneOf":[{"type":"string","description":"Deprecated static phrase for answering machine messages. Use the Behavior property instead for more flexible message configuration. This field supports variable interpolation using {{variableName}} syntax.","default":null,"deprecated":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.staticPhraseForIVR.oneOf.0","typeLabel":"string"},{"type":"null","description":"Deprecated static phrase for answering machine messages. Use the Behavior property instead for more flexible message configuration. This field supports variable interpolation using {{variableName}} syntax.","default":null,"deprecated":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.staticPhraseForIVR.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.staticPhraseForIVR","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection","typeLabel":"object | null"},"ambientNoise":{"oneOf":[{"type":"object","description":"Ambient background noise configuration. Adds realistic background sounds like cafe ambiance or office noise to make the agent sound more natural and human-like.","default":{"version":"v1","isEnabled":false,"ambientNoiseLevel":0.1},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables ambient noise playback. When enabled, the configured background sound or noise level is mixed with the agent's voice output.","default":false,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables ambient noise playback. When enabled, the configured background sound or noise level is mixed with the agent's voice output.","default":false,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.isEnabled","typeLabel":"boolean | null"},"ambientNoiseLevel":{"oneOf":[{"type":"number","description":"Volume level for the ambient noise relative to the agent's voice. Controls how loud the background noise is compared to the agent's speech. Lower values create subtle background ambience, higher values make the background more prominent.","format":"double","default":0.1,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.ambientNoiseLevel.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Volume level for the ambient noise relative to the agent's voice. Controls how loud the background noise is compared to the agent's speech. Lower values create subtle background ambience, higher values make the background more prominent.","format":"double","default":0.1,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.ambientNoiseLevel.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.ambientNoiseLevel","typeLabel":"number\u003cdouble> | null"},"backgroundSound":{"oneOf":[{"type":"string","description":"Identifier for the background sound to play. Specifies which ambient sound effect or noise pattern to use, such as office sounds, cafe ambience, or generic background noise.","default":null,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.backgroundSound.oneOf.0","typeLabel":"string"},{"type":"null","description":"Identifier for the background sound to play. Specifies which ambient sound effect or noise pattern to use, such as office sounds, cafe ambience, or generic background noise.","default":null,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.backgroundSound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.backgroundSound","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise","typeLabel":"object | null"},"rag":{"oneOf":[{"type":"object","description":"RAG (Retrieval-Augmented Generation) feature for knowledge base integration. Enables the agent to search and retrieve information from connected knowledge bases during conversations.","required":["kbLinks"],"properties":{"kbLinks":{"type":"array","items":{"required":["id"],"type":"object","properties":{"id":{"maxLength":255,"minLength":1,"type":"string","description":"Unique identifier of the knowledge base to link. References a knowledge base that has been created and contains indexed documents, articles, or reference materials that the agent can search.","isRequired":true,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.kbLinks.items.[INDEX].id","typeLabel":"string"}},"additionalProperties":false,"description":"Knowledge base link reference for RAG (Retrieval-Augmented Generation) feature. Points to a knowledge base that the agent can search during conversations to retrieve relevant information for answering questions. The knowledge base must be created and populated with documents before being linked to the agent.","uniqueKey":"config.features.oneOf.0.rag.oneOf.0.kbLinks.items.[INDEX]","typeLabel":"object"},"description":"List of knowledge base references that the agent can search. Each link identifies a knowledge base containing documents, FAQs, or reference materials. The agent can query these knowledge bases during conversations to augment its responses with retrieved information.","isRequired":true,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.kbLinks","typeLabel":"object[]"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables RAG functionality. When enabled, the agent can search linked knowledge bases during conversations to retrieve relevant information for answering user questions with accurate, contextual responses.","default":false,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables RAG functionality. When enabled, the agent can search linked knowledge bases during conversations to retrieve relevant information for answering user questions with accurate, contextual responses.","default":false,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mode":{"oneOf":[{"type":"string","description":"How the agent searches its knowledge bases in text chat: \"everyTurn\" (the default when omitted) searches once before every reply; \"tool\" lets the agent call a searchKnowledgeBase tool when it needs facts, as many times as a reply needs. Applies to text chat only; voice calls search on every turn in either mode.","enum":["everyTurn","tool"],"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.mode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.rag.oneOf.0.mode.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.mode","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.rag.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.rag","typeLabel":"object | null"},"languageSwitching":{"oneOf":[{"type":"object","description":"Language switching capability allowing the agent to switch between multiple languages during the call. Enables the agent to communicate in different languages within the same conversation.","default":{"version":"v1","isEnabled":true},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables the language switching capability. When enabled, the agent can switch languages mid-conversation in response to user requests to speak in a different language.","default":true,"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables the language switching capability. When enabled, the agent can switch languages mid-conversation in response to user requests to speak in a different language.","default":true,"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0.isEnabled","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.languageSwitching","typeLabel":"object | null"},"fillers":{"oneOf":[{"type":"object","description":"Filler words and phrases configuration. Controls natural speech patterns like \"um\", \"uh\", \"let me see\" to make the agent sound more conversational and human-like.","default":{"version":"v1","isEnabled":true,"strategy":{"type":"static","texts":["um"]}},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables filler word insertion. When enabled, the agent occasionally uses the configured filler phrases during conversations to sound more natural and less robotic.","default":true,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables filler word insertion. When enabled, the agent occasionally uses the configured filler phrases during conversations to sound more natural and less robotic.","default":true,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.isEnabled","typeLabel":"boolean | null"},"strategy":{"oneOf":[{"type":"object","description":"Strategy for selecting and inserting filler words. Static strategies use a predefined list of filler phrases. The strategy controls which fillers to use and how often they appear in the agent's speech.","default":{"type":"static","texts":["um"]},"required":["type"],"properties":{"texts":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.texts.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of filler phrases the agent can use. The agent randomly selects from these options when inserting verbal pauses. Common examples include \"um\", \"uh\", \"let me see\", \"well\", \"you know\", \"hmm\", or \"let me think\". Customize this list to control the agent's hesitation patterns and speaking style.","default":["um"],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.texts.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of filler phrases the agent can use. The agent randomly selects from these options when inserting verbal pauses. Common examples include \"um\", \"uh\", \"let me see\", \"well\", \"you know\", \"hmm\", or \"let me think\". Customize this list to control the agent's hesitation patterns and speaking style.","default":["um"],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.texts.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.texts","typeLabel":"string[] | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.fillers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers","typeLabel":"object | null"},"backchannel":{"oneOf":[{"type":"object","description":"Backchannel responses configuration. Controls brief acknowledgments like \"mm-hmm\", \"I see\", \"right\" that the agent uses while listening to show active engagement.","default":{"version":"v1","isEnabled":false},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables backchannel acknowledgments. When enabled, the agent produces listening cues while the user speaks to indicate attention and understanding.","default":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables backchannel acknowledgments. When enabled, the agent produces listening cues while the user speaks to indicate attention and understanding.","default":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.isEnabled","typeLabel":"boolean | null"},"behavior":{"oneOf":[{"type":"object","description":"Behavior configuration controlling when and how the agent produces backchannels. Static behaviors use configurable timing properties to determine when to insert acknowledgments. Smart behaviors use intelligent detection to produce backchannels at natural conversation points.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to guide the AI in producing backchannels. Provides context about when or how to acknowledge, tone to use, or specific phrases to prefer. Supports variable interpolation using {{variableName}} syntax for dynamic instructions based on conversation data.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to guide the AI in producing backchannels. Provides context about when or how to acknowledge, tone to use, or specific phrases to prefer. Supports variable interpolation using {{variableName}} syntax for dynamic instructions based on conversation data.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.additionalInstructions","typeLabel":"string | null"},"frequency":{"oneOf":[{"type":"number","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Lower values make backchannels very rare, 0.5 provides moderate acknowledgments, and higher values produce frequent listening cues. Controls how often the AI decides to signal active listening during user speech.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.frequency.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Lower values make backchannels very rare, 0.5 provides moderate acknowledgments, and higher values produce frequent listening cues. Controls how often the AI decides to signal active listening during user speech.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.frequency.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.frequency","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0","typeLabel":"object"},{"type":"object","description":"Behavior configuration controlling when and how the agent produces backchannels. Static behaviors use configurable timing properties to determine when to insert acknowledgments. Smart behaviors use intelligent detection to produce backchannels at natural conversation points.","required":["type"],"properties":{"phrases":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.phrases.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of acknowledgment phrases the agent can use for backchannels. The agent randomly selects from these options when timing conditions are met. Common examples include \"uh-huh\", \"mm-hmm\", \"I see\", \"right\", \"okay\", or \"go on\". Supports variable interpolation using {{variableName}} syntax for dynamic phrases.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.phrases.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of acknowledgment phrases the agent can use for backchannels. The agent randomly selects from these options when timing conditions are met. Common examples include \"uh-huh\", \"mm-hmm\", \"I see\", \"right\", \"okay\", or \"go on\". Supports variable interpolation using {{variableName}} syntax for dynamic phrases.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.phrases.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.phrases","typeLabel":"string[] | null"},"minLengthVoice":{"oneOf":[{"type":"number","description":"Minimum duration in seconds the user must speak before a backchannel can be triggered. Prevents acknowledgments from interrupting very short utterances. The agent waits at least this long into user speech before considering backchannel insertion.","format":"double","default":10,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoice.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Minimum duration in seconds the user must speak before a backchannel can be triggered. Prevents acknowledgments from interrupting very short utterances. The agent waits at least this long into user speech before considering backchannel insertion.","format":"double","default":10,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoice.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoice","typeLabel":"number\u003cdouble> | null"},"minLengthVoiceDeviation":{"oneOf":[{"type":"number","description":"Percentage deviation for minimum voice length randomization, ranging from 0.0 to 1.0. Multiplied by MinLengthVoice to introduce natural variation in when backchannels can occur. Higher values create more unpredictability in timing for a more human-like pattern.","format":"double","default":0.25,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoiceDeviation.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Percentage deviation for minimum voice length randomization, ranging from 0.0 to 1.0. Multiplied by MinLengthVoice to introduce natural variation in when backchannels can occur. Higher values create more unpredictability in timing for a more human-like pattern.","format":"double","default":0.25,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoiceDeviation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoiceDeviation","typeLabel":"number\u003cdouble> | null"},"frequency":{"oneOf":[{"type":"number","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Controls how often acknowledgments occur when timing conditions are met. Lower values make backchannels rarer, higher values produce more frequent listening cues.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.frequency.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Controls how often acknowledgments occur when timing conditions are met. Lower values make backchannels rarer, higher values produce more frequent listening cues.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.frequency.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.frequency","typeLabel":"number\u003cdouble> | null"},"minCooldown":{"oneOf":[{"type":"number","description":"Minimum time in seconds that must elapse between consecutive backchannels. Prevents acknowledgments from occurring too close together. The agent waits at least this long after one backchannel before producing another.","format":"double","default":8,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldown.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Minimum time in seconds that must elapse between consecutive backchannels. Prevents acknowledgments from occurring too close together. The agent waits at least this long after one backchannel before producing another.","format":"double","default":8,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldown.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldown","typeLabel":"number\u003cdouble> | null"},"minCooldownDeviation":{"oneOf":[{"type":"number","description":"Percentage deviation for cooldown randomization, ranging from 0.0 to 1.0. Multiplied by MinCooldown to introduce natural variation in spacing between backchannels. Higher values create more unpredictable timing for a more human-like rhythm.","format":"double","default":0.25,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldownDeviation.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Percentage deviation for cooldown randomization, ranging from 0.0 to 1.0. Multiplied by MinCooldown to introduce natural variation in spacing between backchannels. Higher values create more unpredictable timing for a more human-like rhythm.","format":"double","default":0.25,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldownDeviation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldownDeviation","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1","typeLabel":"object"},{"type":"object","description":"Behavior configuration controlling when and how the agent produces backchannels. Static behaviors use configurable timing properties to determine when to insert acknowledgments. Smart behaviors use intelligent detection to produce backchannels at natural conversation points.","required":["type"],"properties":{"phrases":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.phrases.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of acknowledgment phrases the agent can use for backchannels. The agent randomly selects from these options when inserting listening cues. Common examples include \"uh-huh\", \"mm-hmm\", \"I see\", \"right\", \"okay\", or \"go on\". Supports variable interpolation using {{variableName}} syntax for dynamic phrases.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.phrases.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of acknowledgment phrases the agent can use for backchannels. The agent randomly selects from these options when inserting listening cues. Common examples include \"uh-huh\", \"mm-hmm\", \"I see\", \"right\", \"okay\", or \"go on\". Supports variable interpolation using {{variableName}} syntax for dynamic phrases.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.phrases.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.phrases","typeLabel":"string[] | null"},"frequency":{"oneOf":[{"type":"number","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Lower values make backchannels very rare, 0.5 provides moderate acknowledgments, and higher values produce frequent listening cues. Controls how often the agent signals active listening during user speech.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.frequency.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Lower values make backchannels very rare, 0.5 provides moderate acknowledgments, and higher values produce frequent listening cues. Controls how often the agent signals active listening during user speech.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.frequency.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.frequency","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.backchannel.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel","typeLabel":"object | null"},"turnTaking":{"oneOf":[{"type":"object","description":"Turn taking configuration for the main customer call. Controls which DashaScript VAD mode is passed to the initial connect operation.","default":{"version":"v1","vad":"asap_v2","vadFallback":"asap_v2"},"properties":{"vad":{"type":"string","description":"Voice activity detection mode passed to the main call connect options.","default":"asap_v2","enum":["asap_v1","asap_v2","flux","companion"],"uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.0.vad","typeLabel":"enum\u003cstring>"},"vadFallback":{"type":"string","description":"Fallback used only in companion mode. Omitted uses Platform's ASAP v2 default.","default":"asap_v2","enum":["asap_v2","asap_v1","legacy"],"uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.0.vadFallback","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.turnTaking","typeLabel":"object | null"},"companions":{"oneOf":[{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"oneOf":[{"type":"string","description":"Optional absolute ws/wss URL. Omit to resolve the companion by its registered name.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.url.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional absolute ws/wss URL. Omit to resolve the companion by its registered name.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.url","typeLabel":"string | null"},"streams":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.streams.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Subscribed streams: audio, vad, stt, tts, vad_prob. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.streams.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Subscribed streams: audio, vad, stt, tts, vad_prob. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.streams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.streams","typeLabel":"string[] | null"},"channels":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.channels.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Audio channels: in, out. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.channels.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Audio channels: in, out. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.channels.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.channels","typeLabel":"string[] | null"},"mic":{"oneOf":[{"type":"string","description":"Microphone source: raw or cleaned. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.mic.oneOf.0","typeLabel":"string"},{"type":"null","description":"Microphone source: raw or cleaned. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.mic.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.mic","typeLabel":"string | null"},"turn_control":{"oneOf":[{"type":"boolean","description":"Opt in to controlling turns when turnTaking.vad is companion.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.turn_control.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opt in to controlling turns when turnTaking.vad is companion.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.turn_control.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.turn_control","typeLabel":"boolean | null"},"interruption_control":{"oneOf":[{"type":"boolean","description":"Opt in to companion interruption decisions. Requires turn control.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.interruption_control.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opt in to companion interruption decisions. Requires turn control.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.interruption_control.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.interruption_control","typeLabel":"boolean | null"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional headers sent on the companion WebSocket connection.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional headers sent on the companion WebSocket connection.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers","typeLabel":"object | null"},"max_message_bytes":{"oneOf":[{"type":"integer","description":"Positive inbound message size limit in bytes.","format":"int32","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_message_bytes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Positive inbound message size limit in bytes.","format":"int32","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_message_bytes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_message_bytes","typeLabel":"integer\u003cint32> | null"},"max_messages_per_second":{"oneOf":[{"type":"number","description":"Positive inbound message rate limit.","format":"double","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_messages_per_second.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Positive inbound message rate limit.","format":"double","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_messages_per_second.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_messages_per_second","typeLabel":"number\u003cdouble> | null"},"params":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Companion-specific parameters, preserving nested JSON values.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Companion-specific parameters, preserving nested JSON values.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params","typeLabel":"object | null"}},"additionalProperties":false,"description":"Voice companion options for the main customer call. Field names match Platform's wire configuration.\nOmitted options inherit the registered companion's defaults. Provider secrets belong in Platform.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties","typeLabel":"object"},"description":"Optional voice companions for the main customer call, keyed by registered name.\nA custom companion may supply an absolute ws/wss URL. Omitted means no companions.","default":null,"uniqueKey":"config.features.oneOf.0.companions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"object","properties":{"url":{"oneOf":[{"type":"string","description":"Optional absolute ws/wss URL. Omit to resolve the companion by its registered name.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.url.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional absolute ws/wss URL. Omit to resolve the companion by its registered name.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.url","typeLabel":"string | null"},"streams":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.streams.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Subscribed streams: audio, vad, stt, tts, vad_prob. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.streams.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Subscribed streams: audio, vad, stt, tts, vad_prob. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.streams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.streams","typeLabel":"string[] | null"},"channels":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.channels.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Audio channels: in, out. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.channels.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Audio channels: in, out. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.channels.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.channels","typeLabel":"string[] | null"},"mic":{"oneOf":[{"type":"string","description":"Microphone source: raw or cleaned. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.mic.oneOf.0","typeLabel":"string"},{"type":"null","description":"Microphone source: raw or cleaned. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.mic.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.mic","typeLabel":"string | null"},"turn_control":{"oneOf":[{"type":"boolean","description":"Opt in to controlling turns when turnTaking.vad is companion.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.turn_control.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opt in to controlling turns when turnTaking.vad is companion.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.turn_control.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.turn_control","typeLabel":"boolean | null"},"interruption_control":{"oneOf":[{"type":"boolean","description":"Opt in to companion interruption decisions. Requires turn control.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.interruption_control.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opt in to companion interruption decisions. Requires turn control.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.interruption_control.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.interruption_control","typeLabel":"boolean | null"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional headers sent on the companion WebSocket connection.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional headers sent on the companion WebSocket connection.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers","typeLabel":"object | null"},"max_message_bytes":{"oneOf":[{"type":"integer","description":"Positive inbound message size limit in bytes.","format":"int32","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_message_bytes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Positive inbound message size limit in bytes.","format":"int32","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_message_bytes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_message_bytes","typeLabel":"integer\u003cint32> | null"},"max_messages_per_second":{"oneOf":[{"type":"number","description":"Positive inbound message rate limit.","format":"double","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_messages_per_second.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Positive inbound message rate limit.","format":"double","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_messages_per_second.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_messages_per_second","typeLabel":"number\u003cdouble> | null"},"params":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Companion-specific parameters, preserving nested JSON values.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Companion-specific parameters, preserving nested JSON values.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params","typeLabel":"object | null"}},"additionalProperties":false,"description":"Voice companion options for the main customer call. Field names match Platform's wire configuration.\nOmitted options inherit the registered companion's defaults. Provider secrets belong in Platform.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties","typeLabel":"object"},"description":"Optional voice companions for the main customer call, keyed by registered name.\nA custom companion may supply an absolute ws/wss URL. Omitted means no companions.","default":null,"uniqueKey":"config.features.oneOf.0.companions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions","typeLabel":"object | null"},"silenceManagement":{"oneOf":[{"type":"object","description":"Silence management configuration. Controls how the agent handles pauses and silence during conversations including timeout behavior and prompting strategies.","default":{"version":"v1","isEnabled":true,"maxReminderAttempts":2,"reminderSilenceThresholdSeconds":5,"endWhenReminderLimitExceeded":true},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables silence management. When enabled, the agent sends reminders when the user is silent and can automatically end conversations after inactivity thresholds are exceeded. When disabled, the agent waits indefinitely for user input without prompting or terminating.","default":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables silence management. When enabled, the agent sends reminders when the user is silent and can automatically end conversations after inactivity thresholds are exceeded. When disabled, the agent waits indefinitely for user input without prompting or terminating.","default":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.isEnabled","typeLabel":"boolean | null"},"maxReminderAttempts":{"oneOf":[{"type":"integer","description":"Maximum number of reminder attempts to make when the user is silent. After this limit is reached, behavior is controlled by EndWhenReminderLimitExceeded to determine whether to end the call or stop reminding.","format":"int32","default":2,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.maxReminderAttempts.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum number of reminder attempts to make when the user is silent. After this limit is reached, behavior is controlled by EndWhenReminderLimitExceeded to determine whether to end the call or stop reminding.","format":"int32","default":2,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.maxReminderAttempts.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.maxReminderAttempts","typeLabel":"integer\u003cint32> | null"},"reminderSilenceThresholdSeconds":{"oneOf":[{"type":"number","description":"Silence duration in seconds after which a reminder is triggered. The agent waits this long for user input before prompting the user to ensure they are still engaged in the conversation.","format":"double","default":5,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.reminderSilenceThresholdSeconds.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Silence duration in seconds after which a reminder is triggered. The agent waits this long for user input before prompting the user to ensure they are still engaged in the conversation.","format":"double","default":5,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.reminderSilenceThresholdSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.reminderSilenceThresholdSeconds","typeLabel":"number\u003cdouble> | null"},"endWhenReminderLimitExceeded":{"oneOf":[{"type":"boolean","description":"Controls whether to end the conversation when maximum reminder attempts have been exceeded. When true, the call terminates after all reminders are exhausted. When false, the agent stops sending reminders but keeps the conversation open, waiting indefinitely for user input.","default":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endWhenReminderLimitExceeded.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether to end the conversation when maximum reminder attempts have been exceeded. When true, the call terminates after all reminders are exhausted. When false, the agent stops sending reminders but keeps the conversation open, waiting indefinitely for user input.","default":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endWhenReminderLimitExceeded.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endWhenReminderLimitExceeded","typeLabel":"boolean | null"},"endAfterSilenceThresholdSeconds":{"oneOf":[{"type":"number","description":"Absolute silence duration in seconds after which the conversation is automatically ended, regardless of reminder attempts. Provides a hard timeout for user inactivity. When not specified, only reminder-based termination applies.","format":"double","default":null,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endAfterSilenceThresholdSeconds.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Absolute silence duration in seconds after which the conversation is automatically ended, regardless of reminder attempts. Provides a hard timeout for user inactivity. When not specified, only reminder-based termination applies.","format":"double","default":null,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endAfterSilenceThresholdSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endAfterSilenceThresholdSeconds","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement","typeLabel":"object | null"},"preConversationMedia":{"oneOf":[{"type":"object","description":"Pre-conversation media playback. Plays an audio file immediately when the call connects,\nbefore the conversation begins. The media plays once and is non-interruptible.\nCan be enabled independently for inbound, outbound, and web calls.","default":{"version":"v1","isEnabled":false,"enabledForInbound":false,"enabledForOutbound":false,"enabledForWebCall":false},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables pre-conversation media playback.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables pre-conversation media playback.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play before the conversation starts.\nMust reference a media file that has been uploaded to the system.","default":null,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play before the conversation starts.\nMust reference a media file that has been uploaded to the system.","default":null,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.mediaFilename","typeLabel":"string | null"},"enabledForInbound":{"oneOf":[{"type":"boolean","description":"Enables pre-conversation media for inbound phone calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForInbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables pre-conversation media for inbound phone calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForInbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForInbound","typeLabel":"boolean | null"},"enabledForOutbound":{"oneOf":[{"type":"boolean","description":"Enables pre-conversation media for outbound phone calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForOutbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables pre-conversation media for outbound phone calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForOutbound","typeLabel":"boolean | null"},"enabledForWebCall":{"oneOf":[{"type":"boolean","description":"Enables pre-conversation media for web-based voice calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForWebCall.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables pre-conversation media for web-based voice calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForWebCall.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForWebCall","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia","typeLabel":"object | null"},"noiseSuppression":{"oneOf":[{"type":"object","description":"Noise suppression configuration for filtering background noise from call audio.\nSupports \"none\" (disabled) or \"krisp\" (Krisp engine, additional fee applies).\nAlso controls the noise suppression level and recording write strategy.","default":{"version":"v1","isEnabled":false,"type":"none","noiseSuppressionLevel":75,"recordWriteStrategy":"raw"},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables noise suppression. When disabled, no noise suppression is applied regardless of other settings.","default":false,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables noise suppression. When disabled, no noise suppression is applied regardless of other settings.","default":false,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.isEnabled","typeLabel":"boolean | null"},"type":{"oneOf":[{"type":"string","description":"The noise suppression engine to use.","default":"none","enum":["none","krisp"],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.type.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.type","typeLabel":"enum\u003cstring> | null"},"noiseSuppressionLevel":{"oneOf":[{"type":"integer","description":"The noise suppression level, from 0 (minimum) to 100 (maximum). Default is 75.\nControls how aggressively background noise is filtered.","format":"int32","default":75,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.noiseSuppressionLevel.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"The noise suppression level, from 0 (minimum) to 100 (maximum). Default is 75.\nControls how aggressively background noise is filtered.","format":"int32","default":75,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.noiseSuppressionLevel.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.noiseSuppressionLevel","typeLabel":"integer\u003cint32> | null"},"recordWriteStrategy":{"oneOf":[{"type":"string","description":"Controls what audio is stored in the call recording.\nDefault is \"raw\".","default":"raw","enum":["raw","cleaned"],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.recordWriteStrategy.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.recordWriteStrategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.recordWriteStrategy","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features","typeLabel":"object | null"},"mcpConnections":{"oneOf":[{"type":"array","items":{"required":["name","serverUrl"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Display name for this MCP connection. Used to identify the connection in logs and configuration.","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].name","typeLabel":"string"},"serverUrl":{"type":"string","description":"MCP server URL to connect to. The URL format depends on the transport protocol (SSE uses HTTP/HTTPS endpoints, StreamableHTTP uses HTTP endpoints).","format":"uri","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].serverUrl","typeLabel":"string\u003curi>"},"authentication":{"oneOf":[{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["apiKey","type"],"properties":{"apiKey":{"minLength":1,"type":"string","description":"API key value to send with requests. This is the secret key provided by the MCP server.","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.apiKey","typeLabel":"string"},"headerName":{"oneOf":[{"type":"string","description":"HTTP header name for the API key. Defaults to \"Authorization\" (the key is sent as the raw value, without a \"Bearer\" prefix). Set a custom header name such as \"X-API-Key\" if the MCP server expects one.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.headerName.oneOf.0","typeLabel":"string"},{"type":"null","description":"HTTP header name for the API key. Defaults to \"Authorization\" (the key is sent as the raw value, without a \"Bearer\" prefix). Set a custom header name such as \"X-API-Key\" if the MCP server expects one.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.headerName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.headerName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0","typeLabel":"object"},{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["token","type"],"properties":{"token":{"minLength":1,"type":"string","description":"Bearer token value without the \"Bearer \" prefix. The system automatically adds the prefix when sending requests. This is the OAuth or JWT token provided by the MCP server or authorization service.","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.1.token","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.1","typeLabel":"object"},{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["type"],"properties":{},"additionalProperties":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication","typeLabel":"object · object · object · null"},"customHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with each request to the MCP server. Useful for passing additional metadata or configuration to the server.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with each request to the MCP server. Useful for passing additional metadata or configuration to the server.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Whether this MCP connection is enabled. When disabled, the agent will not connect to this MCP server or use its tools.","default":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether this MCP connection is enabled. When disabled, the agent will not connect to this MCP server or use its tools.","default":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isEnabled","typeLabel":"boolean | null"},"description":{"oneOf":[{"type":"string","description":"Optional description explaining the purpose of this MCP connection or what services it provides.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional description explaining the purpose of this MCP connection or what services it provides.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].description","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for MCP communication. Supported values are SSE (Server-Sent Events for persistent connections) and StreamableHTTP (for request-response patterns).","default":"SSE","enum":["SSE","StreamableHTTP"],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].transport","typeLabel":"enum\u003cstring> | null"},"blackListTools":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].blackListTools.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of tool names to exclude from this MCP connection. Tools in this list will not be available to the agent even if the MCP server provides them. Useful for restricting access to specific tools.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].blackListTools.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of tool names to exclude from this MCP connection. Tools in this list will not be available to the agent even if the MCP server provides them. Useful for restricting access to specific tools.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].blackListTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].blackListTools","typeLabel":"string[] | null"},"whiteListTools":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].whiteListTools.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of tool names to allow from this MCP connection. When specified, only tools in this list will be available to the agent. If not specified, all tools from the server are available (subject to BlackListTools).","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].whiteListTools.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of tool names to allow from this MCP connection. When specified, only tools in this list will be available to the agent. If not specified, all tools from the server are available (subject to BlackListTools).","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].whiteListTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].whiteListTools","typeLabel":"string[] | null"},"isLongRunning":{"oneOf":[{"type":"boolean","description":"Whether every tool from this MCP connection is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the MCP server answers. Use LongRunningTools instead to mark only some of the connection's tools. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isLongRunning.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether every tool from this MCP connection is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the MCP server answers. Use LongRunningTools instead to mark only some of the connection's tools. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isLongRunning.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isLongRunning","typeLabel":"boolean | null"},"longRunningTools":{"oneOf":[{"type":"array","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Raw MCP tool name, as reported by the MCP server and without the connection prefix.","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX].name","typeLabel":"string"},"additionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX].additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX].additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX].additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"description":"Marks a single tool of an MCP connection as slow. A slow tool never blocks the conversation: the agent gets an immediate acknowledgement, keeps talking to the user, and the real result is added to the conversation history once the MCP server answers.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Individual tools of this connection that are slow, each with optional extra guidance for the agent. Tools listed here are slow even when IsLongRunning is disabled; when IsLongRunning is enabled every tool of the connection is slow and this list only supplies the per-tool guidance. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Raw MCP tool name, as reported by the MCP server and without the connection prefix."},"additionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null},{"type":"null","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null}]}},"additionalProperties":false,"description":"Marks a single tool of an MCP connection as slow. A slow tool never blocks the conversation: the agent gets an immediate acknowledgement, keeps talking to the user, and the real result is added to the conversation history once the MCP server answers."},"description":"Individual tools of this connection that are slow, each with optional extra guidance for the agent. Tools listed here are slow even when IsLongRunning is disabled; when IsLongRunning is enabled every tool of the connection is slow and this list only supplies the per-tool guidance. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"Model Context Protocol connection configuration for integrating external services with the agent. Defines how to connect to an MCP server including server URL, authentication, transport protocol, custom headers, and tool filtering.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Model Context Protocol connections for integrating external services. Allows the agent to connect to MCP servers via SSE or HTTP to access external tools and data sources.","default":[],"uniqueKey":"config.mcpConnections.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["name","serverUrl"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Display name for this MCP connection. Used to identify the connection in logs and configuration."},"serverUrl":{"type":"string","description":"MCP server URL to connect to. The URL format depends on the transport protocol (SSE uses HTTP/HTTPS endpoints, StreamableHTTP uses HTTP endpoints).","format":"uri"},"authentication":{"oneOf":[{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["apiKey","type"],"properties":{"apiKey":{"minLength":1,"type":"string","description":"API key value to send with requests. This is the secret key provided by the MCP server."},"headerName":{"oneOf":[{"type":"string","description":"HTTP header name for the API key. Defaults to \"Authorization\" (the key is sent as the raw value, without a \"Bearer\" prefix). Set a custom header name such as \"X-API-Key\" if the MCP server expects one."},{"type":"null","description":"HTTP header name for the API key. Defaults to \"Authorization\" (the key is sent as the raw value, without a \"Bearer\" prefix). Set a custom header name such as \"X-API-Key\" if the MCP server expects one."}]}},"additionalProperties":false},{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["token","type"],"properties":{"token":{"minLength":1,"type":"string","description":"Bearer token value without the \"Bearer \" prefix. The system automatically adds the prefix when sending requests. This is the OAuth or JWT token provided by the MCP server or authorization service."}},"additionalProperties":false},{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["type"],"properties":{},"additionalProperties":false},{"type":"null"}]},"customHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string"},"description":"Custom HTTP headers to include with each request to the MCP server. Useful for passing additional metadata or configuration to the server."},{"type":"null","additionalProperties":{"type":"string"},"description":"Custom HTTP headers to include with each request to the MCP server. Useful for passing additional metadata or configuration to the server."}]},"isEnabled":{"oneOf":[{"type":"boolean","description":"Whether this MCP connection is enabled. When disabled, the agent will not connect to this MCP server or use its tools.","default":true},{"type":"null","description":"Whether this MCP connection is enabled. When disabled, the agent will not connect to this MCP server or use its tools.","default":true}]},"description":{"oneOf":[{"type":"string","description":"Optional description explaining the purpose of this MCP connection or what services it provides.","default":null},{"type":"null","description":"Optional description explaining the purpose of this MCP connection or what services it provides.","default":null}]},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for MCP communication. Supported values are SSE (Server-Sent Events for persistent connections) and StreamableHTTP (for request-response patterns).","default":"SSE","enum":["SSE","StreamableHTTP"]},{"type":"null"}]},"blackListTools":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"List of tool names to exclude from this MCP connection. Tools in this list will not be available to the agent even if the MCP server provides them. Useful for restricting access to specific tools.","default":null},{"type":"null","items":{"type":"string"},"description":"List of tool names to exclude from this MCP connection. Tools in this list will not be available to the agent even if the MCP server provides them. Useful for restricting access to specific tools.","default":null}]},"whiteListTools":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"List of tool names to allow from this MCP connection. When specified, only tools in this list will be available to the agent. If not specified, all tools from the server are available (subject to BlackListTools).","default":null},{"type":"null","items":{"type":"string"},"description":"List of tool names to allow from this MCP connection. When specified, only tools in this list will be available to the agent. If not specified, all tools from the server are available (subject to BlackListTools).","default":null}]},"isLongRunning":{"oneOf":[{"type":"boolean","description":"Whether every tool from this MCP connection is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the MCP server answers. Use LongRunningTools instead to mark only some of the connection's tools. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false},{"type":"null","description":"Whether every tool from this MCP connection is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the MCP server answers. Use LongRunningTools instead to mark only some of the connection's tools. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false}]},"longRunningTools":{"oneOf":[{"type":"array","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Raw MCP tool name, as reported by the MCP server and without the connection prefix."},"additionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null},{"type":"null","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null}]}},"additionalProperties":false,"description":"Marks a single tool of an MCP connection as slow. A slow tool never blocks the conversation: the agent gets an immediate acknowledgement, keeps talking to the user, and the real result is added to the conversation history once the MCP server answers."},"description":"Individual tools of this connection that are slow, each with optional extra guidance for the agent. Tools listed here are slow even when IsLongRunning is disabled; when IsLongRunning is enabled every tool of the connection is slow and this list only supplies the per-tool guidance. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":null},{"type":"null","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Raw MCP tool name, as reported by the MCP server and without the connection prefix."},"additionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null},{"type":"null","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null}]}},"additionalProperties":false,"description":"Marks a single tool of an MCP connection as slow. A slow tool never blocks the conversation: the agent gets an immediate acknowledgement, keeps talking to the user, and the real result is added to the conversation history once the MCP server answers."},"description":"Individual tools of this connection that are slow, each with optional extra guidance for the agent. Tools listed here are slow even when IsLongRunning is disabled; when IsLongRunning is enabled every tool of the connection is slow and this list only supplies the per-tool guidance. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":null}]}},"additionalProperties":false,"description":"Model Context Protocol connection configuration for integrating external services with the agent. Defines how to connect to an MCP server including server URL, authentication, transport protocol, custom headers, and tool filtering."},"description":"Model Context Protocol connections for integrating external services. Allows the agent to connect to MCP servers via SSE or HTTP to access external tools and data sources.","default":[],"uniqueKey":"config.mcpConnections.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections","typeLabel":"object[] | null"},"startWebhook":{"oneOf":[{"type":"object","description":"Webhook URL called when a call starts, before the conversation begins. Allows you to inject dynamic data or configuration at call initiation time.","required":["webhook"],"properties":{"webhook":{"type":"object","description":"Webhook configuration defining the endpoint, headers, and request settings for start-of-conversation notifications. The system sends conversation initiation data to this webhook and waits for a response.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.startWebhook.oneOf.0.webhook.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.startWebhook.oneOf.0.webhook.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.startWebhook.oneOf.0.webhook.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.startWebhook.oneOf.0.webhook.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.headers","typeLabel":"object | null"},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"],"isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.httpMethod","typeLabel":"enum\u003cstring>"},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams","typeLabel":"object | null"},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain.","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0.template","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook","typeLabel":"object"},"fallbackResponse":{"oneOf":[{"type":"object","description":"Fallback response to use when the webhook call fails or times out. Determines whether to accept or reject the conversation if the webhook endpoint is unavailable or returns an error. Can be configured to accept the call with default settings or reject it.","default":{"accept":false,"reasonMessage":"Webhook for started webhook failed"},"properties":{"overrideAgentConfig":{"oneOf":[{"type":"object","description":"Optional modified agent configuration to use for this call instead of the original. Allows customizing the agent's behavior, language model settings, prompts, voice, tools, or any other configuration based on external logic or data. The entire configuration is replaced, not merged, so include all settings you want to apply.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideAgentConfig.oneOf.0","typeLabel":"object"},{"type":"null","description":"Optional modified agent configuration to use for this call instead of the original. Allows customizing the agent's behavior, language model settings, prompts, voice, tools, or any other configuration based on external logic or data. The entire configuration is replaced, not merged, so include all settings you want to apply.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideAgentConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideAgentConfig","typeLabel":"object | null"},"additionalData":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Additional data variables to use for this call. These values can be referenced in prompts using {{variableName}} syntax and override or supplement the agent's default AdditionalData. Useful for personalizing the conversation based on external context or user information.","uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Additional data variables to use for this call. These values can be referenced in prompts using {{variableName}} syntax and override or supplement the agent's default AdditionalData. Useful for personalizing the conversation based on external context or user information.","uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData","typeLabel":"object | null"},"overrideOutboundConfig":{"oneOf":[{"type":"object","description":"Optional override for outbound SIP configuration. Allows changing the SIP credentials, server, or transport settings for this specific outbound call without modifying the agent's default SIP configuration.","properties":{"phoneNumber":{"oneOf":[{"maxLength":255,"type":"string","description":"Phone number to use for this call instead of the agent's default. Overrides which number appears as the caller ID and which SIP registration is used for the call.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.phoneNumber.oneOf.0","typeLabel":"string"},{"maxLength":255,"type":"null","description":"Phone number to use for this call instead of the agent's default. Overrides which number appears as the caller ID and which SIP registration is used for the call.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.phoneNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.phoneNumber","typeLabel":"string | null"},"credentialsId":{"oneOf":[{"type":"string","description":"SIP credentials to use for this call instead of the agent's default. Allows routing the call through a different SIP trunk, useful for failover, cost optimization, or geographic routing.","format":"uuid","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.credentialsId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"SIP credentials to use for this call instead of the agent's default. Allows routing the call through a different SIP trunk, useful for failover, cost optimization, or geographic routing.","format":"uuid","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.credentialsId.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.credentialsId","typeLabel":"string\u003cuuid> | null"},"displayName":{"oneOf":[{"maxLength":255,"type":"string","description":"Display name to use for caller ID for this call instead of the phone number's default. Overrides the caller ID name shown to the recipient.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"maxLength":255,"type":"null","description":"Display name to use for caller ID for this call instead of the phone number's default. Overrides the caller ID name shown to the recipient.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.displayName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0","typeLabel":"object"},{"type":"object","description":"Fallback response to use when the webhook call fails or times out. Determines whether to accept or reject the conversation if the webhook endpoint is unavailable or returns an error. Can be configured to accept the call with default settings or reject it.","default":{"accept":false,"reasonMessage":"Webhook for started webhook failed"},"required":["reasonMessage"],"properties":{"reasonMessage":{"minLength":1,"type":"string","description":"Explanation of why the call is being rejected. This message is used for logging and debugging purposes to understand why external logic determined the call should not proceed.","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.1.reasonMessage","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse","typeLabel":"object · object · null"},"isEnabledForInbound":{"oneOf":[{"type":"boolean","description":"Enables the start webhook for inbound phone calls. When enabled, the webhook is triggered when someone calls one of your configured phone numbers, allowing you to accept or reject incoming calls based on external logic.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForInbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables the start webhook for inbound phone calls. When enabled, the webhook is triggered when someone calls one of your configured phone numbers, allowing you to accept or reject incoming calls based on external logic.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForInbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForInbound","typeLabel":"boolean | null"},"isEnabledForOutbound":{"oneOf":[{"type":"boolean","description":"Enables the start webhook for outbound phone calls. When enabled, the webhook is triggered before making an outbound call, allowing you to modify call parameters or cancel the call based on external conditions.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForOutbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables the start webhook for outbound phone calls. When enabled, the webhook is triggered before making an outbound call, allowing you to modify call parameters or cancel the call based on external conditions.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForOutbound","typeLabel":"boolean | null"},"isEnabledForWidget":{"oneOf":[{"type":"boolean","description":"Enables the start webhook for widget-based conversations. When enabled, the webhook is triggered when a user initiates a conversation through your web widget, allowing you to accept or reject widget interactions.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForWidget.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables the start webhook for widget-based conversations. When enabled, the webhook is triggered when a user initiates a conversation through your web widget, allowing you to accept or reject widget interactions.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForWidget.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForWidget","typeLabel":"boolean | null"},"timeout":{"oneOf":[{"type":"number","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the fallback response is used. Controls how long the system waits before proceeding with or rejecting the conversation.","format":"double","default":10,"uniqueKey":"config.startWebhook.oneOf.0.timeout.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the fallback response is used. Controls how long the system waits before proceeding with or rejecting the conversation.","format":"double","default":10,"uniqueKey":"config.startWebhook.oneOf.0.timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.timeout","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook","typeLabel":"object | null"},"tools":{"oneOf":[{"type":"array","items":{"required":["description","name","schema","webhook"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Tool name identifier. Used by the language model to reference this tool when deciding which function to call.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].name","typeLabel":"string"},"schema":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].schema.additionalProperties","typeLabel":"any"},"description":"JSON Schema defining the tool's input parameters. Describes what arguments the tool accepts, their types, and which parameters are required. The language model uses this schema to generate valid function calls.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].schema","typeLabel":"object"},"webhook":{"type":"object","description":"Webhook endpoint to call when the tool is invoked. The system sends a POST request with the tool parameters to this URL and returns the response to the language model.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers","typeLabel":"object | null"},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"],"isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.httpMethod","typeLabel":"enum\u003cstring>"},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams","typeLabel":"object | null"},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.0.template","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.0","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook","typeLabel":"object"},"description":{"minLength":1,"type":"string","description":"Tool description explaining what the tool does and when to use it. The language model uses this description to decide whether this tool is appropriate for the current conversation context.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].description","typeLabel":"string"},"fallBackResult":{"oneOf":[{"description":"Fallback result to return if the webhook call fails. When specified, the agent continues the conversation using this result instead of reporting an error to the user.","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].fallBackResult.oneOf.0","typeLabel":"any"},{"description":"Fallback result to return if the webhook call fails. When specified, the agent continues the conversation using this result instead of reporting an error to the user.","default":null,"type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].fallBackResult.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].fallBackResult","typeLabel":"any | null"},"timeoutSeconds":{"oneOf":[{"type":"integer","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the call is considered failed and the fallback result is used if available.","format":"int32","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].timeoutSeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the call is considered failed and the fallback result is used if available.","format":"int32","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].timeoutSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].timeoutSeconds","typeLabel":"integer\u003cint32> | null"},"retryCount":{"oneOf":[{"type":"integer","description":"Number of retry attempts if the webhook call fails. Helps handle transient network errors or temporary service unavailability.","format":"int32","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].retryCount.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Number of retry attempts if the webhook call fails. Helps handle transient network errors or temporary service unavailability.","format":"int32","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].retryCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].retryCount","typeLabel":"integer\u003cint32> | null"},"isLongRunning":{"oneOf":[{"type":"boolean","description":"Whether this tool is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the webhook answers. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].isLongRunning.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether this tool is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the webhook answers. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].isLongRunning.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].isLongRunning","typeLabel":"boolean | null"},"longRunningAdditionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the operation usually takes. Only used when IsLongRunning is enabled and enhanced tooling is disabled.","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].longRunningAdditionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Extra guidance for the agent about this slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the operation usually takes. Only used when IsLongRunning is enabled and enhanced tooling is disabled.","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].longRunningAdditionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].longRunningAdditionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"description":"Custom tool definition for language model function calling. Describes a function that the agent can invoke during conversations to perform actions or retrieve information through webhook calls.","uniqueKey":"config.tools.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Custom tools available to the agent during conversations. Each tool defines a function the agent can call with parameters and expected output. The agent will use these tools when needed to accomplish tasks beyond conversation.","default":[],"uniqueKey":"config.tools.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","name","schema","webhook"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Tool name identifier. Used by the language model to reference this tool when deciding which function to call."},"schema":{"type":"object","additionalProperties":{"oneOf":[{}]},"description":"JSON Schema defining the tool's input parameters. Describes what arguments the tool accepts, their types, and which parameters are required. The language model uses this schema to generate valid function calls."},"webhook":{"type":"object","description":"Webhook endpoint to call when the tool is invoked. The system sends a POST request with the tool parameters to this URL and returns the response to the language model.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint."},{"type":"null","additionalProperties":{"type":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint."}]},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"]},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands."},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands."}]},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain."}},"additionalProperties":false},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result."},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result."}]}},"additionalProperties":false},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name."},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name."}]}},"additionalProperties":false},{"type":"null"}]}},"additionalProperties":false},{"type":"null"}]}},"additionalProperties":false},"description":{"minLength":1,"type":"string","description":"Tool description explaining what the tool does and when to use it. The language model uses this description to decide whether this tool is appropriate for the current conversation context."},"fallBackResult":{"oneOf":[{"description":"Fallback result to return if the webhook call fails. When specified, the agent continues the conversation using this result instead of reporting an error to the user.","default":null},{"description":"Fallback result to return if the webhook call fails. When specified, the agent continues the conversation using this result instead of reporting an error to the user.","default":null,"type":"null"}]},"timeoutSeconds":{"oneOf":[{"type":"integer","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the call is considered failed and the fallback result is used if available.","format":"int32","default":null},{"type":"null","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the call is considered failed and the fallback result is used if available.","format":"int32","default":null}]},"retryCount":{"oneOf":[{"type":"integer","description":"Number of retry attempts if the webhook call fails. Helps handle transient network errors or temporary service unavailability.","format":"int32","default":null},{"type":"null","description":"Number of retry attempts if the webhook call fails. Helps handle transient network errors or temporary service unavailability.","format":"int32","default":null}]},"isLongRunning":{"oneOf":[{"type":"boolean","description":"Whether this tool is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the webhook answers. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false},{"type":"null","description":"Whether this tool is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the webhook answers. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false}]},"longRunningAdditionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the operation usually takes. Only used when IsLongRunning is enabled and enhanced tooling is disabled.","default":null},{"type":"null","description":"Extra guidance for the agent about this slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the operation usually takes. Only used when IsLongRunning is enabled and enhanced tooling is disabled.","default":null}]}},"additionalProperties":false,"description":"Custom tool definition for language model function calling. Describes a function that the agent can invoke during conversations to perform actions or retrieve information through webhook calls."},"description":"Custom tools available to the agent during conversations. Each tool defines a function the agent can call with parameters and expected output. The agent will use these tools when needed to accomplish tasks beyond conversation.","default":[],"uniqueKey":"config.tools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools","typeLabel":"object[] | null"},"builtInTools":{"oneOf":[{"type":"array","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Built-in tool name. Currently supported tool is \"finishTheConversation\" for ending calls gracefully.","isRequired":true,"uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX].name","typeLabel":"string"},"additionalInstructions":{"oneOf":[{"type":"string","description":"Additional instructions for when and how to use this tool. Guides the agent on the appropriate circumstances to invoke the tool during conversations.","default":null,"uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX].additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Additional instructions for when and how to use this tool. Guides the agent on the appropriate circumstances to invoke the tool during conversations.","default":null,"uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX].additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX].additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"description":"Configuration for a built-in tool with custom usage instructions. Built-in tools are pre-defined system tools that don't require custom implementation, and this configuration allows you to specify when and how the agent should use them.","uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Built-in tools configuration with additional instructions for when and how to use them. Currently includes \"finishTheConversation\" tool with custom instructions that guide the agent on when to end calls gracefully. These are pre-defined system tools with configurable usage instructions.","default":[],"uniqueKey":"config.builtInTools.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Built-in tool name. Currently supported tool is \"finishTheConversation\" for ending calls gracefully."},"additionalInstructions":{"oneOf":[{"type":"string","description":"Additional instructions for when and how to use this tool. Guides the agent on the appropriate circumstances to invoke the tool during conversations.","default":null},{"type":"null","description":"Additional instructions for when and how to use this tool. Guides the agent on the appropriate circumstances to invoke the tool during conversations.","default":null}]}},"additionalProperties":false,"description":"Configuration for a built-in tool with custom usage instructions. Built-in tools are pre-defined system tools that don't require custom implementation, and this configuration allows you to specify when and how the agent should use them."},"description":"Built-in tools configuration with additional instructions for when and how to use them. Currently includes \"finishTheConversation\" tool with custom instructions that guide the agent on when to end calls gracefully. These are pre-defined system tools with configurable usage instructions.","default":[],"uniqueKey":"config.builtInTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.builtInTools","typeLabel":"object[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config","typeLabel":"object"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Whether the agent is enabled and can handle calls. When disabled, the agent cannot make outbound calls or handle inbound routing.","default":true,"uniqueKey":"isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether the agent is enabled and can handle calls. When disabled, the agent cannot make outbound calls or handle inbound routing.","default":true,"uniqueKey":"isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"isEnabled","typeLabel":"boolean | null"},"description":{"oneOf":[{"type":"string","description":"Optional description explaining the agent's purpose, behavior, or use case. Useful for documentation and team collaboration to understand what this agent is designed to do.","default":null,"uniqueKey":"description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional description explaining the agent's purpose, behavior, or use case. Useful for documentation and team collaboration to understand what this agent is designed to do.","default":null,"uniqueKey":"description.oneOf.1","typeLabel":"null"}],"uniqueKey":"description","typeLabel":"string | null"},"additionalData":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalData.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Default data for variable interpolation in agent prompts. Values can be referenced in prompts using {{variableName}} syntax. These serve as default values for the agent and can be overridden on a per-call basis when enqueueing calls.","uniqueKey":"additionalData.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalData.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Default data for variable interpolation in agent prompts. Values can be referenced in prompts using {{variableName}} syntax. These serve as default values for the agent and can be overridden on a per-call basis when enqueueing calls.","uniqueKey":"additionalData.oneOf.1","typeLabel":"null"}],"uniqueKey":"additionalData","typeLabel":"object | null"},"schedule":{"oneOf":[{"type":"object","description":"Time-based schedule defining when the agent can make outbound calls. Specifies available time slots for each day of the week and the timezone for schedule interpretation. Scheduled calls will only be placed during these time windows.","default":{"timezone":"UTC","mon":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"tue":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"wed":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"thu":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"fri":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"sat":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"sun":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}]},"required":["timezone"],"properties":{"timezone":{"minLength":1,"type":"string","description":"Timezone identifier for interpreting the schedule times. Uses IANA timezone database names like \"America/New_York\", \"Europe/London\", or \"UTC\". All time slots are interpreted in this timezone.","isRequired":true,"uniqueKey":"schedule.oneOf.0.timezone","typeLabel":"string"},"mon":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Monday. Each slot defines a start and end time when outbound calls can be made. Multiple non-overlapping slots can be specified for the same day.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.mon.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Monday. Each slot defines a start and end time when outbound calls can be made. Multiple non-overlapping slots can be specified for the same day.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.mon.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.mon","typeLabel":"object[] | null"},"tue":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Tuesday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.tue.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Tuesday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.tue.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.tue","typeLabel":"object[] | null"},"wed":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Wednesday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.wed.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Wednesday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.wed.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.wed","typeLabel":"object[] | null"},"thu":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Thursday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.thu.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Thursday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.thu.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.thu","typeLabel":"object[] | null"},"fri":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Friday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.fri.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Friday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.fri.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.fri","typeLabel":"object[] | null"},"sat":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Saturday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.sat.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Saturday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.sat.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.sat","typeLabel":"object[] | null"},"sun":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Sunday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.sun.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Sunday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.sun.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.sun","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"schedule.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"schedule.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule","typeLabel":"object | null"},"inboundSipConfig":{"oneOf":[{"type":"object","description":"Configuration for routing inbound calls to this agent. To configure phone number routing for incoming calls, use the SIP phone numbers API to assign a phone number to this agent instead of using this field directly.","properties":{"phoneNumber":{"oneOf":[{"maxLength":255,"type":"string","description":"Phone number that should route incoming calls to this agent. When specified, incoming calls to this phone number will be handled by this agent. The phone number must be configured in your SIP phone numbers.","default":null,"uniqueKey":"inboundSipConfig.oneOf.0.phoneNumber.oneOf.0","typeLabel":"string"},{"maxLength":255,"type":"null","description":"Phone number that should route incoming calls to this agent. When specified, incoming calls to this phone number will be handled by this agent. The phone number must be configured in your SIP phone numbers.","default":null,"uniqueKey":"inboundSipConfig.oneOf.0.phoneNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"inboundSipConfig.oneOf.0.phoneNumber","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"inboundSipConfig.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"inboundSipConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"inboundSipConfig","typeLabel":"object | null"},"expectedVersion":{"oneOf":[{"type":"integer","description":"Expected version number for optimistic concurrency control. If provided and does not match the current server version, the update will be rejected with a 409 Conflict response containing the current server state. Omit to skip version checking (not recommended for UI clients).","format":"int32","default":null,"uniqueKey":"expectedVersion.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Expected version number for optimistic concurrency control. If provided and does not match the current server version, the update will be rejected with a 409 Conflict response containing the current server state. Omit to skip version checking (not recommended for UI clients).","format":"int32","default":null,"uniqueKey":"expectedVersion.oneOf.1","typeLabel":"null"}],"uniqueKey":"expectedVersion","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","config":{"primaryLanguage":"\u003cstring>","ttsConfig":{"voiceId":"\u003cstring>","vendor":"\u003cstring>","model":null,"speed":1,"speedAdjustment":{"version":"v1","strategy":"OnRequest"},"vendorSpecificOptions":{},"responsiveness":null,"interruptionSensitivity":null,"pronunciationDictionary":{"id":"\u003cstring>","hash":"\u003cstring>"}},"llmConfig":{"model":"\u003cstring>","vendor":"\u003cstring>","prompt":"\u003cstring>","apiKey":null,"endpoint":null,"options":{"temperature":null,"maxTokens":null,"topP":null,"frequencyPenalty":null,"presencePenalty":null,"stop":null,"trailingPrompt":null,"reasoningMode":null,"maxRetries":null,"reasoningEffort":null},"vendorSpecificOptions":{},"toolScopes":null,"validateToolArguments":null,"enhancedTooling":{"isEnabled":false,"model":null}},"sttConfig":{"version":"v1","vendor":"Auto","vendorSpecificOptions":{}},"outboundSipConfig":{"server":"\u003cstring>","authUser":"\u003cstring>","domain":null,"password":null,"fromUser":null,"transport":"udp","cpsLimit":null,"cpsKey":null,"displayName":null},"resultWebhook":{"url":"\u003cstring>","headers":{},"customSettings":{"queryParams":{},"bodyFormat":{"template":"\u003cstring>"}}},"features":{"version":"v1","postCallAnalysis":[],"talkFirst":{"version":"v1","delay":1,"isEnabled":false,"interruptible":true},"maxDuration":{"version":"v1","maxDurationSeconds":3600,"maxDurationInTransferSeconds":7200,"isEnabled":true},"ivrDetection":{"version":"v1","isEnabled":true,"enabledForChat":false,"enabledForInbound":false,"enabledForOutbound":true,"enabledForWebCall":false,"ivrNavigation":false},"ambientNoise":{"version":"v1","isEnabled":false,"ambientNoiseLevel":0.1},"languageSwitching":{"version":"v1","isEnabled":true},"fillers":{"version":"v1","isEnabled":true,"strategy":{"type":"static","texts":["um"]}},"backchannel":{"version":"v1","isEnabled":false},"turnTaking":{"version":"v1","vad":"asap_v2","vadFallback":"asap_v2"},"silenceManagement":{"version":"v1","isEnabled":true,"maxReminderAttempts":2,"reminderSilenceThresholdSeconds":5,"endWhenReminderLimitExceeded":true},"preConversationMedia":{"version":"v1","isEnabled":false,"enabledForInbound":false,"enabledForOutbound":false,"enabledForWebCall":false},"noiseSuppression":{"version":"v1","isEnabled":false,"type":"none","noiseSuppressionLevel":75,"recordWriteStrategy":"raw"}},"mcpConnections":[],"startWebhook":{"webhook":{"url":"\u003cstring>","headers":{},"customSettings":{"queryParams":{},"bodyFormat":{"template":"\u003cstring>"}}},"fallbackResponse":{"accept":false,"reasonMessage":"Webhook for started webhook failed"},"isEnabledForInbound":false,"isEnabledForOutbound":false,"isEnabledForWidget":false,"timeout":10},"tools":[],"builtInTools":[]},"isEnabled":true,"description":null,"additionalData":{},"schedule":{"timezone":"UTC","mon":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"tue":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"wed":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"thu":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"fri":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"sat":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"sun":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}]},"inboundSipConfig":{"phoneNumber":null},"expectedVersion":null}}},"exampleType":"generated"},"text/json":{"schema":{"type":"object","description":"Request to create or update an agent with full configuration including name, description, behavior settings, call schedule, and inbound routing. Contains all agent properties such as enabled status, display name, optional description, complete agent configuration (TTS, LLM, STT, outbound SIP for making calls, webhooks, features, MCP connections, tools), default prompt variables in AdditionalData, time-based schedule for when outbound calls can be made, and inbound call routing configuration.","required":["config","name"],"properties":{"name":{"maxLength":100,"minLength":1,"type":"string","description":"Display name for the agent. Used to identify the agent in the UI, logs, and API responses.","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"config":{"type":"object","description":"Complete configuration for the agent's behavior including voice settings (TTS), language model (LLM), speech recognition (STT), outbound SIP configuration for making calls, webhooks for event notifications, features like RAG and transfers, MCP connections for external services, and custom tools. This defines how the agent will interact during conversations and what capabilities it has.","required":["llmConfig","primaryLanguage","ttsConfig"],"properties":{"primaryLanguage":{"minLength":1,"type":"string","description":"Primary language for the agent's conversations. Uses language codes like \"en-US\", \"es-ES\", \"fr-FR\". This determines the default language for speech synthesis and recognition.","isRequired":true,"uniqueKey":"config.primaryLanguage","typeLabel":"string"},"ttsConfig":{"type":"object","description":"Text-to-speech configuration controlling how the agent's voice sounds. Includes voice provider selection, voice ID, speed, stability, and pronunciation dictionary settings. Defines the agent's vocal characteristics during conversations.","required":["vendor","voiceId"],"properties":{"voiceId":{"minLength":1,"type":"string","description":"Voice identifier from the selected vendor. Specifies which voice the agent uses for speech synthesis. Each vendor has different voice IDs representing distinct voice characteristics like gender, accent, and speaking style.","isRequired":true,"uniqueKey":"config.ttsConfig.voiceId","typeLabel":"string"},"vendor":{"minLength":1,"type":"string","description":"Text-to-speech vendor providing the voice synthesis service. Identifies which TTS provider to use such as ElevenLabs, Cartesia, Dasha, Inworld, Lmnt, or Google. Different vendors offer different voice qualities, latency characteristics, and pricing.","isRequired":true,"uniqueKey":"config.ttsConfig.vendor","typeLabel":"string"},"model":{"oneOf":[{"type":"string","description":"TTS model identifier for vendors that support multiple model versions. Allows selecting specific synthesis models or quality tiers when available from the vendor.","default":null,"uniqueKey":"config.ttsConfig.model.oneOf.0","typeLabel":"string"},{"type":"null","description":"TTS model identifier for vendors that support multiple model versions. Allows selecting specific synthesis models or quality tiers when available from the vendor.","default":null,"uniqueKey":"config.ttsConfig.model.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.model","typeLabel":"string | null"},"speed":{"oneOf":[{"type":"number","description":"Speech speed multiplier controlling how fast the agent speaks. Values above 1.0 increase speaking rate, values below 1.0 decrease it. Affects the overall pace of conversation and can be adjusted to match user preferences or content requirements.","format":"double","default":1,"uniqueKey":"config.ttsConfig.speed.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Speech speed multiplier controlling how fast the agent speaks. Values above 1.0 increase speaking rate, values below 1.0 decrease it. Affects the overall pace of conversation and can be adjusted to match user preferences or content requirements.","format":"double","default":1,"uniqueKey":"config.ttsConfig.speed.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.speed","typeLabel":"number\u003cdouble> | null"},"speedAdjustment":{"oneOf":[{"type":"object","description":"Speed adjustment settings controlling whether users can request the agent to speak faster or slower during conversations. Allows dynamic speed changes based on user feedback.","default":{"version":"v1","strategy":"OnRequest"},"required":["strategy"],"properties":{"strategy":{"type":"string","description":"Speed adjustment strategy determining when and how the agent can change its speaking rate. Controls whether speed adjustments are disabled entirely or enabled on user request.","enum":["Disabled","OnRequest"],"isRequired":true,"uniqueKey":"config.ttsConfig.speedAdjustment.oneOf.0.strategy","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"config.ttsConfig.speedAdjustment.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.ttsConfig.speedAdjustment.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.speedAdjustment","typeLabel":"object | null"},"vendorSpecificOptions":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.ttsConfig.vendorSpecificOptions.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Vendor-specific TTS options that are unique to particular speech synthesis providers. Allows passing custom parameters for advanced voice configuration that isn't covered by standard settings.","uniqueKey":"config.ttsConfig.vendorSpecificOptions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.ttsConfig.vendorSpecificOptions.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Vendor-specific TTS options that are unique to particular speech synthesis providers. Allows passing custom parameters for advanced voice configuration that isn't covered by standard settings.","uniqueKey":"config.ttsConfig.vendorSpecificOptions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.vendorSpecificOptions","typeLabel":"object | null"},"responsiveness":{"oneOf":[{"maximum":1,"minimum":0,"type":"number","description":"Response timing control determining how quickly the agent begins speaking after the user finishes. Range is 0 to 1, where higher values make the agent respond faster and lower values add more deliberate pauses. Affects the conversational rhythm and turn-taking behavior.","format":"double","default":null,"uniqueKey":"config.ttsConfig.responsiveness.oneOf.0","typeLabel":"number\u003cdouble>"},{"maximum":1,"minimum":0,"type":"null","description":"Response timing control determining how quickly the agent begins speaking after the user finishes. Range is 0 to 1, where higher values make the agent respond faster and lower values add more deliberate pauses. Affects the conversational rhythm and turn-taking behavior.","format":"double","default":null,"uniqueKey":"config.ttsConfig.responsiveness.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.responsiveness","typeLabel":"number\u003cdouble> | null"},"interruptionSensitivity":{"oneOf":[{"maximum":1,"minimum":0,"type":"number","description":"Controls how easily the user can interrupt the agent while it is speaking. Range is 0 to 1, where higher values make interruptions easier to trigger and lower values require more user speech before the agent stops. A value of 0 makes the agent non-interruptible by normal speech. When unset, the agent uses its default interruptible behavior (equivalent to 1).","format":"double","default":null,"uniqueKey":"config.ttsConfig.interruptionSensitivity.oneOf.0","typeLabel":"number\u003cdouble>"},{"maximum":1,"minimum":0,"type":"null","description":"Controls how easily the user can interrupt the agent while it is speaking. Range is 0 to 1, where higher values make interruptions easier to trigger and lower values require more user speech before the agent stops. A value of 0 makes the agent non-interruptible by normal speech. When unset, the agent uses its default interruptible behavior (equivalent to 1).","format":"double","default":null,"uniqueKey":"config.ttsConfig.interruptionSensitivity.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.interruptionSensitivity","typeLabel":"number\u003cdouble> | null"},"pronunciationDictionary":{"oneOf":[{"type":"object","description":"Reference to a pronunciation dictionary for customizing how specific words or phrases are pronounced. Allows correcting mispronunciations, defining custom pronunciations for brand names, or adjusting phonetic rendering for domain-specific terminology.","required":["hash","id"],"properties":{"id":{"minLength":1,"type":"string","description":"Unique identifier of the pronunciation dictionary to use. References a dictionary that has been created and uploaded to the system containing custom phonetic rules and pronunciation mappings.","isRequired":true,"uniqueKey":"config.ttsConfig.pronunciationDictionary.oneOf.0.id","typeLabel":"string"},"hash":{"minLength":1,"type":"string","description":"Content hash of the pronunciation dictionary for version tracking and cache invalidation. Ensures the correct version of the dictionary is applied and allows detecting when dictionary content has been updated.","isRequired":true,"uniqueKey":"config.ttsConfig.pronunciationDictionary.oneOf.0.hash","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.ttsConfig.pronunciationDictionary.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.ttsConfig.pronunciationDictionary.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.pronunciationDictionary","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.ttsConfig","typeLabel":"object"},"llmConfig":{"type":"object","description":"Language model configuration defining the agent's intelligence and conversation behavior. Includes model selection, system prompts, temperature, token limits, and conversation flow settings. Controls how the agent understands and responds to user input.","required":["model","prompt","vendor"],"properties":{"model":{"minLength":1,"type":"string","description":"Language model identifier. Specifies which model to use from the configured vendor.","isRequired":true,"uniqueKey":"config.llmConfig.model","typeLabel":"string"},"vendor":{"minLength":1,"type":"string","description":"Model vendor or provider identifier.","isRequired":true,"uniqueKey":"config.llmConfig.vendor","typeLabel":"string"},"prompt":{"minLength":1,"type":"string","description":"System prompt that defines the agent's personality, role, and behavior instructions. This prompt guides how the agent responds and interacts during conversations. Can reference variables from AdditionalData using {{variableName}} syntax.","isRequired":true,"uniqueKey":"config.llmConfig.prompt","typeLabel":"string"},"apiKey":{"oneOf":[{"type":"string","description":"API key for authenticating with the language model provider. Used to authorize requests to the vendor's API.","default":null,"uniqueKey":"config.llmConfig.apiKey.oneOf.0","typeLabel":"string"},{"type":"null","description":"API key for authenticating with the language model provider. Used to authorize requests to the vendor's API.","default":null,"uniqueKey":"config.llmConfig.apiKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.apiKey","typeLabel":"string | null"},"endpoint":{"oneOf":[{"type":"string","description":"Custom API endpoint URL for the language model. Use when connecting to self-hosted models or alternative API gateways instead of the default vendor endpoint.","default":null,"uniqueKey":"config.llmConfig.endpoint.oneOf.0","typeLabel":"string"},{"type":"null","description":"Custom API endpoint URL for the language model. Use when connecting to self-hosted models or alternative API gateways instead of the default vendor endpoint.","default":null,"uniqueKey":"config.llmConfig.endpoint.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.endpoint","typeLabel":"string | null"},"options":{"oneOf":[{"type":"object","description":"Advanced language model parameters including temperature, max tokens, top P, frequency/presence penalties, stop sequences, trailing prompt, reasoning mode, and retry settings. Controls the model's creativity, response length, and behavior characteristics.","properties":{"temperature":{"oneOf":[{"type":"number","description":"Temperature controls randomness in responses. Higher values (e.g., 0.8-1.0) make output more creative and varied, while lower values (e.g., 0.1-0.3) make it more focused and deterministic. Range is typically 0.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.temperature.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Temperature controls randomness in responses. Higher values (e.g., 0.8-1.0) make output more creative and varied, while lower values (e.g., 0.1-0.3) make it more focused and deterministic. Range is typically 0.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.temperature.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.temperature","typeLabel":"number\u003cdouble> | null"},"maxTokens":{"oneOf":[{"type":"integer","description":"Maximum number of tokens the model can generate in a response. Limits the length of the agent's replies to control costs and response times.","format":"int32","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.maxTokens.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum number of tokens the model can generate in a response. Limits the length of the agent's replies to control costs and response times.","format":"int32","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.maxTokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.maxTokens","typeLabel":"integer\u003cint32> | null"},"topP":{"oneOf":[{"type":"number","description":"Top P (nucleus sampling) controls diversity by considering only the most probable tokens whose cumulative probability reaches this threshold. Range is 0.0 to 1.0, where lower values make responses more focused.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.topP.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Top P (nucleus sampling) controls diversity by considering only the most probable tokens whose cumulative probability reaches this threshold. Range is 0.0 to 1.0, where lower values make responses more focused.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.topP.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.topP","typeLabel":"number\u003cdouble> | null"},"frequencyPenalty":{"oneOf":[{"type":"number","description":"Frequency penalty reduces repetition of tokens based on how often they've appeared in the response. Higher values (e.g., 0.5-1.0) discourage repetition more strongly. Range is typically -2.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.frequencyPenalty.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Frequency penalty reduces repetition of tokens based on how often they've appeared in the response. Higher values (e.g., 0.5-1.0) discourage repetition more strongly. Range is typically -2.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.frequencyPenalty.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.frequencyPenalty","typeLabel":"number\u003cdouble> | null"},"presencePenalty":{"oneOf":[{"type":"number","description":"Presence penalty reduces repetition by penalizing tokens that have already appeared, regardless of frequency. Encourages the model to discuss new topics. Range is typically -2.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.presencePenalty.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Presence penalty reduces repetition by penalizing tokens that have already appeared, regardless of frequency. Encourages the model to discuss new topics. Range is typically -2.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.presencePenalty.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.presencePenalty","typeLabel":"number\u003cdouble> | null"},"stop":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.llmConfig.options.oneOf.0.stop.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Stop sequences that cause the model to stop generating tokens. When the model encounters any of these strings, it will immediately stop generating further output.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.stop.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Stop sequences that cause the model to stop generating tokens. When the model encounters any of these strings, it will immediately stop generating further output.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.stop.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.stop","typeLabel":"string[] | null"},"trailingPrompt":{"oneOf":[{"type":"string","description":"Trailing prompt appended to the conversation context before the model generates a response. Useful for providing last-minute instructions or context.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.trailingPrompt.oneOf.0","typeLabel":"string"},{"type":"null","description":"Trailing prompt appended to the conversation context before the model generates a response. Useful for providing last-minute instructions or context.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.trailingPrompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.trailingPrompt","typeLabel":"string | null"},"reasoningMode":{"oneOf":[{"type":"string","description":"Reasoning mode for models that support structured thinking. Controls how the model approaches problem-solving and response generation.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningMode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Reasoning mode for models that support structured thinking. Controls how the model approaches problem-solving and response generation.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningMode.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningMode","typeLabel":"string | null"},"maxRetries":{"oneOf":[{"type":"integer","description":"Maximum number of retry attempts when API calls fail. Helps handle transient errors and rate limiting.","format":"int32","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.maxRetries.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum number of retry attempts when API calls fail. Helps handle transient errors and rate limiting.","format":"int32","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.maxRetries.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.maxRetries","typeLabel":"integer\u003cint32> | null"},"reasoningEffort":{"oneOf":[{"type":"string","description":"Reasoning effort level for models that support configurable thinking depth. Controls how much computational effort the model applies to reasoning through complex problems.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningEffort.oneOf.0","typeLabel":"string"},{"type":"null","description":"Reasoning effort level for models that support configurable thinking depth. Controls how much computational effort the model applies to reasoning through complex problems.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningEffort.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningEffort","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.llmConfig.options.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.llmConfig.options.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options","typeLabel":"object | null"},"vendorSpecificOptions":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.llmConfig.vendorSpecificOptions.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Vendor-specific options and parameters that are unique to particular LLM providers. Allows passing custom configuration that isn't covered by standard options.","uniqueKey":"config.llmConfig.vendorSpecificOptions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.llmConfig.vendorSpecificOptions.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Vendor-specific options and parameters that are unique to particular LLM providers. Allows passing custom configuration that isn't covered by standard options.","uniqueKey":"config.llmConfig.vendorSpecificOptions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.vendorSpecificOptions","typeLabel":"object | null"},"toolScopes":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.llmConfig.toolScopes.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Tool scope restrictions for limiting which tools the language model can access. When specified, the model can only use tools matching these scope identifiers. If not specified, all configured tools are available.","default":null,"uniqueKey":"config.llmConfig.toolScopes.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Tool scope restrictions for limiting which tools the language model can access. When specified, the model can only use tools matching these scope identifiers. If not specified, all configured tools are available.","default":null,"uniqueKey":"config.llmConfig.toolScopes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.toolScopes","typeLabel":"string[] | null"},"validateToolArguments":{"oneOf":[{"type":"boolean","description":"Opts in to JSON Schema validation of custom webhook tool arguments before the webhook is called. False or omitted preserves existing behavior. Use minLength in string schemas to forbid empty strings.","default":null,"uniqueKey":"config.llmConfig.validateToolArguments.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opts in to JSON Schema validation of custom webhook tool arguments before the webhook is called. False or omitted preserves existing behavior. Use minLength in string schemas to forbid empty strings.","default":null,"uniqueKey":"config.llmConfig.validateToolArguments.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.validateToolArguments","typeLabel":"boolean | null"},"enhancedTooling":{"oneOf":[{"type":"object","description":"Enhanced tooling: more accurate tool calling at a higher LLM usage cost, optionally on a different OpenAI model. Disabled when not set. When enabled, the slow marks on custom tools and MCP connections (IsLongRunning, LongRunningTools) are not used.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Whether enhanced tooling is enabled. Disabled by default: the agent then behaves exactly as before.","default":false,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether enhanced tooling is enabled. Disabled by default: the agent then behaves exactly as before.","default":false,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.isEnabled","typeLabel":"boolean | null"},"model":{"oneOf":[{"type":"string","description":"OpenAI model used for tool calling when enhanced tooling is enabled. Leave empty to use the platform's default model for tool calling. Accepted values: gpt-6-luna, gpt-6-sol, gpt-5.6-luna, gpt-5.6-terra, gpt-4.1-mini, gpt-4.1.","default":null,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.model.oneOf.0","typeLabel":"string"},{"type":"null","description":"OpenAI model used for tool calling when enhanced tooling is enabled. Leave empty to use the platform's default model for tool calling. Accepted values: gpt-6-luna, gpt-6-sol, gpt-5.6-luna, gpt-5.6-terra, gpt-4.1-mini, gpt-4.1.","default":null,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.model.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.model","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.llmConfig.enhancedTooling.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.enhancedTooling","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.llmConfig","typeLabel":"object"},"sttConfig":{"oneOf":[{"type":"object","description":"Speech-to-text configuration for converting user speech to text. Includes provider selection and recognition settings. Controls how the agent understands spoken input from users.","default":{"version":"v1","vendor":"Auto","vendorSpecificOptions":{}},"properties":{"vendor":{"type":"string","description":"Speech recognition vendor to use for transcribing user speech. Can be a specific provider like Deepgram or Microsoft, or Auto to let the system choose the best option automatically.","default":"Auto","enum":["Deepgram","Microsoft","Auto"],"uniqueKey":"config.sttConfig.oneOf.0.vendor","typeLabel":"enum\u003cstring>"},"vendorSpecificOptions":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Vendor-specific STT options that are unique to particular speech recognition providers. Allows passing custom parameters for advanced recognition configuration such as profanity filtering, punctuation, or language-specific settings.","uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Vendor-specific STT options that are unique to particular speech recognition providers. Allows passing custom parameters for advanced recognition configuration such as profanity filtering, punctuation, or language-specific settings.","uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions","typeLabel":"object | null"},"keywords":{"oneOf":[{"type":"array","items":{"required":["keyword"],"type":"object","properties":{"keyword":{"minLength":1,"type":"string","description":"Word or phrase to prioritize during speech recognition. The STT engine gives preference to recognizing this keyword when transcribing user speech, improving accuracy for domain-specific vocabulary.","isRequired":true,"uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX].keyword","typeLabel":"string"},"weight":{"oneOf":[{"type":"number","description":"Optional weight controlling how strongly the keyword should be prioritized. Higher weights increase the likelihood of the keyword being recognized over similar-sounding alternatives. When not specified, a default prioritization is applied.","format":"double","uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX].weight.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Optional weight controlling how strongly the keyword should be prioritized. Higher weights increase the likelihood of the keyword being recognized over similar-sounding alternatives. When not specified, a default prioritization is applied.","format":"double","uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX].weight.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX].weight","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"description":"Speech recognition keyword hint for improving transcription accuracy of specific words or phrases. Tells the STT engine to prioritize recognition of domain-specific terminology, product names, technical jargon, or proper nouns that may not be in standard dictionaries. Helps reduce misrecognition of important context-specific vocabulary.","uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of keywords or phrases that the speech recognition should prioritize or recognize more accurately. Helps improve transcription accuracy for domain-specific terminology, product names, or technical jargon that may not be in standard dictionaries. Each keyword can have an optional weight to control recognition priority.","default":null,"uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["keyword"],"type":"object","properties":{"keyword":{"minLength":1,"type":"string","description":"Word or phrase to prioritize during speech recognition. The STT engine gives preference to recognizing this keyword when transcribing user speech, improving accuracy for domain-specific vocabulary."},"weight":{"oneOf":[{"type":"number","description":"Optional weight controlling how strongly the keyword should be prioritized. Higher weights increase the likelihood of the keyword being recognized over similar-sounding alternatives. When not specified, a default prioritization is applied.","format":"double"},{"type":"null","description":"Optional weight controlling how strongly the keyword should be prioritized. Higher weights increase the likelihood of the keyword being recognized over similar-sounding alternatives. When not specified, a default prioritization is applied.","format":"double"}]}},"additionalProperties":false,"description":"Speech recognition keyword hint for improving transcription accuracy of specific words or phrases. Tells the STT engine to prioritize recognition of domain-specific terminology, product names, technical jargon, or proper nouns that may not be in standard dictionaries. Helps reduce misrecognition of important context-specific vocabulary."},"description":"List of keywords or phrases that the speech recognition should prioritize or recognize more accurately. Helps improve transcription accuracy for domain-specific terminology, product names, or technical jargon that may not be in standard dictionaries. Each keyword can have an optional weight to control recognition priority.","default":null,"uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig.oneOf.0.keywords","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.sttConfig.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.sttConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig","typeLabel":"object | null"},"outboundSipConfig":{"oneOf":[{"type":"object","description":"SIP configuration for making outbound calls. Includes phone number selection and trunk credentials. Required when the agent needs to initiate calls to phone numbers.","required":["authUser","server"],"properties":{"server":{"minLength":1,"type":"string","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Format is hostname:port (e.g., \"sip.example.com:5060\").","isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.0.server","typeLabel":"string"},"authUser":{"minLength":1,"type":"string","description":"Authentication user identifier as defined in RFC 3261. Different providers may call this \"username\", \"account\", \"user ID\", or other names depending on the SIP provider.","isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.0.authUser","typeLabel":"string"},"domain":{"oneOf":[{"type":"string","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.domain.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.domain.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.domain","typeLabel":"string | null"},"password":{"oneOf":[{"type":"string","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.password.oneOf.0","typeLabel":"string"},{"type":"null","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.password.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.password","typeLabel":"string | null"},"fromUser":{"oneOf":[{"type":"string","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.fromUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.fromUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.fromUser","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for SIP communication. Supported values are UDP (default), TCP, or TLS for encrypted connections.","default":"udp","enum":["udp","tcp","tls"],"uniqueKey":"config.outboundSipConfig.oneOf.0.transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.outboundSipConfig.oneOf.0.transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.transport","typeLabel":"enum\u003cstring> | null"},"cpsLimit":{"oneOf":[{"type":"integer","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsLimit.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsLimit.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsLimit","typeLabel":"integer\u003cint32> | null"},"cpsKey":{"oneOf":[{"type":"string","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsKey.oneOf.0","typeLabel":"string"},{"type":"null","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsKey","typeLabel":"string | null"},"displayName":{"oneOf":[{"type":"string","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.displayName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.outboundSipConfig.oneOf.0","typeLabel":"object"},{"type":"object","description":"SIP configuration for making outbound calls. Includes phone number selection and trunk credentials. Required when the agent needs to initiate calls to phone numbers.","required":["phoneNumbers","type"],"properties":{"phoneNumbers":{"type":"array","items":{"required":["phoneNumberId"],"type":"object","properties":{"phoneNumberId":{"type":"string","description":"Unique identifier of the SIP phone number configuration to use for outbound calls. References a phone number configured via the SIP phone numbers API.","format":"uuid","isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.1.phoneNumbers.items.[INDEX].phoneNumberId","typeLabel":"string\u003cuuid>"}},"additionalProperties":false,"description":"Reference to a configured SIP phone number. Contains the phone number ID that points to the full phone number configuration including trunk credentials.","uniqueKey":"config.outboundSipConfig.oneOf.1.phoneNumbers.items.[INDEX]","typeLabel":"object"},"description":"List of phone number references for outbound calling. Currently supports only one phone number in the list. Each reference points to a configured SIP phone number that contains the trunk credentials and settings.","isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.1.phoneNumbers","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"config.outboundSipConfig.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.outboundSipConfig.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig","typeLabel":"object · object · null"},"resultWebhook":{"oneOf":[{"type":"object","description":"Webhook URL to receive call results when conversations complete. The system will send a POST request with conversation outcome, transcript, and metadata to this URL.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri","isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.resultWebhook.oneOf.0.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.resultWebhook.oneOf.0.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.resultWebhook.oneOf.0.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.resultWebhook.oneOf.0.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.headers","typeLabel":"object | null"},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"],"isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.httpMethod","typeLabel":"enum\u003cstring>"},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams","typeLabel":"object | null"},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain.","isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.0.template","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.0","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.resultWebhook.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook","typeLabel":"object | null"},"features":{"oneOf":[{"type":"object","description":"Advanced features for the agent including RAG (knowledge base retrieval), call transfers (warm or cold), ambient background sounds, interruption handling, and recording options. Enables specialized agent capabilities beyond basic conversation.","default":{"version":"v1","postCallAnalysis":[],"talkFirst":{"version":"v1","delay":1,"isEnabled":false,"interruptible":true},"maxDuration":{"version":"v1","maxDurationSeconds":3600,"maxDurationInTransferSeconds":7200,"isEnabled":true},"ivrDetection":{"version":"v1","isEnabled":true,"enabledForChat":false,"enabledForInbound":false,"enabledForOutbound":true,"enabledForWebCall":false,"ivrNavigation":false},"ambientNoise":{"version":"v1","isEnabled":false,"ambientNoiseLevel":0.1},"languageSwitching":{"version":"v1","isEnabled":true},"fillers":{"version":"v1","isEnabled":true,"strategy":{"type":"static","texts":["um"]}},"backchannel":{"version":"v1","isEnabled":false},"turnTaking":{"version":"v1","vad":"asap_v2","vadFallback":"asap_v2"},"silenceManagement":{"version":"v1","isEnabled":true,"maxReminderAttempts":2,"reminderSilenceThresholdSeconds":5,"endWhenReminderLimitExceeded":true},"preConversationMedia":{"version":"v1","isEnabled":false,"enabledForInbound":false,"enabledForOutbound":false,"enabledForWebCall":false},"noiseSuppression":{"version":"v1","isEnabled":false,"type":"none","noiseSuppressionLevel":75,"recordWriteStrategy":"raw"}},"properties":{"transfer":{"oneOf":[{"type":"object","description":"Call transfer configuration. Supports warm transfer (agent stays on call), cold transfer (agent hangs up), or HTTP transfer (external API handles transfer). Enables the agent to transfer calls to other numbers or systems.","required":["endpointDestination","type","description"],"properties":{"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.description","typeLabel":"string"},"endpointDestination":{"minLength":1,"type":"string","description":"Transfer destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:1234567890@example.com\". The call is redirected to this endpoint using SIP REFER when the transfer is initiated.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.endpointDestination","typeLabel":"string"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.isEnabled","typeLabel":"boolean | null"},"sipUui":{"oneOf":[{"type":"string","description":"Optional User-to-User payload, encoded as RFC 7433 hex. Supports {{variableName}}\nfrom call additionalData and {{sip_endpoint}} for the caller.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipUui.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional User-to-User payload, encoded as RFC 7433 hex. Supports {{variableName}}\nfrom call additionalData and {{sip_endpoint}} for the caller.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipUui.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipUui","typeLabel":"string | null"},"sipHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers embedded in the Refer-To URI. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers embedded in the Refer-To URI. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders","typeLabel":"object | null"},"transferRoutes":{"oneOf":[{"type":"array","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].name","typeLabel":"string"},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX].endpoint","typeLabel":"string"}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX]","typeLabel":"object"},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations","typeLabel":"object[]"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Optional named transfer routes allowing the language model to choose between multiple destinations. Each route has a name, description, and list of endpoints. The model can select the appropriate route based on conversation context, enabling intelligent routing to different departments or specialists.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions."},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected."}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured."},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to."}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description."},"description":"Optional named transfer routes allowing the language model to choose between multiple destinations. Each route has a name, description, and list of endpoints. The model can select the appropriate route based on conversation context, enabling intelligent routing to different departments or specialists.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes","typeLabel":"object[] | null"},"holdMedia":{"oneOf":[{"type":"object","description":"Optional hold media configuration for playing audio during the transfer. When enabled, plays the specified media file on loop while the call is being transferred instead of using the agent's voice. Provides professional hold music or messages while the transfer completes.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.mediaFilename","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0","typeLabel":"object"},{"type":"object","description":"Call transfer configuration. Supports warm transfer (agent stays on call), cold transfer (agent hangs up), or HTTP transfer (external API handles transfer). Enables the agent to transfer calls to other numbers or systems.","required":["type","webhook","description"],"properties":{"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.description","typeLabel":"string"},"webhook":{"type":"object","description":"Webhook endpoint to call for transfer routing decisions. The system sends a POST request with conversation context and waits for a response specifying the transfer destination and type. The webhook should return a transfer decision in the response body indicating whether to perform a cold or warm transfer and to which endpoint.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers","typeLabel":"object | null"},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.httpMethod","typeLabel":"enum\u003cstring>"},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams","typeLabel":"object | null"},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0.template","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook","typeLabel":"object"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.isEnabled","typeLabel":"boolean | null"},"fallback":{"oneOf":[{"type":"object","description":"Fallback transfer configuration to use if the webhook request fails, times out, or returns an error. Ensures calls can still be transferred even when the routing system is unavailable. Can specify either a cold or warm transfer as the fallback behavior.","required":["endpointDestination","type","description"],"properties":{"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.description","typeLabel":"string"},"endpointDestination":{"minLength":1,"type":"string","description":"Transfer destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:1234567890@example.com\". The call is redirected to this endpoint using SIP REFER when the transfer is initiated.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.endpointDestination","typeLabel":"string"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.isEnabled","typeLabel":"boolean | null"},"sipUui":{"oneOf":[{"type":"string","description":"Optional User-to-User payload, encoded as RFC 7433 hex. Supports {{variableName}}\nfrom call additionalData and {{sip_endpoint}} for the caller.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipUui.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional User-to-User payload, encoded as RFC 7433 hex. Supports {{variableName}}\nfrom call additionalData and {{sip_endpoint}} for the caller.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipUui.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipUui","typeLabel":"string | null"},"sipHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers embedded in the Refer-To URI. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers embedded in the Refer-To URI. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders","typeLabel":"object | null"},"transferRoutes":{"oneOf":[{"type":"array","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].name","typeLabel":"string"},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX].endpoint","typeLabel":"string"}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX]","typeLabel":"object"},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations","typeLabel":"object[]"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Optional named transfer routes allowing the language model to choose between multiple destinations. Each route has a name, description, and list of endpoints. The model can select the appropriate route based on conversation context, enabling intelligent routing to different departments or specialists.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions."},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected."}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured."},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to."}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description."},"description":"Optional named transfer routes allowing the language model to choose between multiple destinations. Each route has a name, description, and list of endpoints. The model can select the appropriate route based on conversation context, enabling intelligent routing to different departments or specialists.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes","typeLabel":"object[] | null"},"holdMedia":{"oneOf":[{"type":"object","description":"Optional hold media configuration for playing audio during the transfer. When enabled, plays the specified media file on loop while the call is being transferred instead of using the agent's voice. Provides professional hold music or messages while the transfer completes.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.mediaFilename","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0","typeLabel":"object"},{"type":"object","description":"Fallback transfer configuration to use if the webhook request fails, times out, or returns an error. Ensures calls can still be transferred even when the routing system is unavailable. Can specify either a cold or warm transfer as the fallback behavior.","required":["endpointDestination","type","description"],"properties":{"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.description","typeLabel":"string"},"endpointDestination":{"minLength":1,"type":"string","description":"Operator destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The agent calls this endpoint first before bridging with the user.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.endpointDestination","typeLabel":"string"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.isEnabled","typeLabel":"boolean | null"},"sip":{"oneOf":[{"type":"object","description":"Optional SIP configuration override for placing the call to the operator. When specified, uses these SIP credentials instead of the agent's default outbound SIP settings for this specific transfer call.","properties":{"domain":{"oneOf":[{"type":"string","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.domain.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.domain.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.domain","typeLabel":"string | null"},"password":{"oneOf":[{"type":"string","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.password.oneOf.0","typeLabel":"string"},{"type":"null","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.password.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.password","typeLabel":"string | null"},"fromUser":{"oneOf":[{"type":"string","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.fromUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.fromUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.fromUser","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for SIP communication. Supported values are UDP (default), TCP, or TLS for encrypted connections.","default":"udp","enum":["udp","tcp","tls"],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.transport","typeLabel":"enum\u003cstring> | null"},"cpsLimit":{"oneOf":[{"type":"integer","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsLimit.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsLimit.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsLimit","typeLabel":"integer\u003cint32> | null"},"cpsKey":{"oneOf":[{"type":"string","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsKey.oneOf.0","typeLabel":"string"},{"type":"null","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsKey","typeLabel":"string | null"},"displayName":{"oneOf":[{"type":"string","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.displayName","typeLabel":"string | null"},"server":{"oneOf":[{"type":"string","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.server.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.server.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.server","typeLabel":"string | null"},"authUser":{"oneOf":[{"type":"string","description":"Authentication user identifier as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.authUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"Authentication user identifier as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.authUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.authUser","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip","typeLabel":"object | null"},"sipUui":{"oneOf":[{"type":"string","description":"Optional User-to-User payload on the operator call, encoded as RFC 7433 hex.\nSupports {{variableName}} from call additionalData and {{sip_endpoint}} for the caller.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipUui.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional User-to-User payload on the operator call, encoded as RFC 7433 hex.\nSupports {{variableName}} from call additionalData and {{sip_endpoint}} for the caller.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipUui.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipUui","typeLabel":"string | null"},"sipHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers on the operator call. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers on the operator call. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders","typeLabel":"object | null"},"interactionWithOperator":{"oneOf":[{"type":"object","description":"Behavior controlling what the agent says to the operator when they answer. Can use static predefined phrases or smart AI-generated context based on the conversation. Allows providing the operator with relevant information about the caller's needs before connecting them.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to customize how the AI agent interacts with the operator before bridging the call. Provides context-specific guidance for different scenarios, such as explaining the caller's situation, verifying operator availability, or following specific handoff protocols. Helps ensure smooth operator interactions while maintaining flexibility for different business processes.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to customize how the AI agent interacts with the operator before bridging the call. Provides context-specific guidance for different scenarios, such as explaining the caller's situation, verifying operator availability, or following specific handoff protocols. Helps ensure smooth operator interactions while maintaining flexibility for different business processes.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.additionalInstructions","typeLabel":"string | null"},"requireReadyBriefingAcceptance":{"type":"boolean","description":"When true, wait for operator readiness, deliver the configured briefing completely, and require later acceptance before bridging. Defaults to false, preserving the existing smart warm-transfer flow when absent or false.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.requireReadyBriefingAcceptance","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0","typeLabel":"object"},{"type":"object","description":"Behavior controlling what the agent says to the operator when they answer. Can use static predefined phrases or smart AI-generated context based on the conversation. Allows providing the operator with relevant information about the caller's needs before connecting them.","required":["type"],"properties":{"waitFirstAnswerFromOperator":{"oneOf":[{"type":"boolean","description":"Wait for voice detection from the operator before bridging the call. When enabled, the system waits for the operator to start speaking before connecting the caller, ensuring the operator is actively engaged and ready. When disabled, the call bridges immediately once other configured wait conditions are met or the timeout expires.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Wait for voice detection from the operator before bridging the call. When enabled, the system waits for the operator to start speaking before connecting the caller, ensuring the operator is actively engaged and ready. When disabled, the call bridges immediately once other configured wait conditions are met or the timeout expires.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator","typeLabel":"boolean | null"},"waitToneFromOperator":{"oneOf":[{"type":"array","items":{"type":"number","format":"double","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.0.items.[INDEX]","typeLabel":"number\u003cdouble>"},"description":"Audio frequency tones to wait for from the operator before bridging, specified in Hertz. Used to detect specific audio signals from the operator's phone system or IVR, such as 400Hz for readiness signals. The system listens for any of the specified frequencies and bridges the call when detected. Useful for integrating with legacy phone systems or custom operator signaling protocols.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.0","typeLabel":"number\u003cdouble>[]"},{"type":"null","items":{"type":"number","format":"double"},"description":"Audio frequency tones to wait for from the operator before bridging, specified in Hertz. Used to detect specific audio signals from the operator's phone system or IVR, such as 400Hz for readiness signals. The system listens for any of the specified frequencies and bridges the call when detected. Useful for integrating with legacy phone systems or custom operator signaling protocols.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitToneFromOperator","typeLabel":"number\u003cdouble>[] | null"},"waitDTMFFromOperator":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"DTMF key press tones to wait for from the operator before bridging the call. Accepts digit keys 0-9 and special keys like pound or star. The system waits for the operator to press any of the specified keys as an acknowledgment signal before connecting the caller. Common in call center environments where operators confirm readiness by pressing a specific key.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"DTMF key press tones to wait for from the operator before bridging the call. Accepts digit keys 0-9 and special keys like pound or star. The system waits for the operator to press any of the specified keys as an acknowledgment signal before connecting the caller. Common in call center environments where operators confirm readiness by pressing a specific key.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitDTMFFromOperator","typeLabel":"string[] | null"},"waitChecksTimeoutInS":{"oneOf":[{"type":"number","description":"Maximum time in seconds to wait for operator readiness signals before timing out. If the operator does not provide the expected voice, DTMF, or frequency tone signals within this timeout, the wait conditions are bypassed and the call proceeds according to failover configuration. Prevents indefinite waiting when operators are unavailable or unresponsive.","format":"double","default":4,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitChecksTimeoutInS.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Maximum time in seconds to wait for operator readiness signals before timing out. If the operator does not provide the expected voice, DTMF, or frequency tone signals within this timeout, the wait conditions are bypassed and the call proceeds according to failover configuration. Prevents indefinite waiting when operators are unavailable or unresponsive.","format":"double","default":4,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitChecksTimeoutInS.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitChecksTimeoutInS","typeLabel":"number\u003cdouble> | null"},"sayPhraseToOperator":{"oneOf":[{"type":"object","description":"Phrase configuration for introducing the caller to the operator before bridging. Allows the AI agent to provide context about the caller's needs, reason for transfer, or conversation summary to help the operator assist effectively. Can be configured to speak before or after the operator acknowledges, depending on call center workflow preferences.","required":["phrase"],"properties":{"phrase":{"minLength":1,"type":"string","description":"Phrase to speak to the operator when they answer. Should provide relevant context about the caller or their needs. Can include conversation summaries, caller identification, or reason for transfer to help the operator assist the user effectively.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.phrase","typeLabel":"string"},"beforeOperator":{"oneOf":[{"type":"boolean","description":"Controls timing of when the phrase is spoken. When true, the agent speaks immediately when the call connects, potentially before the operator fully answers. When false, waits for the operator to acknowledge before speaking the phrase.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls timing of when the phrase is spoken. When true, the agent speaks immediately when the call connects, potentially before the operator fully answers. When false, waits for the operator to acknowledge before speaking the phrase.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator","typeLabel":"object · object · null"},"sayPhraseToCustomer":{"oneOf":[{"type":"string","description":"Phrase to speak to the customer before bridging the call with the operator. Informs the user that they're being connected to a human agent. Can include reassurance or set expectations about the handoff.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sayPhraseToCustomer.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase to speak to the customer before bridging the call with the operator. Informs the user that they're being connected to a human agent. Can include reassurance or set expectations about the handoff.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sayPhraseToCustomer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sayPhraseToCustomer","typeLabel":"string | null"},"continueAfterOperatorDisconnected":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent resumes the conversation if the operator disconnects or hangs up. When true, the agent continues talking to the user after the operator leaves. When false, the call ends when the operator disconnects.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueAfterOperatorDisconnected.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent resumes the conversation if the operator disconnects or hangs up. When true, the agent continues talking to the user after the operator leaves. When false, the call ends when the operator disconnects.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueAfterOperatorDisconnected.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueAfterOperatorDisconnected","typeLabel":"boolean | null"},"continueRecordingInTransfer":{"oneOf":[{"type":"boolean","default":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecordingInTransfer.oneOf.0","typeLabel":"boolean"},{"type":"null","default":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecordingInTransfer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecordingInTransfer","typeLabel":"boolean | null"},"transferRoutes":{"oneOf":[{"type":"array","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].name","typeLabel":"string"},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX].endpoint","typeLabel":"string"}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX]","typeLabel":"object"},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations","typeLabel":"object[]"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions."},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected."}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured."},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to."}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description."},"default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes","typeLabel":"object[] | null"},"operatorName":{"oneOf":[{"type":"string","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.operatorName.oneOf.0","typeLabel":"string"},{"type":"null","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.operatorName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.operatorName","typeLabel":"string | null"},"continueRecognitionInTransfer":{"oneOf":[{"type":"boolean","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecognitionInTransfer.oneOf.0","typeLabel":"boolean"},{"type":"null","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecognitionInTransfer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecognitionInTransfer","typeLabel":"boolean | null"},"callerIdMode":{"oneOf":[{"type":"string","description":"Determines which phone number is displayed to the transfer destination (human agent) during warm transfer.\nAgentPhoneNumber (default): Uses the AI agent's configured outbound SIP fromUser as the caller ID.\nUserPhoneNumber: Uses the user's phone number (job.endpoint) as the caller ID.\nWhen null, defaults to AgentPhoneNumber behavior.","default":"agentPhoneNumber","enum":["userPhoneNumber","agentPhoneNumber"],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.callerIdMode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.callerIdMode.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.callerIdMode","typeLabel":"enum\u003cstring> | null"},"threewayMessaging":{"oneOf":[{"type":"object","description":"Optional threeway messaging configuration.\nWhen configured, delivers a unified phrase to BOTH user and operator\nsimultaneously before the bridge channel is executed.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to customize how the AI generates the announcement phrase spoken to both parties simultaneously. Guides the language model in crafting appropriate handoff messaging, such as maintaining professional tone, including issue summaries, providing reassurance, or mentioning specialist involvement. When not specified, the phrase is generated based solely on conversation context without additional constraints.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to customize how the AI generates the announcement phrase spoken to both parties simultaneously. Guides the language model in crafting appropriate handoff messaging, such as maintaining professional tone, including issue summaries, providing reassurance, or mentioning specialist involvement. When not specified, the phrase is generated based solely on conversation context without additional constraints.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0.additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0","typeLabel":"object"},{"type":"object","description":"Optional threeway messaging configuration.\nWhen configured, delivers a unified phrase to BOTH user and operator\nsimultaneously before the bridge channel is executed.","required":["type"],"properties":{"phrase":{"oneOf":[{"type":"string","description":"Phrase spoken to both caller and operator simultaneously right before bridging the call. Should be clear and concise as both parties will hear it at the same moment during the transfer transition. Common examples include connection announcements like \"Connecting you now\", hold notifications like \"Please hold while I connect you\", or representative introduction messages like \"You are now being connected to a representative\".","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1.phrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to both caller and operator simultaneously right before bridging the call. Should be clear and concise as both parties will hear it at the same moment during the transfer transition. Common examples include connection announcements like \"Connecting you now\", hold notifications like \"Please hold while I connect you\", or representative introduction messages like \"You are now being connected to a representative\".","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1.phrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1.phrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging","typeLabel":"object · object · null"},"holdMedia":{"oneOf":[{"type":"object","description":"Optional hold media configuration for warm transfers.\nWhen enabled, plays media via media:// protocol instead of using the respond node\nto communicate with users during transfer.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.mediaFilename","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia","typeLabel":"object | null"},"fallbackToColdTransfer":{"type":"boolean","description":"When true and the warm transfer fails (the operator does not answer, the operator briefing fails, or the operator call cannot be placed), the agent cold-transfers the caller to the same destination before applying the failover behavior. Defaults to false.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.fallbackToColdTransfer","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback","typeLabel":"object · object · null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1","typeLabel":"object"},{"type":"object","description":"Call transfer configuration. Supports warm transfer (agent stays on call), cold transfer (agent hangs up), or HTTP transfer (external API handles transfer). Enables the agent to transfer calls to other numbers or systems.","required":["endpointDestination","type","description"],"properties":{"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.description","typeLabel":"string"},"endpointDestination":{"minLength":1,"type":"string","description":"Operator destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The agent calls this endpoint first before bridging with the user.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.endpointDestination","typeLabel":"string"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.isEnabled","typeLabel":"boolean | null"},"sip":{"oneOf":[{"type":"object","description":"Optional SIP configuration override for placing the call to the operator. When specified, uses these SIP credentials instead of the agent's default outbound SIP settings for this specific transfer call.","properties":{"domain":{"oneOf":[{"type":"string","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.domain.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.domain.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.domain","typeLabel":"string | null"},"password":{"oneOf":[{"type":"string","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.password.oneOf.0","typeLabel":"string"},{"type":"null","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.password.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.password","typeLabel":"string | null"},"fromUser":{"oneOf":[{"type":"string","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.fromUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.fromUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.fromUser","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for SIP communication. Supported values are UDP (default), TCP, or TLS for encrypted connections.","default":"udp","enum":["udp","tcp","tls"],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.transport","typeLabel":"enum\u003cstring> | null"},"cpsLimit":{"oneOf":[{"type":"integer","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsLimit.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsLimit.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsLimit","typeLabel":"integer\u003cint32> | null"},"cpsKey":{"oneOf":[{"type":"string","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsKey.oneOf.0","typeLabel":"string"},{"type":"null","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsKey","typeLabel":"string | null"},"displayName":{"oneOf":[{"type":"string","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.displayName","typeLabel":"string | null"},"server":{"oneOf":[{"type":"string","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.server.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.server.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.server","typeLabel":"string | null"},"authUser":{"oneOf":[{"type":"string","description":"Authentication user identifier as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.authUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"Authentication user identifier as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.authUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.authUser","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip","typeLabel":"object | null"},"sipUui":{"oneOf":[{"type":"string","description":"Optional User-to-User payload on the operator call, encoded as RFC 7433 hex.\nSupports {{variableName}} from call additionalData and {{sip_endpoint}} for the caller.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipUui.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional User-to-User payload on the operator call, encoded as RFC 7433 hex.\nSupports {{variableName}} from call additionalData and {{sip_endpoint}} for the caller.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipUui.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipUui","typeLabel":"string | null"},"sipHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers on the operator call. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers on the operator call. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders","typeLabel":"object | null"},"interactionWithOperator":{"oneOf":[{"type":"object","description":"Behavior controlling what the agent says to the operator when they answer. Can use static predefined phrases or smart AI-generated context based on the conversation. Allows providing the operator with relevant information about the caller's needs before connecting them.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to customize how the AI agent interacts with the operator before bridging the call. Provides context-specific guidance for different scenarios, such as explaining the caller's situation, verifying operator availability, or following specific handoff protocols. Helps ensure smooth operator interactions while maintaining flexibility for different business processes.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to customize how the AI agent interacts with the operator before bridging the call. Provides context-specific guidance for different scenarios, such as explaining the caller's situation, verifying operator availability, or following specific handoff protocols. Helps ensure smooth operator interactions while maintaining flexibility for different business processes.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.additionalInstructions","typeLabel":"string | null"},"requireReadyBriefingAcceptance":{"type":"boolean","description":"When true, wait for operator readiness, deliver the configured briefing completely, and require later acceptance before bridging. Defaults to false, preserving the existing smart warm-transfer flow when absent or false.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.requireReadyBriefingAcceptance","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0","typeLabel":"object"},{"type":"object","description":"Behavior controlling what the agent says to the operator when they answer. Can use static predefined phrases or smart AI-generated context based on the conversation. Allows providing the operator with relevant information about the caller's needs before connecting them.","required":["type"],"properties":{"waitFirstAnswerFromOperator":{"oneOf":[{"type":"boolean","description":"Wait for voice detection from the operator before bridging the call. When enabled, the system waits for the operator to start speaking before connecting the caller, ensuring the operator is actively engaged and ready. When disabled, the call bridges immediately once other configured wait conditions are met or the timeout expires.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Wait for voice detection from the operator before bridging the call. When enabled, the system waits for the operator to start speaking before connecting the caller, ensuring the operator is actively engaged and ready. When disabled, the call bridges immediately once other configured wait conditions are met or the timeout expires.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator","typeLabel":"boolean | null"},"waitToneFromOperator":{"oneOf":[{"type":"array","items":{"type":"number","format":"double","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.0.items.[INDEX]","typeLabel":"number\u003cdouble>"},"description":"Audio frequency tones to wait for from the operator before bridging, specified in Hertz. Used to detect specific audio signals from the operator's phone system or IVR, such as 400Hz for readiness signals. The system listens for any of the specified frequencies and bridges the call when detected. Useful for integrating with legacy phone systems or custom operator signaling protocols.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.0","typeLabel":"number\u003cdouble>[]"},{"type":"null","items":{"type":"number","format":"double"},"description":"Audio frequency tones to wait for from the operator before bridging, specified in Hertz. Used to detect specific audio signals from the operator's phone system or IVR, such as 400Hz for readiness signals. The system listens for any of the specified frequencies and bridges the call when detected. Useful for integrating with legacy phone systems or custom operator signaling protocols.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitToneFromOperator","typeLabel":"number\u003cdouble>[] | null"},"waitDTMFFromOperator":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"DTMF key press tones to wait for from the operator before bridging the call. Accepts digit keys 0-9 and special keys like pound or star. The system waits for the operator to press any of the specified keys as an acknowledgment signal before connecting the caller. Common in call center environments where operators confirm readiness by pressing a specific key.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"DTMF key press tones to wait for from the operator before bridging the call. Accepts digit keys 0-9 and special keys like pound or star. The system waits for the operator to press any of the specified keys as an acknowledgment signal before connecting the caller. Common in call center environments where operators confirm readiness by pressing a specific key.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitDTMFFromOperator","typeLabel":"string[] | null"},"waitChecksTimeoutInS":{"oneOf":[{"type":"number","description":"Maximum time in seconds to wait for operator readiness signals before timing out. If the operator does not provide the expected voice, DTMF, or frequency tone signals within this timeout, the wait conditions are bypassed and the call proceeds according to failover configuration. Prevents indefinite waiting when operators are unavailable or unresponsive.","format":"double","default":4,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitChecksTimeoutInS.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Maximum time in seconds to wait for operator readiness signals before timing out. If the operator does not provide the expected voice, DTMF, or frequency tone signals within this timeout, the wait conditions are bypassed and the call proceeds according to failover configuration. Prevents indefinite waiting when operators are unavailable or unresponsive.","format":"double","default":4,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitChecksTimeoutInS.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitChecksTimeoutInS","typeLabel":"number\u003cdouble> | null"},"sayPhraseToOperator":{"oneOf":[{"type":"object","description":"Phrase configuration for introducing the caller to the operator before bridging. Allows the AI agent to provide context about the caller's needs, reason for transfer, or conversation summary to help the operator assist effectively. Can be configured to speak before or after the operator acknowledges, depending on call center workflow preferences.","required":["phrase"],"properties":{"phrase":{"minLength":1,"type":"string","description":"Phrase to speak to the operator when they answer. Should provide relevant context about the caller or their needs. Can include conversation summaries, caller identification, or reason for transfer to help the operator assist the user effectively.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.phrase","typeLabel":"string"},"beforeOperator":{"oneOf":[{"type":"boolean","description":"Controls timing of when the phrase is spoken. When true, the agent speaks immediately when the call connects, potentially before the operator fully answers. When false, waits for the operator to acknowledge before speaking the phrase.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls timing of when the phrase is spoken. When true, the agent speaks immediately when the call connects, potentially before the operator fully answers. When false, waits for the operator to acknowledge before speaking the phrase.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator","typeLabel":"object · object · null"},"sayPhraseToCustomer":{"oneOf":[{"type":"string","description":"Phrase to speak to the customer before bridging the call with the operator. Informs the user that they're being connected to a human agent. Can include reassurance or set expectations about the handoff.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sayPhraseToCustomer.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase to speak to the customer before bridging the call with the operator. Informs the user that they're being connected to a human agent. Can include reassurance or set expectations about the handoff.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sayPhraseToCustomer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sayPhraseToCustomer","typeLabel":"string | null"},"continueAfterOperatorDisconnected":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent resumes the conversation if the operator disconnects or hangs up. When true, the agent continues talking to the user after the operator leaves. When false, the call ends when the operator disconnects.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueAfterOperatorDisconnected.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent resumes the conversation if the operator disconnects or hangs up. When true, the agent continues talking to the user after the operator leaves. When false, the call ends when the operator disconnects.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueAfterOperatorDisconnected.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueAfterOperatorDisconnected","typeLabel":"boolean | null"},"continueRecordingInTransfer":{"oneOf":[{"type":"boolean","default":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecordingInTransfer.oneOf.0","typeLabel":"boolean"},{"type":"null","default":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecordingInTransfer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecordingInTransfer","typeLabel":"boolean | null"},"transferRoutes":{"oneOf":[{"type":"array","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].name","typeLabel":"string"},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX].endpoint","typeLabel":"string"}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX]","typeLabel":"object"},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations","typeLabel":"object[]"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions."},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected."}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured."},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to."}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description."},"default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes","typeLabel":"object[] | null"},"operatorName":{"oneOf":[{"type":"string","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.operatorName.oneOf.0","typeLabel":"string"},{"type":"null","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.operatorName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.operatorName","typeLabel":"string | null"},"continueRecognitionInTransfer":{"oneOf":[{"type":"boolean","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecognitionInTransfer.oneOf.0","typeLabel":"boolean"},{"type":"null","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecognitionInTransfer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecognitionInTransfer","typeLabel":"boolean | null"},"callerIdMode":{"oneOf":[{"type":"string","description":"Determines which phone number is displayed to the transfer destination (human agent) during warm transfer.\nAgentPhoneNumber (default): Uses the AI agent's configured outbound SIP fromUser as the caller ID.\nUserPhoneNumber: Uses the user's phone number (job.endpoint) as the caller ID.\nWhen null, defaults to AgentPhoneNumber behavior.","default":"agentPhoneNumber","enum":["userPhoneNumber","agentPhoneNumber"],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.callerIdMode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.callerIdMode.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.callerIdMode","typeLabel":"enum\u003cstring> | null"},"threewayMessaging":{"oneOf":[{"type":"object","description":"Optional threeway messaging configuration.\nWhen configured, delivers a unified phrase to BOTH user and operator\nsimultaneously before the bridge channel is executed.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to customize how the AI generates the announcement phrase spoken to both parties simultaneously. Guides the language model in crafting appropriate handoff messaging, such as maintaining professional tone, including issue summaries, providing reassurance, or mentioning specialist involvement. When not specified, the phrase is generated based solely on conversation context without additional constraints.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to customize how the AI generates the announcement phrase spoken to both parties simultaneously. Guides the language model in crafting appropriate handoff messaging, such as maintaining professional tone, including issue summaries, providing reassurance, or mentioning specialist involvement. When not specified, the phrase is generated based solely on conversation context without additional constraints.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0.additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0","typeLabel":"object"},{"type":"object","description":"Optional threeway messaging configuration.\nWhen configured, delivers a unified phrase to BOTH user and operator\nsimultaneously before the bridge channel is executed.","required":["type"],"properties":{"phrase":{"oneOf":[{"type":"string","description":"Phrase spoken to both caller and operator simultaneously right before bridging the call. Should be clear and concise as both parties will hear it at the same moment during the transfer transition. Common examples include connection announcements like \"Connecting you now\", hold notifications like \"Please hold while I connect you\", or representative introduction messages like \"You are now being connected to a representative\".","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1.phrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to both caller and operator simultaneously right before bridging the call. Should be clear and concise as both parties will hear it at the same moment during the transfer transition. Common examples include connection announcements like \"Connecting you now\", hold notifications like \"Please hold while I connect you\", or representative introduction messages like \"You are now being connected to a representative\".","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1.phrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1.phrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging","typeLabel":"object · object · null"},"holdMedia":{"oneOf":[{"type":"object","description":"Optional hold media configuration for warm transfers.\nWhen enabled, plays media via media:// protocol instead of using the respond node\nto communicate with users during transfer.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.mediaFilename","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia","typeLabel":"object | null"},"fallbackToColdTransfer":{"type":"boolean","description":"When true and the warm transfer fails (the operator does not answer, the operator briefing fails, or the operator call cannot be placed), the agent cold-transfers the caller to the same destination before applying the failover behavior. Defaults to false.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.fallbackToColdTransfer","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer","typeLabel":"object · object · object · null"},"postCallAnalysis":{"oneOf":[{"type":"array","items":{"required":["labels","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Name identifier for this analysis configuration. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used to identify this analysis in the results.","isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].name","typeLabel":"string"},"labels":{"type":"array","items":{"required":["description","name","type"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Field name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. This name is used as the key in the analysis results.","isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].name","typeLabel":"string"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of what information to extract and how to interpret it. Guides the language model in identifying and extracting the relevant data from the conversation. Should clearly explain what to look for and how to categorize or format the extracted information.","isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].description","typeLabel":"string"},"type":{"type":"string","description":"Data type for the extracted value. Determines the structure and format of the extracted information and constrains what the language model can return.","enum":["string","number","boolean","enum"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"values":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].values.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Allowed values for enum type labels. When Type is Enum, the extracted value must be one of these predefined options. The language model selects the most appropriate value from this list based on the conversation content.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].values.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Allowed values for enum type labels. When Type is Enum, the extracted value must be one of these predefined options. The language model selects the most appropriate value from this list based on the conversation content.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].values.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].values","typeLabel":"string[] | null"},"required":{"oneOf":[{"type":"boolean","description":"Indicates whether this field must be populated. When true, the analysis will always attempt to extract a value for this field. When false, the field may be left empty if the relevant information is not found in the conversation.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].required.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Indicates whether this field must be populated. When true, the analysis will always attempt to extract a value for this field. When false, the field may be left empty if the relevant information is not found in the conversation.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].required.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].required","typeLabel":"boolean | null"}},"additionalProperties":false,"description":"Data field definition for post-call analysis extraction. Specifies a piece of information to identify and extract from conversation transcripts such as customer sentiment, appointment details, or business outcomes. The language model analyzes the completed conversation and attempts to populate this field based on the description and type constraints.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX]","typeLabel":"object"},"description":"List of data fields to extract from the conversation transcript. Each label defines a piece of information to identify and extract, such as customer sentiment, appointment times, order numbers, or custom business outcomes. The language model analyzes the conversation and populates these labels based on the transcript content.","isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels","typeLabel":"object[]"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this post-call analysis. When enabled, the system performs the configured analysis after each call completes and includes results in the completion webhook payload.","default":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this post-call analysis. When enabled, the system performs the configured analysis after each call completes and includes results in the completion webhook payload.","default":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].isEnabled","typeLabel":"boolean | null"}},"additionalProperties":false,"description":"Post-call analysis configuration for automatically extracting structured data from conversation transcripts after calls complete. Defines labels and fields to extract using language model analysis of the conversation. Enables automated classification, sentiment analysis, information extraction, and business outcome tracking from completed calls. Results are included in the completed webhook payload for integration with CRM systems, analytics platforms, or business intelligence tools.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Post-call analysis configurations for extracting insights after conversations complete. Multiple analysis tasks can be configured to process transcripts and generate structured data.","default":[],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["labels","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Name identifier for this analysis configuration. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used to identify this analysis in the results."},"labels":{"type":"array","items":{"required":["description","name","type"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Field name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. This name is used as the key in the analysis results."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of what information to extract and how to interpret it. Guides the language model in identifying and extracting the relevant data from the conversation. Should clearly explain what to look for and how to categorize or format the extracted information."},"type":{"type":"string","description":"Data type for the extracted value. Determines the structure and format of the extracted information and constrains what the language model can return.","enum":["string","number","boolean","enum"]},"values":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"Allowed values for enum type labels. When Type is Enum, the extracted value must be one of these predefined options. The language model selects the most appropriate value from this list based on the conversation content."},{"type":"null","items":{"type":"string"},"description":"Allowed values for enum type labels. When Type is Enum, the extracted value must be one of these predefined options. The language model selects the most appropriate value from this list based on the conversation content."}]},"required":{"oneOf":[{"type":"boolean","description":"Indicates whether this field must be populated. When true, the analysis will always attempt to extract a value for this field. When false, the field may be left empty if the relevant information is not found in the conversation."},{"type":"null","description":"Indicates whether this field must be populated. When true, the analysis will always attempt to extract a value for this field. When false, the field may be left empty if the relevant information is not found in the conversation."}]}},"additionalProperties":false,"description":"Data field definition for post-call analysis extraction. Specifies a piece of information to identify and extract from conversation transcripts such as customer sentiment, appointment details, or business outcomes. The language model analyzes the completed conversation and attempts to populate this field based on the description and type constraints."},"description":"List of data fields to extract from the conversation transcript. Each label defines a piece of information to identify and extract, such as customer sentiment, appointment times, order numbers, or custom business outcomes. The language model analyzes the conversation and populates these labels based on the transcript content."},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this post-call analysis. When enabled, the system performs the configured analysis after each call completes and includes results in the completion webhook payload.","default":true},{"type":"null","description":"Enables or disables this post-call analysis. When enabled, the system performs the configured analysis after each call completes and includes results in the completion webhook payload.","default":true}]}},"additionalProperties":false,"description":"Post-call analysis configuration for automatically extracting structured data from conversation transcripts after calls complete. Defines labels and fields to extract using language model analysis of the conversation. Enables automated classification, sentiment analysis, information extraction, and business outcome tracking from completed calls. Results are included in the completed webhook payload for integration with CRM systems, analytics platforms, or business intelligence tools."},"description":"Post-call analysis configurations for extracting insights after conversations complete. Multiple analysis tasks can be configured to process transcripts and generate structured data.","default":[],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis","typeLabel":"object[] | null"},"talkFirst":{"oneOf":[{"type":"object","description":"Controls whether the agent speaks first when the call connects. When enabled, the agent greets the user immediately rather than waiting for the user to speak first.","default":{"version":"v1","delay":1,"isEnabled":false,"interruptible":true},"properties":{"phrase":{"oneOf":[{"type":"string","description":"Greeting phrase the agent should speak immediately when the call connects. This is spoken before the normal conversation flow begins, allowing the agent to introduce itself or provide an opening statement on outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.phrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Greeting phrase the agent should speak immediately when the call connects. This is spoken before the normal conversation flow begins, allowing the agent to introduce itself or provide an opening statement on outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.phrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.phrase","typeLabel":"string | null"},"delay":{"oneOf":[{"type":"number","description":"Delay in seconds before speaking the greeting phrase. Allows time for the call connection to stabilize or for the user to say hello first if desired. The agent waits this duration after call connection before speaking the configured phrase.","format":"double","default":1,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.delay.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Delay in seconds before speaking the greeting phrase. Allows time for the call connection to stabilize or for the user to say hello first if desired. The agent waits this duration after call connection before speaking the configured phrase.","format":"double","default":1,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.delay.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.delay","typeLabel":"number\u003cdouble> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables the talk first feature. When enabled, the agent speaks the configured greeting phrase after the specified delay when the call connects.","default":false,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables the talk first feature. When enabled, the agent speaks the configured greeting phrase after the specified delay when the call connects.","default":false,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.isEnabled","typeLabel":"boolean | null"},"interruptible":{"oneOf":[{"type":"boolean","description":"Controls whether the user can interrupt the greeting phrase. When true, the agent stops speaking the greeting if the user starts talking. When false, the agent completes the entire greeting phrase before listening for user input.","default":true,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.interruptible.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the user can interrupt the greeting phrase. When true, the agent stops speaking the greeting if the user starts talking. When false, the agent completes the entire greeting phrase before listening for user input.","default":true,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.interruptible.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.interruptible","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst","typeLabel":"object | null"},"maxDuration":{"oneOf":[{"type":"object","description":"Maximum duration limit for conversations. The call will be automatically ended if it exceeds the configured time limit.","default":{"version":"v1","maxDurationSeconds":3600,"maxDurationInTransferSeconds":7200,"isEnabled":true},"properties":{"maxDurationSeconds":{"oneOf":[{"type":"integer","description":"Maximum duration in seconds for normal conversations before the call is automatically ended. Prevents calls from running indefinitely and helps control costs and resource usage.","format":"int32","default":3600,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationSeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum duration in seconds for normal conversations before the call is automatically ended. Prevents calls from running indefinitely and helps control costs and resource usage.","format":"int32","default":3600,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationSeconds","typeLabel":"integer\u003cint32> | null"},"maxDurationInTransferSeconds":{"oneOf":[{"type":"integer","description":"Maximum duration in seconds for conversations that have been transferred. Allows longer durations for transferred calls since they may involve more complex interactions or human operators. The call is automatically ended when this limit is exceeded during a transfer.","format":"int32","default":7200,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationInTransferSeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum duration in seconds for conversations that have been transferred. Allows longer durations for transferred calls since they may involve more complex interactions or human operators. The call is automatically ended when this limit is exceeded during a transfer.","format":"int32","default":7200,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationInTransferSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationInTransferSeconds","typeLabel":"integer\u003cint32> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables maximum duration enforcement. When enabled, calls are automatically terminated when they exceed the configured duration limits.","default":true,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables maximum duration enforcement. When enabled, calls are automatically terminated when they exceed the configured duration limits.","default":true,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.isEnabled","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration","typeLabel":"object | null"},"ivrDetection":{"oneOf":[{"type":"object","description":"IVR (Interactive Voice Response) detection for identifying automated phone systems. Helps the agent recognize and respond appropriately to menu prompts and automated messages.","default":{"version":"v1","isEnabled":true,"enabledForChat":false,"enabledForInbound":false,"enabledForOutbound":true,"enabledForWebCall":false,"ivrNavigation":false},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Master enable flag for IVR and answering machine detection. When enabled, the system attempts to detect whether calls are answered by humans or machines and behaves according to the configured settings.","default":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Master enable flag for IVR and answering machine detection. When enabled, the system attempts to detect whether calls are answered by humans or machines and behaves according to the configured settings.","default":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.isEnabled","typeLabel":"boolean | null"},"enabledForChat":{"oneOf":[{"type":"boolean","description":"Enables answering machine detection for chat conversations. When enabled, the system attempts to detect automated chat responses or bot interactions.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForChat.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables answering machine detection for chat conversations. When enabled, the system attempts to detect automated chat responses or bot interactions.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForChat.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForChat","typeLabel":"boolean | null"},"enabledForInbound":{"oneOf":[{"type":"boolean","description":"Enables answering machine detection for inbound phone calls. When enabled, the system detects if the caller is a human or an automated system calling your phone numbers.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForInbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables answering machine detection for inbound phone calls. When enabled, the system detects if the caller is a human or an automated system calling your phone numbers.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForInbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForInbound","typeLabel":"boolean | null"},"enabledForOutbound":{"oneOf":[{"type":"boolean","description":"Enables answering machine detection for outbound phone calls. When enabled, the system detects whether a human or voicemail/IVR system answered the call, allowing the agent to leave messages or navigate menus as configured.","default":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForOutbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables answering machine detection for outbound phone calls. When enabled, the system detects whether a human or voicemail/IVR system answered the call, allowing the agent to leave messages or navigate menus as configured.","default":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForOutbound","typeLabel":"boolean | null"},"enabledForWebCall":{"oneOf":[{"type":"boolean","description":"Enables answering machine detection for web-based voice calls. When enabled, the system detects automated responses in web call scenarios.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForWebCall.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables answering machine detection for web-based voice calls. When enabled, the system detects automated responses in web call scenarios.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForWebCall.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForWebCall","typeLabel":"boolean | null"},"ivrNavigation":{"oneOf":[{"type":"boolean","description":"Enables IVR menu navigation using DTMF tone sending. When enabled, the agent attempts to navigate through automated phone menus by sending touch-tone digits before giving up on the call. Useful for reaching human operators through phone trees on outbound calls.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.ivrNavigation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables IVR menu navigation using DTMF tone sending. When enabled, the agent attempts to navigate through automated phone menus by sending touch-tone digits before giving up on the call. Useful for reaching human operators through phone trees on outbound calls.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.ivrNavigation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.ivrNavigation","typeLabel":"boolean | null"},"experimental":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Experimental features. `ivr_voice_recognition` (boolean) turns on audio-based machine detection;\n`ivr_voice_recognition_engine` selects its engine: `\"dasha\"` (default) or `\"amdy\"` (amdy.io).\n`ivr_voice_recognition_immediate` (boolean, amdy.io only) asks for a verdict as soon as amdy.io has one,\nwhich takes less audio but is less confident; off, amdy.io listens longer before deciding.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Experimental features. `ivr_voice_recognition` (boolean) turns on audio-based machine detection;\n`ivr_voice_recognition_engine` selects its engine: `\"dasha\"` (default) or `\"amdy\"` (amdy.io).\n`ivr_voice_recognition_immediate` (boolean, amdy.io only) asks for a verdict as soon as amdy.io has one,\nwhich takes less audio but is less confident; off, amdy.io listens longer before deciding.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental","typeLabel":"object | null"},"behavior":{"oneOf":[{"type":"object","description":"Behavior configuration controlling what the agent says or does when an answering machine or IVR is detected. Static behaviors use predefined phrases, while smart behaviors use the language model to generate contextual responses based on the conversation.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to guide the language model in generating voicemail messages. Provides context about what information to include, tone to use, or specific details to mention. Supports variable interpolation using {{variableName}} syntax for dynamic instructions based on call data.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to guide the language model in generating voicemail messages. Provides context about what information to include, tone to use, or specific details to mention. Supports variable interpolation using {{variableName}} syntax for dynamic instructions based on call data.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0.additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0","typeLabel":"object"},{"type":"object","description":"Behavior configuration controlling what the agent says or does when an answering machine or IVR is detected. Static behaviors use predefined phrases, while smart behaviors use the language model to generate contextual responses based on the conversation.","required":["type"],"properties":{"staticPhrase":{"oneOf":[{"type":"string","description":"Voicemail message to speak when an answering machine is detected. The agent says this exact phrase after detection. Supports variable interpolation using {{variableName}} syntax to include dynamic data like caller names, phone numbers, or appointment details in the message.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Voicemail message to speak when an answering machine is detected. The agent says this exact phrase after detection. Supports variable interpolation using {{variableName}} syntax to include dynamic data like caller names, phone numbers, or appointment details in the message.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior","typeLabel":"object · object · null"},"screeningAssistantBehavior":{"oneOf":[{"type":"object","description":"Optional prompt-driven behavior for automated assistants that screen calls before connecting the caller to a person.\nWhen omitted, call screening retains the existing pass-through behavior.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions that control what the agent says and how long it waits while screening is active.\nSupports variable interpolation using {{variableName}} syntax.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions that control what the agent says and how long it waits while screening is active.\nSupports variable interpolation using {{variableName}} syntax.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0.additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior","typeLabel":"object | null"},"staticPhraseForIVR":{"oneOf":[{"type":"string","description":"Deprecated static phrase for answering machine messages. Use the Behavior property instead for more flexible message configuration. This field supports variable interpolation using {{variableName}} syntax.","default":null,"deprecated":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.staticPhraseForIVR.oneOf.0","typeLabel":"string"},{"type":"null","description":"Deprecated static phrase for answering machine messages. Use the Behavior property instead for more flexible message configuration. This field supports variable interpolation using {{variableName}} syntax.","default":null,"deprecated":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.staticPhraseForIVR.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.staticPhraseForIVR","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection","typeLabel":"object | null"},"ambientNoise":{"oneOf":[{"type":"object","description":"Ambient background noise configuration. Adds realistic background sounds like cafe ambiance or office noise to make the agent sound more natural and human-like.","default":{"version":"v1","isEnabled":false,"ambientNoiseLevel":0.1},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables ambient noise playback. When enabled, the configured background sound or noise level is mixed with the agent's voice output.","default":false,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables ambient noise playback. When enabled, the configured background sound or noise level is mixed with the agent's voice output.","default":false,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.isEnabled","typeLabel":"boolean | null"},"ambientNoiseLevel":{"oneOf":[{"type":"number","description":"Volume level for the ambient noise relative to the agent's voice. Controls how loud the background noise is compared to the agent's speech. Lower values create subtle background ambience, higher values make the background more prominent.","format":"double","default":0.1,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.ambientNoiseLevel.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Volume level for the ambient noise relative to the agent's voice. Controls how loud the background noise is compared to the agent's speech. Lower values create subtle background ambience, higher values make the background more prominent.","format":"double","default":0.1,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.ambientNoiseLevel.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.ambientNoiseLevel","typeLabel":"number\u003cdouble> | null"},"backgroundSound":{"oneOf":[{"type":"string","description":"Identifier for the background sound to play. Specifies which ambient sound effect or noise pattern to use, such as office sounds, cafe ambience, or generic background noise.","default":null,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.backgroundSound.oneOf.0","typeLabel":"string"},{"type":"null","description":"Identifier for the background sound to play. Specifies which ambient sound effect or noise pattern to use, such as office sounds, cafe ambience, or generic background noise.","default":null,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.backgroundSound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.backgroundSound","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise","typeLabel":"object | null"},"rag":{"oneOf":[{"type":"object","description":"RAG (Retrieval-Augmented Generation) feature for knowledge base integration. Enables the agent to search and retrieve information from connected knowledge bases during conversations.","required":["kbLinks"],"properties":{"kbLinks":{"type":"array","items":{"required":["id"],"type":"object","properties":{"id":{"maxLength":255,"minLength":1,"type":"string","description":"Unique identifier of the knowledge base to link. References a knowledge base that has been created and contains indexed documents, articles, or reference materials that the agent can search.","isRequired":true,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.kbLinks.items.[INDEX].id","typeLabel":"string"}},"additionalProperties":false,"description":"Knowledge base link reference for RAG (Retrieval-Augmented Generation) feature. Points to a knowledge base that the agent can search during conversations to retrieve relevant information for answering questions. The knowledge base must be created and populated with documents before being linked to the agent.","uniqueKey":"config.features.oneOf.0.rag.oneOf.0.kbLinks.items.[INDEX]","typeLabel":"object"},"description":"List of knowledge base references that the agent can search. Each link identifies a knowledge base containing documents, FAQs, or reference materials. The agent can query these knowledge bases during conversations to augment its responses with retrieved information.","isRequired":true,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.kbLinks","typeLabel":"object[]"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables RAG functionality. When enabled, the agent can search linked knowledge bases during conversations to retrieve relevant information for answering user questions with accurate, contextual responses.","default":false,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables RAG functionality. When enabled, the agent can search linked knowledge bases during conversations to retrieve relevant information for answering user questions with accurate, contextual responses.","default":false,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mode":{"oneOf":[{"type":"string","description":"How the agent searches its knowledge bases in text chat: \"everyTurn\" (the default when omitted) searches once before every reply; \"tool\" lets the agent call a searchKnowledgeBase tool when it needs facts, as many times as a reply needs. Applies to text chat only; voice calls search on every turn in either mode.","enum":["everyTurn","tool"],"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.mode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.rag.oneOf.0.mode.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.mode","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.rag.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.rag","typeLabel":"object | null"},"languageSwitching":{"oneOf":[{"type":"object","description":"Language switching capability allowing the agent to switch between multiple languages during the call. Enables the agent to communicate in different languages within the same conversation.","default":{"version":"v1","isEnabled":true},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables the language switching capability. When enabled, the agent can switch languages mid-conversation in response to user requests to speak in a different language.","default":true,"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables the language switching capability. When enabled, the agent can switch languages mid-conversation in response to user requests to speak in a different language.","default":true,"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0.isEnabled","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.languageSwitching","typeLabel":"object | null"},"fillers":{"oneOf":[{"type":"object","description":"Filler words and phrases configuration. Controls natural speech patterns like \"um\", \"uh\", \"let me see\" to make the agent sound more conversational and human-like.","default":{"version":"v1","isEnabled":true,"strategy":{"type":"static","texts":["um"]}},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables filler word insertion. When enabled, the agent occasionally uses the configured filler phrases during conversations to sound more natural and less robotic.","default":true,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables filler word insertion. When enabled, the agent occasionally uses the configured filler phrases during conversations to sound more natural and less robotic.","default":true,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.isEnabled","typeLabel":"boolean | null"},"strategy":{"oneOf":[{"type":"object","description":"Strategy for selecting and inserting filler words. Static strategies use a predefined list of filler phrases. The strategy controls which fillers to use and how often they appear in the agent's speech.","default":{"type":"static","texts":["um"]},"required":["type"],"properties":{"texts":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.texts.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of filler phrases the agent can use. The agent randomly selects from these options when inserting verbal pauses. Common examples include \"um\", \"uh\", \"let me see\", \"well\", \"you know\", \"hmm\", or \"let me think\". Customize this list to control the agent's hesitation patterns and speaking style.","default":["um"],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.texts.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of filler phrases the agent can use. The agent randomly selects from these options when inserting verbal pauses. Common examples include \"um\", \"uh\", \"let me see\", \"well\", \"you know\", \"hmm\", or \"let me think\". Customize this list to control the agent's hesitation patterns and speaking style.","default":["um"],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.texts.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.texts","typeLabel":"string[] | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.fillers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers","typeLabel":"object | null"},"backchannel":{"oneOf":[{"type":"object","description":"Backchannel responses configuration. Controls brief acknowledgments like \"mm-hmm\", \"I see\", \"right\" that the agent uses while listening to show active engagement.","default":{"version":"v1","isEnabled":false},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables backchannel acknowledgments. When enabled, the agent produces listening cues while the user speaks to indicate attention and understanding.","default":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables backchannel acknowledgments. When enabled, the agent produces listening cues while the user speaks to indicate attention and understanding.","default":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.isEnabled","typeLabel":"boolean | null"},"behavior":{"oneOf":[{"type":"object","description":"Behavior configuration controlling when and how the agent produces backchannels. Static behaviors use configurable timing properties to determine when to insert acknowledgments. Smart behaviors use intelligent detection to produce backchannels at natural conversation points.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to guide the AI in producing backchannels. Provides context about when or how to acknowledge, tone to use, or specific phrases to prefer. Supports variable interpolation using {{variableName}} syntax for dynamic instructions based on conversation data.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to guide the AI in producing backchannels. Provides context about when or how to acknowledge, tone to use, or specific phrases to prefer. Supports variable interpolation using {{variableName}} syntax for dynamic instructions based on conversation data.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.additionalInstructions","typeLabel":"string | null"},"frequency":{"oneOf":[{"type":"number","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Lower values make backchannels very rare, 0.5 provides moderate acknowledgments, and higher values produce frequent listening cues. Controls how often the AI decides to signal active listening during user speech.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.frequency.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Lower values make backchannels very rare, 0.5 provides moderate acknowledgments, and higher values produce frequent listening cues. Controls how often the AI decides to signal active listening during user speech.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.frequency.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.frequency","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0","typeLabel":"object"},{"type":"object","description":"Behavior configuration controlling when and how the agent produces backchannels. Static behaviors use configurable timing properties to determine when to insert acknowledgments. Smart behaviors use intelligent detection to produce backchannels at natural conversation points.","required":["type"],"properties":{"phrases":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.phrases.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of acknowledgment phrases the agent can use for backchannels. The agent randomly selects from these options when timing conditions are met. Common examples include \"uh-huh\", \"mm-hmm\", \"I see\", \"right\", \"okay\", or \"go on\". Supports variable interpolation using {{variableName}} syntax for dynamic phrases.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.phrases.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of acknowledgment phrases the agent can use for backchannels. The agent randomly selects from these options when timing conditions are met. Common examples include \"uh-huh\", \"mm-hmm\", \"I see\", \"right\", \"okay\", or \"go on\". Supports variable interpolation using {{variableName}} syntax for dynamic phrases.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.phrases.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.phrases","typeLabel":"string[] | null"},"minLengthVoice":{"oneOf":[{"type":"number","description":"Minimum duration in seconds the user must speak before a backchannel can be triggered. Prevents acknowledgments from interrupting very short utterances. The agent waits at least this long into user speech before considering backchannel insertion.","format":"double","default":10,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoice.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Minimum duration in seconds the user must speak before a backchannel can be triggered. Prevents acknowledgments from interrupting very short utterances. The agent waits at least this long into user speech before considering backchannel insertion.","format":"double","default":10,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoice.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoice","typeLabel":"number\u003cdouble> | null"},"minLengthVoiceDeviation":{"oneOf":[{"type":"number","description":"Percentage deviation for minimum voice length randomization, ranging from 0.0 to 1.0. Multiplied by MinLengthVoice to introduce natural variation in when backchannels can occur. Higher values create more unpredictability in timing for a more human-like pattern.","format":"double","default":0.25,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoiceDeviation.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Percentage deviation for minimum voice length randomization, ranging from 0.0 to 1.0. Multiplied by MinLengthVoice to introduce natural variation in when backchannels can occur. Higher values create more unpredictability in timing for a more human-like pattern.","format":"double","default":0.25,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoiceDeviation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoiceDeviation","typeLabel":"number\u003cdouble> | null"},"frequency":{"oneOf":[{"type":"number","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Controls how often acknowledgments occur when timing conditions are met. Lower values make backchannels rarer, higher values produce more frequent listening cues.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.frequency.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Controls how often acknowledgments occur when timing conditions are met. Lower values make backchannels rarer, higher values produce more frequent listening cues.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.frequency.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.frequency","typeLabel":"number\u003cdouble> | null"},"minCooldown":{"oneOf":[{"type":"number","description":"Minimum time in seconds that must elapse between consecutive backchannels. Prevents acknowledgments from occurring too close together. The agent waits at least this long after one backchannel before producing another.","format":"double","default":8,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldown.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Minimum time in seconds that must elapse between consecutive backchannels. Prevents acknowledgments from occurring too close together. The agent waits at least this long after one backchannel before producing another.","format":"double","default":8,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldown.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldown","typeLabel":"number\u003cdouble> | null"},"minCooldownDeviation":{"oneOf":[{"type":"number","description":"Percentage deviation for cooldown randomization, ranging from 0.0 to 1.0. Multiplied by MinCooldown to introduce natural variation in spacing between backchannels. Higher values create more unpredictable timing for a more human-like rhythm.","format":"double","default":0.25,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldownDeviation.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Percentage deviation for cooldown randomization, ranging from 0.0 to 1.0. Multiplied by MinCooldown to introduce natural variation in spacing between backchannels. Higher values create more unpredictable timing for a more human-like rhythm.","format":"double","default":0.25,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldownDeviation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldownDeviation","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1","typeLabel":"object"},{"type":"object","description":"Behavior configuration controlling when and how the agent produces backchannels. Static behaviors use configurable timing properties to determine when to insert acknowledgments. Smart behaviors use intelligent detection to produce backchannels at natural conversation points.","required":["type"],"properties":{"phrases":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.phrases.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of acknowledgment phrases the agent can use for backchannels. The agent randomly selects from these options when inserting listening cues. Common examples include \"uh-huh\", \"mm-hmm\", \"I see\", \"right\", \"okay\", or \"go on\". Supports variable interpolation using {{variableName}} syntax for dynamic phrases.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.phrases.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of acknowledgment phrases the agent can use for backchannels. The agent randomly selects from these options when inserting listening cues. Common examples include \"uh-huh\", \"mm-hmm\", \"I see\", \"right\", \"okay\", or \"go on\". Supports variable interpolation using {{variableName}} syntax for dynamic phrases.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.phrases.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.phrases","typeLabel":"string[] | null"},"frequency":{"oneOf":[{"type":"number","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Lower values make backchannels very rare, 0.5 provides moderate acknowledgments, and higher values produce frequent listening cues. Controls how often the agent signals active listening during user speech.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.frequency.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Lower values make backchannels very rare, 0.5 provides moderate acknowledgments, and higher values produce frequent listening cues. Controls how often the agent signals active listening during user speech.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.frequency.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.frequency","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.backchannel.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel","typeLabel":"object | null"},"turnTaking":{"oneOf":[{"type":"object","description":"Turn taking configuration for the main customer call. Controls which DashaScript VAD mode is passed to the initial connect operation.","default":{"version":"v1","vad":"asap_v2","vadFallback":"asap_v2"},"properties":{"vad":{"type":"string","description":"Voice activity detection mode passed to the main call connect options.","default":"asap_v2","enum":["asap_v1","asap_v2","flux","companion"],"uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.0.vad","typeLabel":"enum\u003cstring>"},"vadFallback":{"type":"string","description":"Fallback used only in companion mode. Omitted uses Platform's ASAP v2 default.","default":"asap_v2","enum":["asap_v2","asap_v1","legacy"],"uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.0.vadFallback","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.turnTaking","typeLabel":"object | null"},"companions":{"oneOf":[{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"oneOf":[{"type":"string","description":"Optional absolute ws/wss URL. Omit to resolve the companion by its registered name.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.url.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional absolute ws/wss URL. Omit to resolve the companion by its registered name.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.url","typeLabel":"string | null"},"streams":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.streams.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Subscribed streams: audio, vad, stt, tts, vad_prob. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.streams.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Subscribed streams: audio, vad, stt, tts, vad_prob. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.streams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.streams","typeLabel":"string[] | null"},"channels":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.channels.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Audio channels: in, out. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.channels.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Audio channels: in, out. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.channels.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.channels","typeLabel":"string[] | null"},"mic":{"oneOf":[{"type":"string","description":"Microphone source: raw or cleaned. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.mic.oneOf.0","typeLabel":"string"},{"type":"null","description":"Microphone source: raw or cleaned. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.mic.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.mic","typeLabel":"string | null"},"turn_control":{"oneOf":[{"type":"boolean","description":"Opt in to controlling turns when turnTaking.vad is companion.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.turn_control.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opt in to controlling turns when turnTaking.vad is companion.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.turn_control.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.turn_control","typeLabel":"boolean | null"},"interruption_control":{"oneOf":[{"type":"boolean","description":"Opt in to companion interruption decisions. Requires turn control.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.interruption_control.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opt in to companion interruption decisions. Requires turn control.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.interruption_control.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.interruption_control","typeLabel":"boolean | null"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional headers sent on the companion WebSocket connection.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional headers sent on the companion WebSocket connection.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers","typeLabel":"object | null"},"max_message_bytes":{"oneOf":[{"type":"integer","description":"Positive inbound message size limit in bytes.","format":"int32","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_message_bytes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Positive inbound message size limit in bytes.","format":"int32","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_message_bytes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_message_bytes","typeLabel":"integer\u003cint32> | null"},"max_messages_per_second":{"oneOf":[{"type":"number","description":"Positive inbound message rate limit.","format":"double","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_messages_per_second.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Positive inbound message rate limit.","format":"double","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_messages_per_second.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_messages_per_second","typeLabel":"number\u003cdouble> | null"},"params":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Companion-specific parameters, preserving nested JSON values.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Companion-specific parameters, preserving nested JSON values.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params","typeLabel":"object | null"}},"additionalProperties":false,"description":"Voice companion options for the main customer call. Field names match Platform's wire configuration.\nOmitted options inherit the registered companion's defaults. Provider secrets belong in Platform.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties","typeLabel":"object"},"description":"Optional voice companions for the main customer call, keyed by registered name.\nA custom companion may supply an absolute ws/wss URL. Omitted means no companions.","default":null,"uniqueKey":"config.features.oneOf.0.companions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"object","properties":{"url":{"oneOf":[{"type":"string","description":"Optional absolute ws/wss URL. Omit to resolve the companion by its registered name.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.url.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional absolute ws/wss URL. Omit to resolve the companion by its registered name.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.url","typeLabel":"string | null"},"streams":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.streams.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Subscribed streams: audio, vad, stt, tts, vad_prob. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.streams.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Subscribed streams: audio, vad, stt, tts, vad_prob. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.streams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.streams","typeLabel":"string[] | null"},"channels":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.channels.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Audio channels: in, out. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.channels.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Audio channels: in, out. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.channels.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.channels","typeLabel":"string[] | null"},"mic":{"oneOf":[{"type":"string","description":"Microphone source: raw or cleaned. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.mic.oneOf.0","typeLabel":"string"},{"type":"null","description":"Microphone source: raw or cleaned. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.mic.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.mic","typeLabel":"string | null"},"turn_control":{"oneOf":[{"type":"boolean","description":"Opt in to controlling turns when turnTaking.vad is companion.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.turn_control.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opt in to controlling turns when turnTaking.vad is companion.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.turn_control.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.turn_control","typeLabel":"boolean | null"},"interruption_control":{"oneOf":[{"type":"boolean","description":"Opt in to companion interruption decisions. Requires turn control.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.interruption_control.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opt in to companion interruption decisions. Requires turn control.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.interruption_control.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.interruption_control","typeLabel":"boolean | null"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional headers sent on the companion WebSocket connection.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional headers sent on the companion WebSocket connection.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers","typeLabel":"object | null"},"max_message_bytes":{"oneOf":[{"type":"integer","description":"Positive inbound message size limit in bytes.","format":"int32","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_message_bytes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Positive inbound message size limit in bytes.","format":"int32","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_message_bytes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_message_bytes","typeLabel":"integer\u003cint32> | null"},"max_messages_per_second":{"oneOf":[{"type":"number","description":"Positive inbound message rate limit.","format":"double","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_messages_per_second.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Positive inbound message rate limit.","format":"double","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_messages_per_second.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_messages_per_second","typeLabel":"number\u003cdouble> | null"},"params":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Companion-specific parameters, preserving nested JSON values.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Companion-specific parameters, preserving nested JSON values.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params","typeLabel":"object | null"}},"additionalProperties":false,"description":"Voice companion options for the main customer call. Field names match Platform's wire configuration.\nOmitted options inherit the registered companion's defaults. Provider secrets belong in Platform.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties","typeLabel":"object"},"description":"Optional voice companions for the main customer call, keyed by registered name.\nA custom companion may supply an absolute ws/wss URL. Omitted means no companions.","default":null,"uniqueKey":"config.features.oneOf.0.companions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions","typeLabel":"object | null"},"silenceManagement":{"oneOf":[{"type":"object","description":"Silence management configuration. Controls how the agent handles pauses and silence during conversations including timeout behavior and prompting strategies.","default":{"version":"v1","isEnabled":true,"maxReminderAttempts":2,"reminderSilenceThresholdSeconds":5,"endWhenReminderLimitExceeded":true},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables silence management. When enabled, the agent sends reminders when the user is silent and can automatically end conversations after inactivity thresholds are exceeded. When disabled, the agent waits indefinitely for user input without prompting or terminating.","default":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables silence management. When enabled, the agent sends reminders when the user is silent and can automatically end conversations after inactivity thresholds are exceeded. When disabled, the agent waits indefinitely for user input without prompting or terminating.","default":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.isEnabled","typeLabel":"boolean | null"},"maxReminderAttempts":{"oneOf":[{"type":"integer","description":"Maximum number of reminder attempts to make when the user is silent. After this limit is reached, behavior is controlled by EndWhenReminderLimitExceeded to determine whether to end the call or stop reminding.","format":"int32","default":2,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.maxReminderAttempts.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum number of reminder attempts to make when the user is silent. After this limit is reached, behavior is controlled by EndWhenReminderLimitExceeded to determine whether to end the call or stop reminding.","format":"int32","default":2,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.maxReminderAttempts.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.maxReminderAttempts","typeLabel":"integer\u003cint32> | null"},"reminderSilenceThresholdSeconds":{"oneOf":[{"type":"number","description":"Silence duration in seconds after which a reminder is triggered. The agent waits this long for user input before prompting the user to ensure they are still engaged in the conversation.","format":"double","default":5,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.reminderSilenceThresholdSeconds.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Silence duration in seconds after which a reminder is triggered. The agent waits this long for user input before prompting the user to ensure they are still engaged in the conversation.","format":"double","default":5,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.reminderSilenceThresholdSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.reminderSilenceThresholdSeconds","typeLabel":"number\u003cdouble> | null"},"endWhenReminderLimitExceeded":{"oneOf":[{"type":"boolean","description":"Controls whether to end the conversation when maximum reminder attempts have been exceeded. When true, the call terminates after all reminders are exhausted. When false, the agent stops sending reminders but keeps the conversation open, waiting indefinitely for user input.","default":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endWhenReminderLimitExceeded.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether to end the conversation when maximum reminder attempts have been exceeded. When true, the call terminates after all reminders are exhausted. When false, the agent stops sending reminders but keeps the conversation open, waiting indefinitely for user input.","default":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endWhenReminderLimitExceeded.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endWhenReminderLimitExceeded","typeLabel":"boolean | null"},"endAfterSilenceThresholdSeconds":{"oneOf":[{"type":"number","description":"Absolute silence duration in seconds after which the conversation is automatically ended, regardless of reminder attempts. Provides a hard timeout for user inactivity. When not specified, only reminder-based termination applies.","format":"double","default":null,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endAfterSilenceThresholdSeconds.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Absolute silence duration in seconds after which the conversation is automatically ended, regardless of reminder attempts. Provides a hard timeout for user inactivity. When not specified, only reminder-based termination applies.","format":"double","default":null,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endAfterSilenceThresholdSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endAfterSilenceThresholdSeconds","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement","typeLabel":"object | null"},"preConversationMedia":{"oneOf":[{"type":"object","description":"Pre-conversation media playback. Plays an audio file immediately when the call connects,\nbefore the conversation begins. The media plays once and is non-interruptible.\nCan be enabled independently for inbound, outbound, and web calls.","default":{"version":"v1","isEnabled":false,"enabledForInbound":false,"enabledForOutbound":false,"enabledForWebCall":false},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables pre-conversation media playback.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables pre-conversation media playback.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play before the conversation starts.\nMust reference a media file that has been uploaded to the system.","default":null,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play before the conversation starts.\nMust reference a media file that has been uploaded to the system.","default":null,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.mediaFilename","typeLabel":"string | null"},"enabledForInbound":{"oneOf":[{"type":"boolean","description":"Enables pre-conversation media for inbound phone calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForInbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables pre-conversation media for inbound phone calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForInbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForInbound","typeLabel":"boolean | null"},"enabledForOutbound":{"oneOf":[{"type":"boolean","description":"Enables pre-conversation media for outbound phone calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForOutbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables pre-conversation media for outbound phone calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForOutbound","typeLabel":"boolean | null"},"enabledForWebCall":{"oneOf":[{"type":"boolean","description":"Enables pre-conversation media for web-based voice calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForWebCall.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables pre-conversation media for web-based voice calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForWebCall.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForWebCall","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia","typeLabel":"object | null"},"noiseSuppression":{"oneOf":[{"type":"object","description":"Noise suppression configuration for filtering background noise from call audio.\nSupports \"none\" (disabled) or \"krisp\" (Krisp engine, additional fee applies).\nAlso controls the noise suppression level and recording write strategy.","default":{"version":"v1","isEnabled":false,"type":"none","noiseSuppressionLevel":75,"recordWriteStrategy":"raw"},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables noise suppression. When disabled, no noise suppression is applied regardless of other settings.","default":false,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables noise suppression. When disabled, no noise suppression is applied regardless of other settings.","default":false,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.isEnabled","typeLabel":"boolean | null"},"type":{"oneOf":[{"type":"string","description":"The noise suppression engine to use.","default":"none","enum":["none","krisp"],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.type.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.type","typeLabel":"enum\u003cstring> | null"},"noiseSuppressionLevel":{"oneOf":[{"type":"integer","description":"The noise suppression level, from 0 (minimum) to 100 (maximum). Default is 75.\nControls how aggressively background noise is filtered.","format":"int32","default":75,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.noiseSuppressionLevel.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"The noise suppression level, from 0 (minimum) to 100 (maximum). Default is 75.\nControls how aggressively background noise is filtered.","format":"int32","default":75,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.noiseSuppressionLevel.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.noiseSuppressionLevel","typeLabel":"integer\u003cint32> | null"},"recordWriteStrategy":{"oneOf":[{"type":"string","description":"Controls what audio is stored in the call recording.\nDefault is \"raw\".","default":"raw","enum":["raw","cleaned"],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.recordWriteStrategy.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.recordWriteStrategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.recordWriteStrategy","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features","typeLabel":"object | null"},"mcpConnections":{"oneOf":[{"type":"array","items":{"required":["name","serverUrl"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Display name for this MCP connection. Used to identify the connection in logs and configuration.","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].name","typeLabel":"string"},"serverUrl":{"type":"string","description":"MCP server URL to connect to. The URL format depends on the transport protocol (SSE uses HTTP/HTTPS endpoints, StreamableHTTP uses HTTP endpoints).","format":"uri","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].serverUrl","typeLabel":"string\u003curi>"},"authentication":{"oneOf":[{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["apiKey","type"],"properties":{"apiKey":{"minLength":1,"type":"string","description":"API key value to send with requests. This is the secret key provided by the MCP server.","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.apiKey","typeLabel":"string"},"headerName":{"oneOf":[{"type":"string","description":"HTTP header name for the API key. Defaults to \"Authorization\" (the key is sent as the raw value, without a \"Bearer\" prefix). Set a custom header name such as \"X-API-Key\" if the MCP server expects one.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.headerName.oneOf.0","typeLabel":"string"},{"type":"null","description":"HTTP header name for the API key. Defaults to \"Authorization\" (the key is sent as the raw value, without a \"Bearer\" prefix). Set a custom header name such as \"X-API-Key\" if the MCP server expects one.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.headerName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.headerName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0","typeLabel":"object"},{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["token","type"],"properties":{"token":{"minLength":1,"type":"string","description":"Bearer token value without the \"Bearer \" prefix. The system automatically adds the prefix when sending requests. This is the OAuth or JWT token provided by the MCP server or authorization service.","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.1.token","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.1","typeLabel":"object"},{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["type"],"properties":{},"additionalProperties":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication","typeLabel":"object · object · object · null"},"customHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with each request to the MCP server. Useful for passing additional metadata or configuration to the server.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with each request to the MCP server. Useful for passing additional metadata or configuration to the server.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Whether this MCP connection is enabled. When disabled, the agent will not connect to this MCP server or use its tools.","default":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether this MCP connection is enabled. When disabled, the agent will not connect to this MCP server or use its tools.","default":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isEnabled","typeLabel":"boolean | null"},"description":{"oneOf":[{"type":"string","description":"Optional description explaining the purpose of this MCP connection or what services it provides.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional description explaining the purpose of this MCP connection or what services it provides.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].description","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for MCP communication. Supported values are SSE (Server-Sent Events for persistent connections) and StreamableHTTP (for request-response patterns).","default":"SSE","enum":["SSE","StreamableHTTP"],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].transport","typeLabel":"enum\u003cstring> | null"},"blackListTools":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].blackListTools.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of tool names to exclude from this MCP connection. Tools in this list will not be available to the agent even if the MCP server provides them. Useful for restricting access to specific tools.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].blackListTools.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of tool names to exclude from this MCP connection. Tools in this list will not be available to the agent even if the MCP server provides them. Useful for restricting access to specific tools.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].blackListTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].blackListTools","typeLabel":"string[] | null"},"whiteListTools":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].whiteListTools.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of tool names to allow from this MCP connection. When specified, only tools in this list will be available to the agent. If not specified, all tools from the server are available (subject to BlackListTools).","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].whiteListTools.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of tool names to allow from this MCP connection. When specified, only tools in this list will be available to the agent. If not specified, all tools from the server are available (subject to BlackListTools).","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].whiteListTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].whiteListTools","typeLabel":"string[] | null"},"isLongRunning":{"oneOf":[{"type":"boolean","description":"Whether every tool from this MCP connection is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the MCP server answers. Use LongRunningTools instead to mark only some of the connection's tools. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isLongRunning.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether every tool from this MCP connection is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the MCP server answers. Use LongRunningTools instead to mark only some of the connection's tools. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isLongRunning.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isLongRunning","typeLabel":"boolean | null"},"longRunningTools":{"oneOf":[{"type":"array","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Raw MCP tool name, as reported by the MCP server and without the connection prefix.","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX].name","typeLabel":"string"},"additionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX].additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX].additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX].additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"description":"Marks a single tool of an MCP connection as slow. A slow tool never blocks the conversation: the agent gets an immediate acknowledgement, keeps talking to the user, and the real result is added to the conversation history once the MCP server answers.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Individual tools of this connection that are slow, each with optional extra guidance for the agent. Tools listed here are slow even when IsLongRunning is disabled; when IsLongRunning is enabled every tool of the connection is slow and this list only supplies the per-tool guidance. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Raw MCP tool name, as reported by the MCP server and without the connection prefix."},"additionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null},{"type":"null","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null}]}},"additionalProperties":false,"description":"Marks a single tool of an MCP connection as slow. A slow tool never blocks the conversation: the agent gets an immediate acknowledgement, keeps talking to the user, and the real result is added to the conversation history once the MCP server answers."},"description":"Individual tools of this connection that are slow, each with optional extra guidance for the agent. Tools listed here are slow even when IsLongRunning is disabled; when IsLongRunning is enabled every tool of the connection is slow and this list only supplies the per-tool guidance. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"Model Context Protocol connection configuration for integrating external services with the agent. Defines how to connect to an MCP server including server URL, authentication, transport protocol, custom headers, and tool filtering.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Model Context Protocol connections for integrating external services. Allows the agent to connect to MCP servers via SSE or HTTP to access external tools and data sources.","default":[],"uniqueKey":"config.mcpConnections.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["name","serverUrl"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Display name for this MCP connection. Used to identify the connection in logs and configuration."},"serverUrl":{"type":"string","description":"MCP server URL to connect to. The URL format depends on the transport protocol (SSE uses HTTP/HTTPS endpoints, StreamableHTTP uses HTTP endpoints).","format":"uri"},"authentication":{"oneOf":[{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["apiKey","type"],"properties":{"apiKey":{"minLength":1,"type":"string","description":"API key value to send with requests. This is the secret key provided by the MCP server."},"headerName":{"oneOf":[{"type":"string","description":"HTTP header name for the API key. Defaults to \"Authorization\" (the key is sent as the raw value, without a \"Bearer\" prefix). Set a custom header name such as \"X-API-Key\" if the MCP server expects one."},{"type":"null","description":"HTTP header name for the API key. Defaults to \"Authorization\" (the key is sent as the raw value, without a \"Bearer\" prefix). Set a custom header name such as \"X-API-Key\" if the MCP server expects one."}]}},"additionalProperties":false},{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["token","type"],"properties":{"token":{"minLength":1,"type":"string","description":"Bearer token value without the \"Bearer \" prefix. The system automatically adds the prefix when sending requests. This is the OAuth or JWT token provided by the MCP server or authorization service."}},"additionalProperties":false},{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["type"],"properties":{},"additionalProperties":false},{"type":"null"}]},"customHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string"},"description":"Custom HTTP headers to include with each request to the MCP server. Useful for passing additional metadata or configuration to the server."},{"type":"null","additionalProperties":{"type":"string"},"description":"Custom HTTP headers to include with each request to the MCP server. Useful for passing additional metadata or configuration to the server."}]},"isEnabled":{"oneOf":[{"type":"boolean","description":"Whether this MCP connection is enabled. When disabled, the agent will not connect to this MCP server or use its tools.","default":true},{"type":"null","description":"Whether this MCP connection is enabled. When disabled, the agent will not connect to this MCP server or use its tools.","default":true}]},"description":{"oneOf":[{"type":"string","description":"Optional description explaining the purpose of this MCP connection or what services it provides.","default":null},{"type":"null","description":"Optional description explaining the purpose of this MCP connection or what services it provides.","default":null}]},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for MCP communication. Supported values are SSE (Server-Sent Events for persistent connections) and StreamableHTTP (for request-response patterns).","default":"SSE","enum":["SSE","StreamableHTTP"]},{"type":"null"}]},"blackListTools":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"List of tool names to exclude from this MCP connection. Tools in this list will not be available to the agent even if the MCP server provides them. Useful for restricting access to specific tools.","default":null},{"type":"null","items":{"type":"string"},"description":"List of tool names to exclude from this MCP connection. Tools in this list will not be available to the agent even if the MCP server provides them. Useful for restricting access to specific tools.","default":null}]},"whiteListTools":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"List of tool names to allow from this MCP connection. When specified, only tools in this list will be available to the agent. If not specified, all tools from the server are available (subject to BlackListTools).","default":null},{"type":"null","items":{"type":"string"},"description":"List of tool names to allow from this MCP connection. When specified, only tools in this list will be available to the agent. If not specified, all tools from the server are available (subject to BlackListTools).","default":null}]},"isLongRunning":{"oneOf":[{"type":"boolean","description":"Whether every tool from this MCP connection is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the MCP server answers. Use LongRunningTools instead to mark only some of the connection's tools. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false},{"type":"null","description":"Whether every tool from this MCP connection is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the MCP server answers. Use LongRunningTools instead to mark only some of the connection's tools. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false}]},"longRunningTools":{"oneOf":[{"type":"array","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Raw MCP tool name, as reported by the MCP server and without the connection prefix."},"additionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null},{"type":"null","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null}]}},"additionalProperties":false,"description":"Marks a single tool of an MCP connection as slow. A slow tool never blocks the conversation: the agent gets an immediate acknowledgement, keeps talking to the user, and the real result is added to the conversation history once the MCP server answers."},"description":"Individual tools of this connection that are slow, each with optional extra guidance for the agent. Tools listed here are slow even when IsLongRunning is disabled; when IsLongRunning is enabled every tool of the connection is slow and this list only supplies the per-tool guidance. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":null},{"type":"null","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Raw MCP tool name, as reported by the MCP server and without the connection prefix."},"additionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null},{"type":"null","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null}]}},"additionalProperties":false,"description":"Marks a single tool of an MCP connection as slow. A slow tool never blocks the conversation: the agent gets an immediate acknowledgement, keeps talking to the user, and the real result is added to the conversation history once the MCP server answers."},"description":"Individual tools of this connection that are slow, each with optional extra guidance for the agent. Tools listed here are slow even when IsLongRunning is disabled; when IsLongRunning is enabled every tool of the connection is slow and this list only supplies the per-tool guidance. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":null}]}},"additionalProperties":false,"description":"Model Context Protocol connection configuration for integrating external services with the agent. Defines how to connect to an MCP server including server URL, authentication, transport protocol, custom headers, and tool filtering."},"description":"Model Context Protocol connections for integrating external services. Allows the agent to connect to MCP servers via SSE or HTTP to access external tools and data sources.","default":[],"uniqueKey":"config.mcpConnections.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections","typeLabel":"object[] | null"},"startWebhook":{"oneOf":[{"type":"object","description":"Webhook URL called when a call starts, before the conversation begins. Allows you to inject dynamic data or configuration at call initiation time.","required":["webhook"],"properties":{"webhook":{"type":"object","description":"Webhook configuration defining the endpoint, headers, and request settings for start-of-conversation notifications. The system sends conversation initiation data to this webhook and waits for a response.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.startWebhook.oneOf.0.webhook.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.startWebhook.oneOf.0.webhook.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.startWebhook.oneOf.0.webhook.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.startWebhook.oneOf.0.webhook.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.headers","typeLabel":"object | null"},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"],"isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.httpMethod","typeLabel":"enum\u003cstring>"},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams","typeLabel":"object | null"},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain.","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0.template","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook","typeLabel":"object"},"fallbackResponse":{"oneOf":[{"type":"object","description":"Fallback response to use when the webhook call fails or times out. Determines whether to accept or reject the conversation if the webhook endpoint is unavailable or returns an error. Can be configured to accept the call with default settings or reject it.","default":{"accept":false,"reasonMessage":"Webhook for started webhook failed"},"properties":{"overrideAgentConfig":{"oneOf":[{"type":"object","description":"Optional modified agent configuration to use for this call instead of the original. Allows customizing the agent's behavior, language model settings, prompts, voice, tools, or any other configuration based on external logic or data. The entire configuration is replaced, not merged, so include all settings you want to apply.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideAgentConfig.oneOf.0","typeLabel":"object"},{"type":"null","description":"Optional modified agent configuration to use for this call instead of the original. Allows customizing the agent's behavior, language model settings, prompts, voice, tools, or any other configuration based on external logic or data. The entire configuration is replaced, not merged, so include all settings you want to apply.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideAgentConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideAgentConfig","typeLabel":"object | null"},"additionalData":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Additional data variables to use for this call. These values can be referenced in prompts using {{variableName}} syntax and override or supplement the agent's default AdditionalData. Useful for personalizing the conversation based on external context or user information.","uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Additional data variables to use for this call. These values can be referenced in prompts using {{variableName}} syntax and override or supplement the agent's default AdditionalData. Useful for personalizing the conversation based on external context or user information.","uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData","typeLabel":"object | null"},"overrideOutboundConfig":{"oneOf":[{"type":"object","description":"Optional override for outbound SIP configuration. Allows changing the SIP credentials, server, or transport settings for this specific outbound call without modifying the agent's default SIP configuration.","properties":{"phoneNumber":{"oneOf":[{"maxLength":255,"type":"string","description":"Phone number to use for this call instead of the agent's default. Overrides which number appears as the caller ID and which SIP registration is used for the call.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.phoneNumber.oneOf.0","typeLabel":"string"},{"maxLength":255,"type":"null","description":"Phone number to use for this call instead of the agent's default. Overrides which number appears as the caller ID and which SIP registration is used for the call.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.phoneNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.phoneNumber","typeLabel":"string | null"},"credentialsId":{"oneOf":[{"type":"string","description":"SIP credentials to use for this call instead of the agent's default. Allows routing the call through a different SIP trunk, useful for failover, cost optimization, or geographic routing.","format":"uuid","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.credentialsId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"SIP credentials to use for this call instead of the agent's default. Allows routing the call through a different SIP trunk, useful for failover, cost optimization, or geographic routing.","format":"uuid","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.credentialsId.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.credentialsId","typeLabel":"string\u003cuuid> | null"},"displayName":{"oneOf":[{"maxLength":255,"type":"string","description":"Display name to use for caller ID for this call instead of the phone number's default. Overrides the caller ID name shown to the recipient.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"maxLength":255,"type":"null","description":"Display name to use for caller ID for this call instead of the phone number's default. Overrides the caller ID name shown to the recipient.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.displayName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0","typeLabel":"object"},{"type":"object","description":"Fallback response to use when the webhook call fails or times out. Determines whether to accept or reject the conversation if the webhook endpoint is unavailable or returns an error. Can be configured to accept the call with default settings or reject it.","default":{"accept":false,"reasonMessage":"Webhook for started webhook failed"},"required":["reasonMessage"],"properties":{"reasonMessage":{"minLength":1,"type":"string","description":"Explanation of why the call is being rejected. This message is used for logging and debugging purposes to understand why external logic determined the call should not proceed.","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.1.reasonMessage","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse","typeLabel":"object · object · null"},"isEnabledForInbound":{"oneOf":[{"type":"boolean","description":"Enables the start webhook for inbound phone calls. When enabled, the webhook is triggered when someone calls one of your configured phone numbers, allowing you to accept or reject incoming calls based on external logic.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForInbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables the start webhook for inbound phone calls. When enabled, the webhook is triggered when someone calls one of your configured phone numbers, allowing you to accept or reject incoming calls based on external logic.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForInbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForInbound","typeLabel":"boolean | null"},"isEnabledForOutbound":{"oneOf":[{"type":"boolean","description":"Enables the start webhook for outbound phone calls. When enabled, the webhook is triggered before making an outbound call, allowing you to modify call parameters or cancel the call based on external conditions.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForOutbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables the start webhook for outbound phone calls. When enabled, the webhook is triggered before making an outbound call, allowing you to modify call parameters or cancel the call based on external conditions.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForOutbound","typeLabel":"boolean | null"},"isEnabledForWidget":{"oneOf":[{"type":"boolean","description":"Enables the start webhook for widget-based conversations. When enabled, the webhook is triggered when a user initiates a conversation through your web widget, allowing you to accept or reject widget interactions.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForWidget.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables the start webhook for widget-based conversations. When enabled, the webhook is triggered when a user initiates a conversation through your web widget, allowing you to accept or reject widget interactions.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForWidget.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForWidget","typeLabel":"boolean | null"},"timeout":{"oneOf":[{"type":"number","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the fallback response is used. Controls how long the system waits before proceeding with or rejecting the conversation.","format":"double","default":10,"uniqueKey":"config.startWebhook.oneOf.0.timeout.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the fallback response is used. Controls how long the system waits before proceeding with or rejecting the conversation.","format":"double","default":10,"uniqueKey":"config.startWebhook.oneOf.0.timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.timeout","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook","typeLabel":"object | null"},"tools":{"oneOf":[{"type":"array","items":{"required":["description","name","schema","webhook"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Tool name identifier. Used by the language model to reference this tool when deciding which function to call.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].name","typeLabel":"string"},"schema":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].schema.additionalProperties","typeLabel":"any"},"description":"JSON Schema defining the tool's input parameters. Describes what arguments the tool accepts, their types, and which parameters are required. The language model uses this schema to generate valid function calls.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].schema","typeLabel":"object"},"webhook":{"type":"object","description":"Webhook endpoint to call when the tool is invoked. The system sends a POST request with the tool parameters to this URL and returns the response to the language model.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers","typeLabel":"object | null"},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"],"isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.httpMethod","typeLabel":"enum\u003cstring>"},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams","typeLabel":"object | null"},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.0.template","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.0","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook","typeLabel":"object"},"description":{"minLength":1,"type":"string","description":"Tool description explaining what the tool does and when to use it. The language model uses this description to decide whether this tool is appropriate for the current conversation context.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].description","typeLabel":"string"},"fallBackResult":{"oneOf":[{"description":"Fallback result to return if the webhook call fails. When specified, the agent continues the conversation using this result instead of reporting an error to the user.","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].fallBackResult.oneOf.0","typeLabel":"any"},{"description":"Fallback result to return if the webhook call fails. When specified, the agent continues the conversation using this result instead of reporting an error to the user.","default":null,"type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].fallBackResult.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].fallBackResult","typeLabel":"any | null"},"timeoutSeconds":{"oneOf":[{"type":"integer","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the call is considered failed and the fallback result is used if available.","format":"int32","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].timeoutSeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the call is considered failed and the fallback result is used if available.","format":"int32","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].timeoutSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].timeoutSeconds","typeLabel":"integer\u003cint32> | null"},"retryCount":{"oneOf":[{"type":"integer","description":"Number of retry attempts if the webhook call fails. Helps handle transient network errors or temporary service unavailability.","format":"int32","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].retryCount.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Number of retry attempts if the webhook call fails. Helps handle transient network errors or temporary service unavailability.","format":"int32","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].retryCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].retryCount","typeLabel":"integer\u003cint32> | null"},"isLongRunning":{"oneOf":[{"type":"boolean","description":"Whether this tool is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the webhook answers. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].isLongRunning.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether this tool is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the webhook answers. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].isLongRunning.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].isLongRunning","typeLabel":"boolean | null"},"longRunningAdditionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the operation usually takes. Only used when IsLongRunning is enabled and enhanced tooling is disabled.","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].longRunningAdditionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Extra guidance for the agent about this slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the operation usually takes. Only used when IsLongRunning is enabled and enhanced tooling is disabled.","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].longRunningAdditionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].longRunningAdditionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"description":"Custom tool definition for language model function calling. Describes a function that the agent can invoke during conversations to perform actions or retrieve information through webhook calls.","uniqueKey":"config.tools.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Custom tools available to the agent during conversations. Each tool defines a function the agent can call with parameters and expected output. The agent will use these tools when needed to accomplish tasks beyond conversation.","default":[],"uniqueKey":"config.tools.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","name","schema","webhook"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Tool name identifier. Used by the language model to reference this tool when deciding which function to call."},"schema":{"type":"object","additionalProperties":{"oneOf":[{}]},"description":"JSON Schema defining the tool's input parameters. Describes what arguments the tool accepts, their types, and which parameters are required. The language model uses this schema to generate valid function calls."},"webhook":{"type":"object","description":"Webhook endpoint to call when the tool is invoked. The system sends a POST request with the tool parameters to this URL and returns the response to the language model.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint."},{"type":"null","additionalProperties":{"type":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint."}]},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"]},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands."},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands."}]},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain."}},"additionalProperties":false},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result."},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result."}]}},"additionalProperties":false},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name."},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name."}]}},"additionalProperties":false},{"type":"null"}]}},"additionalProperties":false},{"type":"null"}]}},"additionalProperties":false},"description":{"minLength":1,"type":"string","description":"Tool description explaining what the tool does and when to use it. The language model uses this description to decide whether this tool is appropriate for the current conversation context."},"fallBackResult":{"oneOf":[{"description":"Fallback result to return if the webhook call fails. When specified, the agent continues the conversation using this result instead of reporting an error to the user.","default":null},{"description":"Fallback result to return if the webhook call fails. When specified, the agent continues the conversation using this result instead of reporting an error to the user.","default":null,"type":"null"}]},"timeoutSeconds":{"oneOf":[{"type":"integer","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the call is considered failed and the fallback result is used if available.","format":"int32","default":null},{"type":"null","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the call is considered failed and the fallback result is used if available.","format":"int32","default":null}]},"retryCount":{"oneOf":[{"type":"integer","description":"Number of retry attempts if the webhook call fails. Helps handle transient network errors or temporary service unavailability.","format":"int32","default":null},{"type":"null","description":"Number of retry attempts if the webhook call fails. Helps handle transient network errors or temporary service unavailability.","format":"int32","default":null}]},"isLongRunning":{"oneOf":[{"type":"boolean","description":"Whether this tool is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the webhook answers. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false},{"type":"null","description":"Whether this tool is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the webhook answers. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false}]},"longRunningAdditionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the operation usually takes. Only used when IsLongRunning is enabled and enhanced tooling is disabled.","default":null},{"type":"null","description":"Extra guidance for the agent about this slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the operation usually takes. Only used when IsLongRunning is enabled and enhanced tooling is disabled.","default":null}]}},"additionalProperties":false,"description":"Custom tool definition for language model function calling. Describes a function that the agent can invoke during conversations to perform actions or retrieve information through webhook calls."},"description":"Custom tools available to the agent during conversations. Each tool defines a function the agent can call with parameters and expected output. The agent will use these tools when needed to accomplish tasks beyond conversation.","default":[],"uniqueKey":"config.tools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools","typeLabel":"object[] | null"},"builtInTools":{"oneOf":[{"type":"array","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Built-in tool name. Currently supported tool is \"finishTheConversation\" for ending calls gracefully.","isRequired":true,"uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX].name","typeLabel":"string"},"additionalInstructions":{"oneOf":[{"type":"string","description":"Additional instructions for when and how to use this tool. Guides the agent on the appropriate circumstances to invoke the tool during conversations.","default":null,"uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX].additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Additional instructions for when and how to use this tool. Guides the agent on the appropriate circumstances to invoke the tool during conversations.","default":null,"uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX].additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX].additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"description":"Configuration for a built-in tool with custom usage instructions. Built-in tools are pre-defined system tools that don't require custom implementation, and this configuration allows you to specify when and how the agent should use them.","uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Built-in tools configuration with additional instructions for when and how to use them. Currently includes \"finishTheConversation\" tool with custom instructions that guide the agent on when to end calls gracefully. These are pre-defined system tools with configurable usage instructions.","default":[],"uniqueKey":"config.builtInTools.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Built-in tool name. Currently supported tool is \"finishTheConversation\" for ending calls gracefully."},"additionalInstructions":{"oneOf":[{"type":"string","description":"Additional instructions for when and how to use this tool. Guides the agent on the appropriate circumstances to invoke the tool during conversations.","default":null},{"type":"null","description":"Additional instructions for when and how to use this tool. Guides the agent on the appropriate circumstances to invoke the tool during conversations.","default":null}]}},"additionalProperties":false,"description":"Configuration for a built-in tool with custom usage instructions. Built-in tools are pre-defined system tools that don't require custom implementation, and this configuration allows you to specify when and how the agent should use them."},"description":"Built-in tools configuration with additional instructions for when and how to use them. Currently includes \"finishTheConversation\" tool with custom instructions that guide the agent on when to end calls gracefully. These are pre-defined system tools with configurable usage instructions.","default":[],"uniqueKey":"config.builtInTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.builtInTools","typeLabel":"object[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config","typeLabel":"object"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Whether the agent is enabled and can handle calls. When disabled, the agent cannot make outbound calls or handle inbound routing.","default":true,"uniqueKey":"isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether the agent is enabled and can handle calls. When disabled, the agent cannot make outbound calls or handle inbound routing.","default":true,"uniqueKey":"isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"isEnabled","typeLabel":"boolean | null"},"description":{"oneOf":[{"type":"string","description":"Optional description explaining the agent's purpose, behavior, or use case. Useful for documentation and team collaboration to understand what this agent is designed to do.","default":null,"uniqueKey":"description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional description explaining the agent's purpose, behavior, or use case. Useful for documentation and team collaboration to understand what this agent is designed to do.","default":null,"uniqueKey":"description.oneOf.1","typeLabel":"null"}],"uniqueKey":"description","typeLabel":"string | null"},"additionalData":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalData.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Default data for variable interpolation in agent prompts. Values can be referenced in prompts using {{variableName}} syntax. These serve as default values for the agent and can be overridden on a per-call basis when enqueueing calls.","uniqueKey":"additionalData.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalData.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Default data for variable interpolation in agent prompts. Values can be referenced in prompts using {{variableName}} syntax. These serve as default values for the agent and can be overridden on a per-call basis when enqueueing calls.","uniqueKey":"additionalData.oneOf.1","typeLabel":"null"}],"uniqueKey":"additionalData","typeLabel":"object | null"},"schedule":{"oneOf":[{"type":"object","description":"Time-based schedule defining when the agent can make outbound calls. Specifies available time slots for each day of the week and the timezone for schedule interpretation. Scheduled calls will only be placed during these time windows.","default":{"timezone":"UTC","mon":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"tue":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"wed":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"thu":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"fri":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"sat":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"sun":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}]},"required":["timezone"],"properties":{"timezone":{"minLength":1,"type":"string","description":"Timezone identifier for interpreting the schedule times. Uses IANA timezone database names like \"America/New_York\", \"Europe/London\", or \"UTC\". All time slots are interpreted in this timezone.","isRequired":true,"uniqueKey":"schedule.oneOf.0.timezone","typeLabel":"string"},"mon":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Monday. Each slot defines a start and end time when outbound calls can be made. Multiple non-overlapping slots can be specified for the same day.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.mon.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Monday. Each slot defines a start and end time when outbound calls can be made. Multiple non-overlapping slots can be specified for the same day.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.mon.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.mon","typeLabel":"object[] | null"},"tue":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Tuesday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.tue.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Tuesday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.tue.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.tue","typeLabel":"object[] | null"},"wed":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Wednesday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.wed.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Wednesday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.wed.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.wed","typeLabel":"object[] | null"},"thu":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Thursday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.thu.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Thursday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.thu.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.thu","typeLabel":"object[] | null"},"fri":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Friday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.fri.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Friday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.fri.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.fri","typeLabel":"object[] | null"},"sat":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Saturday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.sat.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Saturday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.sat.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.sat","typeLabel":"object[] | null"},"sun":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Sunday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.sun.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Sunday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.sun.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.sun","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"schedule.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"schedule.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule","typeLabel":"object | null"},"inboundSipConfig":{"oneOf":[{"type":"object","description":"Configuration for routing inbound calls to this agent. To configure phone number routing for incoming calls, use the SIP phone numbers API to assign a phone number to this agent instead of using this field directly.","properties":{"phoneNumber":{"oneOf":[{"maxLength":255,"type":"string","description":"Phone number that should route incoming calls to this agent. When specified, incoming calls to this phone number will be handled by this agent. The phone number must be configured in your SIP phone numbers.","default":null,"uniqueKey":"inboundSipConfig.oneOf.0.phoneNumber.oneOf.0","typeLabel":"string"},{"maxLength":255,"type":"null","description":"Phone number that should route incoming calls to this agent. When specified, incoming calls to this phone number will be handled by this agent. The phone number must be configured in your SIP phone numbers.","default":null,"uniqueKey":"inboundSipConfig.oneOf.0.phoneNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"inboundSipConfig.oneOf.0.phoneNumber","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"inboundSipConfig.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"inboundSipConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"inboundSipConfig","typeLabel":"object | null"},"expectedVersion":{"oneOf":[{"type":"integer","description":"Expected version number for optimistic concurrency control. If provided and does not match the current server version, the update will be rejected with a 409 Conflict response containing the current server state. Omit to skip version checking (not recommended for UI clients).","format":"int32","default":null,"uniqueKey":"expectedVersion.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Expected version number for optimistic concurrency control. If provided and does not match the current server version, the update will be rejected with a 409 Conflict response containing the current server state. Omit to skip version checking (not recommended for UI clients).","format":"int32","default":null,"uniqueKey":"expectedVersion.oneOf.1","typeLabel":"null"}],"uniqueKey":"expectedVersion","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","config":{"primaryLanguage":"\u003cstring>","ttsConfig":{"voiceId":"\u003cstring>","vendor":"\u003cstring>","model":null,"speed":1,"speedAdjustment":{"version":"v1","strategy":"OnRequest"},"vendorSpecificOptions":{},"responsiveness":null,"interruptionSensitivity":null,"pronunciationDictionary":{"id":"\u003cstring>","hash":"\u003cstring>"}},"llmConfig":{"model":"\u003cstring>","vendor":"\u003cstring>","prompt":"\u003cstring>","apiKey":null,"endpoint":null,"options":{"temperature":null,"maxTokens":null,"topP":null,"frequencyPenalty":null,"presencePenalty":null,"stop":null,"trailingPrompt":null,"reasoningMode":null,"maxRetries":null,"reasoningEffort":null},"vendorSpecificOptions":{},"toolScopes":null,"validateToolArguments":null,"enhancedTooling":{"isEnabled":false,"model":null}},"sttConfig":{"version":"v1","vendor":"Auto","vendorSpecificOptions":{}},"outboundSipConfig":{"server":"\u003cstring>","authUser":"\u003cstring>","domain":null,"password":null,"fromUser":null,"transport":"udp","cpsLimit":null,"cpsKey":null,"displayName":null},"resultWebhook":{"url":"\u003cstring>","headers":{},"customSettings":{"queryParams":{},"bodyFormat":{"template":"\u003cstring>"}}},"features":{"version":"v1","postCallAnalysis":[],"talkFirst":{"version":"v1","delay":1,"isEnabled":false,"interruptible":true},"maxDuration":{"version":"v1","maxDurationSeconds":3600,"maxDurationInTransferSeconds":7200,"isEnabled":true},"ivrDetection":{"version":"v1","isEnabled":true,"enabledForChat":false,"enabledForInbound":false,"enabledForOutbound":true,"enabledForWebCall":false,"ivrNavigation":false},"ambientNoise":{"version":"v1","isEnabled":false,"ambientNoiseLevel":0.1},"languageSwitching":{"version":"v1","isEnabled":true},"fillers":{"version":"v1","isEnabled":true,"strategy":{"type":"static","texts":["um"]}},"backchannel":{"version":"v1","isEnabled":false},"turnTaking":{"version":"v1","vad":"asap_v2","vadFallback":"asap_v2"},"silenceManagement":{"version":"v1","isEnabled":true,"maxReminderAttempts":2,"reminderSilenceThresholdSeconds":5,"endWhenReminderLimitExceeded":true},"preConversationMedia":{"version":"v1","isEnabled":false,"enabledForInbound":false,"enabledForOutbound":false,"enabledForWebCall":false},"noiseSuppression":{"version":"v1","isEnabled":false,"type":"none","noiseSuppressionLevel":75,"recordWriteStrategy":"raw"}},"mcpConnections":[],"startWebhook":{"webhook":{"url":"\u003cstring>","headers":{},"customSettings":{"queryParams":{},"bodyFormat":{"template":"\u003cstring>"}}},"fallbackResponse":{"accept":false,"reasonMessage":"Webhook for started webhook failed"},"isEnabledForInbound":false,"isEnabledForOutbound":false,"isEnabledForWidget":false,"timeout":10},"tools":[],"builtInTools":[]},"isEnabled":true,"description":null,"additionalData":{},"schedule":{"timezone":"UTC","mon":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"tue":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"wed":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"thu":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"fri":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"sat":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"sun":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}]},"inboundSipConfig":{"phoneNumber":null},"expectedVersion":null}}},"exampleType":"generated"},"application/*+json":{"schema":{"type":"object","description":"Request to create or update an agent with full configuration including name, description, behavior settings, call schedule, and inbound routing. Contains all agent properties such as enabled status, display name, optional description, complete agent configuration (TTS, LLM, STT, outbound SIP for making calls, webhooks, features, MCP connections, tools), default prompt variables in AdditionalData, time-based schedule for when outbound calls can be made, and inbound call routing configuration.","required":["config","name"],"properties":{"name":{"maxLength":100,"minLength":1,"type":"string","description":"Display name for the agent. Used to identify the agent in the UI, logs, and API responses.","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"config":{"type":"object","description":"Complete configuration for the agent's behavior including voice settings (TTS), language model (LLM), speech recognition (STT), outbound SIP configuration for making calls, webhooks for event notifications, features like RAG and transfers, MCP connections for external services, and custom tools. This defines how the agent will interact during conversations and what capabilities it has.","required":["llmConfig","primaryLanguage","ttsConfig"],"properties":{"primaryLanguage":{"minLength":1,"type":"string","description":"Primary language for the agent's conversations. Uses language codes like \"en-US\", \"es-ES\", \"fr-FR\". This determines the default language for speech synthesis and recognition.","isRequired":true,"uniqueKey":"config.primaryLanguage","typeLabel":"string"},"ttsConfig":{"type":"object","description":"Text-to-speech configuration controlling how the agent's voice sounds. Includes voice provider selection, voice ID, speed, stability, and pronunciation dictionary settings. Defines the agent's vocal characteristics during conversations.","required":["vendor","voiceId"],"properties":{"voiceId":{"minLength":1,"type":"string","description":"Voice identifier from the selected vendor. Specifies which voice the agent uses for speech synthesis. Each vendor has different voice IDs representing distinct voice characteristics like gender, accent, and speaking style.","isRequired":true,"uniqueKey":"config.ttsConfig.voiceId","typeLabel":"string"},"vendor":{"minLength":1,"type":"string","description":"Text-to-speech vendor providing the voice synthesis service. Identifies which TTS provider to use such as ElevenLabs, Cartesia, Dasha, Inworld, Lmnt, or Google. Different vendors offer different voice qualities, latency characteristics, and pricing.","isRequired":true,"uniqueKey":"config.ttsConfig.vendor","typeLabel":"string"},"model":{"oneOf":[{"type":"string","description":"TTS model identifier for vendors that support multiple model versions. Allows selecting specific synthesis models or quality tiers when available from the vendor.","default":null,"uniqueKey":"config.ttsConfig.model.oneOf.0","typeLabel":"string"},{"type":"null","description":"TTS model identifier for vendors that support multiple model versions. Allows selecting specific synthesis models or quality tiers when available from the vendor.","default":null,"uniqueKey":"config.ttsConfig.model.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.model","typeLabel":"string | null"},"speed":{"oneOf":[{"type":"number","description":"Speech speed multiplier controlling how fast the agent speaks. Values above 1.0 increase speaking rate, values below 1.0 decrease it. Affects the overall pace of conversation and can be adjusted to match user preferences or content requirements.","format":"double","default":1,"uniqueKey":"config.ttsConfig.speed.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Speech speed multiplier controlling how fast the agent speaks. Values above 1.0 increase speaking rate, values below 1.0 decrease it. Affects the overall pace of conversation and can be adjusted to match user preferences or content requirements.","format":"double","default":1,"uniqueKey":"config.ttsConfig.speed.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.speed","typeLabel":"number\u003cdouble> | null"},"speedAdjustment":{"oneOf":[{"type":"object","description":"Speed adjustment settings controlling whether users can request the agent to speak faster or slower during conversations. Allows dynamic speed changes based on user feedback.","default":{"version":"v1","strategy":"OnRequest"},"required":["strategy"],"properties":{"strategy":{"type":"string","description":"Speed adjustment strategy determining when and how the agent can change its speaking rate. Controls whether speed adjustments are disabled entirely or enabled on user request.","enum":["Disabled","OnRequest"],"isRequired":true,"uniqueKey":"config.ttsConfig.speedAdjustment.oneOf.0.strategy","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"config.ttsConfig.speedAdjustment.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.ttsConfig.speedAdjustment.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.speedAdjustment","typeLabel":"object | null"},"vendorSpecificOptions":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.ttsConfig.vendorSpecificOptions.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Vendor-specific TTS options that are unique to particular speech synthesis providers. Allows passing custom parameters for advanced voice configuration that isn't covered by standard settings.","uniqueKey":"config.ttsConfig.vendorSpecificOptions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.ttsConfig.vendorSpecificOptions.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Vendor-specific TTS options that are unique to particular speech synthesis providers. Allows passing custom parameters for advanced voice configuration that isn't covered by standard settings.","uniqueKey":"config.ttsConfig.vendorSpecificOptions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.vendorSpecificOptions","typeLabel":"object | null"},"responsiveness":{"oneOf":[{"maximum":1,"minimum":0,"type":"number","description":"Response timing control determining how quickly the agent begins speaking after the user finishes. Range is 0 to 1, where higher values make the agent respond faster and lower values add more deliberate pauses. Affects the conversational rhythm and turn-taking behavior.","format":"double","default":null,"uniqueKey":"config.ttsConfig.responsiveness.oneOf.0","typeLabel":"number\u003cdouble>"},{"maximum":1,"minimum":0,"type":"null","description":"Response timing control determining how quickly the agent begins speaking after the user finishes. Range is 0 to 1, where higher values make the agent respond faster and lower values add more deliberate pauses. Affects the conversational rhythm and turn-taking behavior.","format":"double","default":null,"uniqueKey":"config.ttsConfig.responsiveness.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.responsiveness","typeLabel":"number\u003cdouble> | null"},"interruptionSensitivity":{"oneOf":[{"maximum":1,"minimum":0,"type":"number","description":"Controls how easily the user can interrupt the agent while it is speaking. Range is 0 to 1, where higher values make interruptions easier to trigger and lower values require more user speech before the agent stops. A value of 0 makes the agent non-interruptible by normal speech. When unset, the agent uses its default interruptible behavior (equivalent to 1).","format":"double","default":null,"uniqueKey":"config.ttsConfig.interruptionSensitivity.oneOf.0","typeLabel":"number\u003cdouble>"},{"maximum":1,"minimum":0,"type":"null","description":"Controls how easily the user can interrupt the agent while it is speaking. Range is 0 to 1, where higher values make interruptions easier to trigger and lower values require more user speech before the agent stops. A value of 0 makes the agent non-interruptible by normal speech. When unset, the agent uses its default interruptible behavior (equivalent to 1).","format":"double","default":null,"uniqueKey":"config.ttsConfig.interruptionSensitivity.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.interruptionSensitivity","typeLabel":"number\u003cdouble> | null"},"pronunciationDictionary":{"oneOf":[{"type":"object","description":"Reference to a pronunciation dictionary for customizing how specific words or phrases are pronounced. Allows correcting mispronunciations, defining custom pronunciations for brand names, or adjusting phonetic rendering for domain-specific terminology.","required":["hash","id"],"properties":{"id":{"minLength":1,"type":"string","description":"Unique identifier of the pronunciation dictionary to use. References a dictionary that has been created and uploaded to the system containing custom phonetic rules and pronunciation mappings.","isRequired":true,"uniqueKey":"config.ttsConfig.pronunciationDictionary.oneOf.0.id","typeLabel":"string"},"hash":{"minLength":1,"type":"string","description":"Content hash of the pronunciation dictionary for version tracking and cache invalidation. Ensures the correct version of the dictionary is applied and allows detecting when dictionary content has been updated.","isRequired":true,"uniqueKey":"config.ttsConfig.pronunciationDictionary.oneOf.0.hash","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.ttsConfig.pronunciationDictionary.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.ttsConfig.pronunciationDictionary.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.pronunciationDictionary","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.ttsConfig","typeLabel":"object"},"llmConfig":{"type":"object","description":"Language model configuration defining the agent's intelligence and conversation behavior. Includes model selection, system prompts, temperature, token limits, and conversation flow settings. Controls how the agent understands and responds to user input.","required":["model","prompt","vendor"],"properties":{"model":{"minLength":1,"type":"string","description":"Language model identifier. Specifies which model to use from the configured vendor.","isRequired":true,"uniqueKey":"config.llmConfig.model","typeLabel":"string"},"vendor":{"minLength":1,"type":"string","description":"Model vendor or provider identifier.","isRequired":true,"uniqueKey":"config.llmConfig.vendor","typeLabel":"string"},"prompt":{"minLength":1,"type":"string","description":"System prompt that defines the agent's personality, role, and behavior instructions. This prompt guides how the agent responds and interacts during conversations. Can reference variables from AdditionalData using {{variableName}} syntax.","isRequired":true,"uniqueKey":"config.llmConfig.prompt","typeLabel":"string"},"apiKey":{"oneOf":[{"type":"string","description":"API key for authenticating with the language model provider. Used to authorize requests to the vendor's API.","default":null,"uniqueKey":"config.llmConfig.apiKey.oneOf.0","typeLabel":"string"},{"type":"null","description":"API key for authenticating with the language model provider. Used to authorize requests to the vendor's API.","default":null,"uniqueKey":"config.llmConfig.apiKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.apiKey","typeLabel":"string | null"},"endpoint":{"oneOf":[{"type":"string","description":"Custom API endpoint URL for the language model. Use when connecting to self-hosted models or alternative API gateways instead of the default vendor endpoint.","default":null,"uniqueKey":"config.llmConfig.endpoint.oneOf.0","typeLabel":"string"},{"type":"null","description":"Custom API endpoint URL for the language model. Use when connecting to self-hosted models or alternative API gateways instead of the default vendor endpoint.","default":null,"uniqueKey":"config.llmConfig.endpoint.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.endpoint","typeLabel":"string | null"},"options":{"oneOf":[{"type":"object","description":"Advanced language model parameters including temperature, max tokens, top P, frequency/presence penalties, stop sequences, trailing prompt, reasoning mode, and retry settings. Controls the model's creativity, response length, and behavior characteristics.","properties":{"temperature":{"oneOf":[{"type":"number","description":"Temperature controls randomness in responses. Higher values (e.g., 0.8-1.0) make output more creative and varied, while lower values (e.g., 0.1-0.3) make it more focused and deterministic. Range is typically 0.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.temperature.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Temperature controls randomness in responses. Higher values (e.g., 0.8-1.0) make output more creative and varied, while lower values (e.g., 0.1-0.3) make it more focused and deterministic. Range is typically 0.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.temperature.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.temperature","typeLabel":"number\u003cdouble> | null"},"maxTokens":{"oneOf":[{"type":"integer","description":"Maximum number of tokens the model can generate in a response. Limits the length of the agent's replies to control costs and response times.","format":"int32","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.maxTokens.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum number of tokens the model can generate in a response. Limits the length of the agent's replies to control costs and response times.","format":"int32","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.maxTokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.maxTokens","typeLabel":"integer\u003cint32> | null"},"topP":{"oneOf":[{"type":"number","description":"Top P (nucleus sampling) controls diversity by considering only the most probable tokens whose cumulative probability reaches this threshold. Range is 0.0 to 1.0, where lower values make responses more focused.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.topP.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Top P (nucleus sampling) controls diversity by considering only the most probable tokens whose cumulative probability reaches this threshold. Range is 0.0 to 1.0, where lower values make responses more focused.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.topP.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.topP","typeLabel":"number\u003cdouble> | null"},"frequencyPenalty":{"oneOf":[{"type":"number","description":"Frequency penalty reduces repetition of tokens based on how often they've appeared in the response. Higher values (e.g., 0.5-1.0) discourage repetition more strongly. Range is typically -2.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.frequencyPenalty.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Frequency penalty reduces repetition of tokens based on how often they've appeared in the response. Higher values (e.g., 0.5-1.0) discourage repetition more strongly. Range is typically -2.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.frequencyPenalty.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.frequencyPenalty","typeLabel":"number\u003cdouble> | null"},"presencePenalty":{"oneOf":[{"type":"number","description":"Presence penalty reduces repetition by penalizing tokens that have already appeared, regardless of frequency. Encourages the model to discuss new topics. Range is typically -2.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.presencePenalty.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Presence penalty reduces repetition by penalizing tokens that have already appeared, regardless of frequency. Encourages the model to discuss new topics. Range is typically -2.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.presencePenalty.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.presencePenalty","typeLabel":"number\u003cdouble> | null"},"stop":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.llmConfig.options.oneOf.0.stop.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Stop sequences that cause the model to stop generating tokens. When the model encounters any of these strings, it will immediately stop generating further output.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.stop.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Stop sequences that cause the model to stop generating tokens. When the model encounters any of these strings, it will immediately stop generating further output.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.stop.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.stop","typeLabel":"string[] | null"},"trailingPrompt":{"oneOf":[{"type":"string","description":"Trailing prompt appended to the conversation context before the model generates a response. Useful for providing last-minute instructions or context.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.trailingPrompt.oneOf.0","typeLabel":"string"},{"type":"null","description":"Trailing prompt appended to the conversation context before the model generates a response. Useful for providing last-minute instructions or context.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.trailingPrompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.trailingPrompt","typeLabel":"string | null"},"reasoningMode":{"oneOf":[{"type":"string","description":"Reasoning mode for models that support structured thinking. Controls how the model approaches problem-solving and response generation.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningMode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Reasoning mode for models that support structured thinking. Controls how the model approaches problem-solving and response generation.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningMode.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningMode","typeLabel":"string | null"},"maxRetries":{"oneOf":[{"type":"integer","description":"Maximum number of retry attempts when API calls fail. Helps handle transient errors and rate limiting.","format":"int32","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.maxRetries.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum number of retry attempts when API calls fail. Helps handle transient errors and rate limiting.","format":"int32","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.maxRetries.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.maxRetries","typeLabel":"integer\u003cint32> | null"},"reasoningEffort":{"oneOf":[{"type":"string","description":"Reasoning effort level for models that support configurable thinking depth. Controls how much computational effort the model applies to reasoning through complex problems.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningEffort.oneOf.0","typeLabel":"string"},{"type":"null","description":"Reasoning effort level for models that support configurable thinking depth. Controls how much computational effort the model applies to reasoning through complex problems.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningEffort.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningEffort","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.llmConfig.options.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.llmConfig.options.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options","typeLabel":"object | null"},"vendorSpecificOptions":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.llmConfig.vendorSpecificOptions.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Vendor-specific options and parameters that are unique to particular LLM providers. Allows passing custom configuration that isn't covered by standard options.","uniqueKey":"config.llmConfig.vendorSpecificOptions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.llmConfig.vendorSpecificOptions.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Vendor-specific options and parameters that are unique to particular LLM providers. Allows passing custom configuration that isn't covered by standard options.","uniqueKey":"config.llmConfig.vendorSpecificOptions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.vendorSpecificOptions","typeLabel":"object | null"},"toolScopes":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.llmConfig.toolScopes.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Tool scope restrictions for limiting which tools the language model can access. When specified, the model can only use tools matching these scope identifiers. If not specified, all configured tools are available.","default":null,"uniqueKey":"config.llmConfig.toolScopes.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Tool scope restrictions for limiting which tools the language model can access. When specified, the model can only use tools matching these scope identifiers. If not specified, all configured tools are available.","default":null,"uniqueKey":"config.llmConfig.toolScopes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.toolScopes","typeLabel":"string[] | null"},"validateToolArguments":{"oneOf":[{"type":"boolean","description":"Opts in to JSON Schema validation of custom webhook tool arguments before the webhook is called. False or omitted preserves existing behavior. Use minLength in string schemas to forbid empty strings.","default":null,"uniqueKey":"config.llmConfig.validateToolArguments.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opts in to JSON Schema validation of custom webhook tool arguments before the webhook is called. False or omitted preserves existing behavior. Use minLength in string schemas to forbid empty strings.","default":null,"uniqueKey":"config.llmConfig.validateToolArguments.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.validateToolArguments","typeLabel":"boolean | null"},"enhancedTooling":{"oneOf":[{"type":"object","description":"Enhanced tooling: more accurate tool calling at a higher LLM usage cost, optionally on a different OpenAI model. Disabled when not set. When enabled, the slow marks on custom tools and MCP connections (IsLongRunning, LongRunningTools) are not used.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Whether enhanced tooling is enabled. Disabled by default: the agent then behaves exactly as before.","default":false,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether enhanced tooling is enabled. Disabled by default: the agent then behaves exactly as before.","default":false,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.isEnabled","typeLabel":"boolean | null"},"model":{"oneOf":[{"type":"string","description":"OpenAI model used for tool calling when enhanced tooling is enabled. Leave empty to use the platform's default model for tool calling. Accepted values: gpt-6-luna, gpt-6-sol, gpt-5.6-luna, gpt-5.6-terra, gpt-4.1-mini, gpt-4.1.","default":null,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.model.oneOf.0","typeLabel":"string"},{"type":"null","description":"OpenAI model used for tool calling when enhanced tooling is enabled. Leave empty to use the platform's default model for tool calling. Accepted values: gpt-6-luna, gpt-6-sol, gpt-5.6-luna, gpt-5.6-terra, gpt-4.1-mini, gpt-4.1.","default":null,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.model.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.model","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.llmConfig.enhancedTooling.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.enhancedTooling","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.llmConfig","typeLabel":"object"},"sttConfig":{"oneOf":[{"type":"object","description":"Speech-to-text configuration for converting user speech to text. Includes provider selection and recognition settings. Controls how the agent understands spoken input from users.","default":{"version":"v1","vendor":"Auto","vendorSpecificOptions":{}},"properties":{"vendor":{"type":"string","description":"Speech recognition vendor to use for transcribing user speech. Can be a specific provider like Deepgram or Microsoft, or Auto to let the system choose the best option automatically.","default":"Auto","enum":["Deepgram","Microsoft","Auto"],"uniqueKey":"config.sttConfig.oneOf.0.vendor","typeLabel":"enum\u003cstring>"},"vendorSpecificOptions":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Vendor-specific STT options that are unique to particular speech recognition providers. Allows passing custom parameters for advanced recognition configuration such as profanity filtering, punctuation, or language-specific settings.","uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Vendor-specific STT options that are unique to particular speech recognition providers. Allows passing custom parameters for advanced recognition configuration such as profanity filtering, punctuation, or language-specific settings.","uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions","typeLabel":"object | null"},"keywords":{"oneOf":[{"type":"array","items":{"required":["keyword"],"type":"object","properties":{"keyword":{"minLength":1,"type":"string","description":"Word or phrase to prioritize during speech recognition. The STT engine gives preference to recognizing this keyword when transcribing user speech, improving accuracy for domain-specific vocabulary.","isRequired":true,"uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX].keyword","typeLabel":"string"},"weight":{"oneOf":[{"type":"number","description":"Optional weight controlling how strongly the keyword should be prioritized. Higher weights increase the likelihood of the keyword being recognized over similar-sounding alternatives. When not specified, a default prioritization is applied.","format":"double","uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX].weight.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Optional weight controlling how strongly the keyword should be prioritized. Higher weights increase the likelihood of the keyword being recognized over similar-sounding alternatives. When not specified, a default prioritization is applied.","format":"double","uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX].weight.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX].weight","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"description":"Speech recognition keyword hint for improving transcription accuracy of specific words or phrases. Tells the STT engine to prioritize recognition of domain-specific terminology, product names, technical jargon, or proper nouns that may not be in standard dictionaries. Helps reduce misrecognition of important context-specific vocabulary.","uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of keywords or phrases that the speech recognition should prioritize or recognize more accurately. Helps improve transcription accuracy for domain-specific terminology, product names, or technical jargon that may not be in standard dictionaries. Each keyword can have an optional weight to control recognition priority.","default":null,"uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["keyword"],"type":"object","properties":{"keyword":{"minLength":1,"type":"string","description":"Word or phrase to prioritize during speech recognition. The STT engine gives preference to recognizing this keyword when transcribing user speech, improving accuracy for domain-specific vocabulary."},"weight":{"oneOf":[{"type":"number","description":"Optional weight controlling how strongly the keyword should be prioritized. Higher weights increase the likelihood of the keyword being recognized over similar-sounding alternatives. When not specified, a default prioritization is applied.","format":"double"},{"type":"null","description":"Optional weight controlling how strongly the keyword should be prioritized. Higher weights increase the likelihood of the keyword being recognized over similar-sounding alternatives. When not specified, a default prioritization is applied.","format":"double"}]}},"additionalProperties":false,"description":"Speech recognition keyword hint for improving transcription accuracy of specific words or phrases. Tells the STT engine to prioritize recognition of domain-specific terminology, product names, technical jargon, or proper nouns that may not be in standard dictionaries. Helps reduce misrecognition of important context-specific vocabulary."},"description":"List of keywords or phrases that the speech recognition should prioritize or recognize more accurately. Helps improve transcription accuracy for domain-specific terminology, product names, or technical jargon that may not be in standard dictionaries. Each keyword can have an optional weight to control recognition priority.","default":null,"uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig.oneOf.0.keywords","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.sttConfig.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.sttConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig","typeLabel":"object | null"},"outboundSipConfig":{"oneOf":[{"type":"object","description":"SIP configuration for making outbound calls. Includes phone number selection and trunk credentials. Required when the agent needs to initiate calls to phone numbers.","required":["authUser","server"],"properties":{"server":{"minLength":1,"type":"string","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Format is hostname:port (e.g., \"sip.example.com:5060\").","isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.0.server","typeLabel":"string"},"authUser":{"minLength":1,"type":"string","description":"Authentication user identifier as defined in RFC 3261. Different providers may call this \"username\", \"account\", \"user ID\", or other names depending on the SIP provider.","isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.0.authUser","typeLabel":"string"},"domain":{"oneOf":[{"type":"string","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.domain.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.domain.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.domain","typeLabel":"string | null"},"password":{"oneOf":[{"type":"string","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.password.oneOf.0","typeLabel":"string"},{"type":"null","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.password.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.password","typeLabel":"string | null"},"fromUser":{"oneOf":[{"type":"string","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.fromUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.fromUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.fromUser","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for SIP communication. Supported values are UDP (default), TCP, or TLS for encrypted connections.","default":"udp","enum":["udp","tcp","tls"],"uniqueKey":"config.outboundSipConfig.oneOf.0.transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.outboundSipConfig.oneOf.0.transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.transport","typeLabel":"enum\u003cstring> | null"},"cpsLimit":{"oneOf":[{"type":"integer","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsLimit.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsLimit.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsLimit","typeLabel":"integer\u003cint32> | null"},"cpsKey":{"oneOf":[{"type":"string","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsKey.oneOf.0","typeLabel":"string"},{"type":"null","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsKey","typeLabel":"string | null"},"displayName":{"oneOf":[{"type":"string","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.displayName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.outboundSipConfig.oneOf.0","typeLabel":"object"},{"type":"object","description":"SIP configuration for making outbound calls. Includes phone number selection and trunk credentials. Required when the agent needs to initiate calls to phone numbers.","required":["phoneNumbers","type"],"properties":{"phoneNumbers":{"type":"array","items":{"required":["phoneNumberId"],"type":"object","properties":{"phoneNumberId":{"type":"string","description":"Unique identifier of the SIP phone number configuration to use for outbound calls. References a phone number configured via the SIP phone numbers API.","format":"uuid","isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.1.phoneNumbers.items.[INDEX].phoneNumberId","typeLabel":"string\u003cuuid>"}},"additionalProperties":false,"description":"Reference to a configured SIP phone number. Contains the phone number ID that points to the full phone number configuration including trunk credentials.","uniqueKey":"config.outboundSipConfig.oneOf.1.phoneNumbers.items.[INDEX]","typeLabel":"object"},"description":"List of phone number references for outbound calling. Currently supports only one phone number in the list. Each reference points to a configured SIP phone number that contains the trunk credentials and settings.","isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.1.phoneNumbers","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"config.outboundSipConfig.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.outboundSipConfig.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig","typeLabel":"object · object · null"},"resultWebhook":{"oneOf":[{"type":"object","description":"Webhook URL to receive call results when conversations complete. The system will send a POST request with conversation outcome, transcript, and metadata to this URL.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri","isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.resultWebhook.oneOf.0.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.resultWebhook.oneOf.0.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.resultWebhook.oneOf.0.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.resultWebhook.oneOf.0.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.headers","typeLabel":"object | null"},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"],"isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.httpMethod","typeLabel":"enum\u003cstring>"},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams","typeLabel":"object | null"},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain.","isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.0.template","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.0","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.resultWebhook.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook","typeLabel":"object | null"},"features":{"oneOf":[{"type":"object","description":"Advanced features for the agent including RAG (knowledge base retrieval), call transfers (warm or cold), ambient background sounds, interruption handling, and recording options. Enables specialized agent capabilities beyond basic conversation.","default":{"version":"v1","postCallAnalysis":[],"talkFirst":{"version":"v1","delay":1,"isEnabled":false,"interruptible":true},"maxDuration":{"version":"v1","maxDurationSeconds":3600,"maxDurationInTransferSeconds":7200,"isEnabled":true},"ivrDetection":{"version":"v1","isEnabled":true,"enabledForChat":false,"enabledForInbound":false,"enabledForOutbound":true,"enabledForWebCall":false,"ivrNavigation":false},"ambientNoise":{"version":"v1","isEnabled":false,"ambientNoiseLevel":0.1},"languageSwitching":{"version":"v1","isEnabled":true},"fillers":{"version":"v1","isEnabled":true,"strategy":{"type":"static","texts":["um"]}},"backchannel":{"version":"v1","isEnabled":false},"turnTaking":{"version":"v1","vad":"asap_v2","vadFallback":"asap_v2"},"silenceManagement":{"version":"v1","isEnabled":true,"maxReminderAttempts":2,"reminderSilenceThresholdSeconds":5,"endWhenReminderLimitExceeded":true},"preConversationMedia":{"version":"v1","isEnabled":false,"enabledForInbound":false,"enabledForOutbound":false,"enabledForWebCall":false},"noiseSuppression":{"version":"v1","isEnabled":false,"type":"none","noiseSuppressionLevel":75,"recordWriteStrategy":"raw"}},"properties":{"transfer":{"oneOf":[{"type":"object","description":"Call transfer configuration. Supports warm transfer (agent stays on call), cold transfer (agent hangs up), or HTTP transfer (external API handles transfer). Enables the agent to transfer calls to other numbers or systems.","required":["endpointDestination","type","description"],"properties":{"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.description","typeLabel":"string"},"endpointDestination":{"minLength":1,"type":"string","description":"Transfer destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:1234567890@example.com\". The call is redirected to this endpoint using SIP REFER when the transfer is initiated.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.endpointDestination","typeLabel":"string"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.isEnabled","typeLabel":"boolean | null"},"sipUui":{"oneOf":[{"type":"string","description":"Optional User-to-User payload, encoded as RFC 7433 hex. Supports {{variableName}}\nfrom call additionalData and {{sip_endpoint}} for the caller.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipUui.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional User-to-User payload, encoded as RFC 7433 hex. Supports {{variableName}}\nfrom call additionalData and {{sip_endpoint}} for the caller.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipUui.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipUui","typeLabel":"string | null"},"sipHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers embedded in the Refer-To URI. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers embedded in the Refer-To URI. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders","typeLabel":"object | null"},"transferRoutes":{"oneOf":[{"type":"array","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].name","typeLabel":"string"},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX].endpoint","typeLabel":"string"}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX]","typeLabel":"object"},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations","typeLabel":"object[]"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Optional named transfer routes allowing the language model to choose between multiple destinations. Each route has a name, description, and list of endpoints. The model can select the appropriate route based on conversation context, enabling intelligent routing to different departments or specialists.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions."},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected."}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured."},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to."}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description."},"description":"Optional named transfer routes allowing the language model to choose between multiple destinations. Each route has a name, description, and list of endpoints. The model can select the appropriate route based on conversation context, enabling intelligent routing to different departments or specialists.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes","typeLabel":"object[] | null"},"holdMedia":{"oneOf":[{"type":"object","description":"Optional hold media configuration for playing audio during the transfer. When enabled, plays the specified media file on loop while the call is being transferred instead of using the agent's voice. Provides professional hold music or messages while the transfer completes.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.mediaFilename","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0","typeLabel":"object"},{"type":"object","description":"Call transfer configuration. Supports warm transfer (agent stays on call), cold transfer (agent hangs up), or HTTP transfer (external API handles transfer). Enables the agent to transfer calls to other numbers or systems.","required":["type","webhook","description"],"properties":{"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.description","typeLabel":"string"},"webhook":{"type":"object","description":"Webhook endpoint to call for transfer routing decisions. The system sends a POST request with conversation context and waits for a response specifying the transfer destination and type. The webhook should return a transfer decision in the response body indicating whether to perform a cold or warm transfer and to which endpoint.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers","typeLabel":"object | null"},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.httpMethod","typeLabel":"enum\u003cstring>"},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams","typeLabel":"object | null"},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0.template","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook","typeLabel":"object"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.isEnabled","typeLabel":"boolean | null"},"fallback":{"oneOf":[{"type":"object","description":"Fallback transfer configuration to use if the webhook request fails, times out, or returns an error. Ensures calls can still be transferred even when the routing system is unavailable. Can specify either a cold or warm transfer as the fallback behavior.","required":["endpointDestination","type","description"],"properties":{"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.description","typeLabel":"string"},"endpointDestination":{"minLength":1,"type":"string","description":"Transfer destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:1234567890@example.com\". The call is redirected to this endpoint using SIP REFER when the transfer is initiated.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.endpointDestination","typeLabel":"string"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.isEnabled","typeLabel":"boolean | null"},"sipUui":{"oneOf":[{"type":"string","description":"Optional User-to-User payload, encoded as RFC 7433 hex. Supports {{variableName}}\nfrom call additionalData and {{sip_endpoint}} for the caller.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipUui.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional User-to-User payload, encoded as RFC 7433 hex. Supports {{variableName}}\nfrom call additionalData and {{sip_endpoint}} for the caller.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipUui.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipUui","typeLabel":"string | null"},"sipHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers embedded in the Refer-To URI. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers embedded in the Refer-To URI. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders","typeLabel":"object | null"},"transferRoutes":{"oneOf":[{"type":"array","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].name","typeLabel":"string"},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX].endpoint","typeLabel":"string"}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX]","typeLabel":"object"},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations","typeLabel":"object[]"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Optional named transfer routes allowing the language model to choose between multiple destinations. Each route has a name, description, and list of endpoints. The model can select the appropriate route based on conversation context, enabling intelligent routing to different departments or specialists.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions."},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected."}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured."},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to."}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description."},"description":"Optional named transfer routes allowing the language model to choose between multiple destinations. Each route has a name, description, and list of endpoints. The model can select the appropriate route based on conversation context, enabling intelligent routing to different departments or specialists.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes","typeLabel":"object[] | null"},"holdMedia":{"oneOf":[{"type":"object","description":"Optional hold media configuration for playing audio during the transfer. When enabled, plays the specified media file on loop while the call is being transferred instead of using the agent's voice. Provides professional hold music or messages while the transfer completes.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.mediaFilename","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0","typeLabel":"object"},{"type":"object","description":"Fallback transfer configuration to use if the webhook request fails, times out, or returns an error. Ensures calls can still be transferred even when the routing system is unavailable. Can specify either a cold or warm transfer as the fallback behavior.","required":["endpointDestination","type","description"],"properties":{"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.description","typeLabel":"string"},"endpointDestination":{"minLength":1,"type":"string","description":"Operator destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The agent calls this endpoint first before bridging with the user.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.endpointDestination","typeLabel":"string"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.isEnabled","typeLabel":"boolean | null"},"sip":{"oneOf":[{"type":"object","description":"Optional SIP configuration override for placing the call to the operator. When specified, uses these SIP credentials instead of the agent's default outbound SIP settings for this specific transfer call.","properties":{"domain":{"oneOf":[{"type":"string","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.domain.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.domain.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.domain","typeLabel":"string | null"},"password":{"oneOf":[{"type":"string","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.password.oneOf.0","typeLabel":"string"},{"type":"null","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.password.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.password","typeLabel":"string | null"},"fromUser":{"oneOf":[{"type":"string","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.fromUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.fromUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.fromUser","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for SIP communication. Supported values are UDP (default), TCP, or TLS for encrypted connections.","default":"udp","enum":["udp","tcp","tls"],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.transport","typeLabel":"enum\u003cstring> | null"},"cpsLimit":{"oneOf":[{"type":"integer","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsLimit.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsLimit.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsLimit","typeLabel":"integer\u003cint32> | null"},"cpsKey":{"oneOf":[{"type":"string","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsKey.oneOf.0","typeLabel":"string"},{"type":"null","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsKey","typeLabel":"string | null"},"displayName":{"oneOf":[{"type":"string","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.displayName","typeLabel":"string | null"},"server":{"oneOf":[{"type":"string","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.server.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.server.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.server","typeLabel":"string | null"},"authUser":{"oneOf":[{"type":"string","description":"Authentication user identifier as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.authUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"Authentication user identifier as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.authUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.authUser","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip","typeLabel":"object | null"},"sipUui":{"oneOf":[{"type":"string","description":"Optional User-to-User payload on the operator call, encoded as RFC 7433 hex.\nSupports {{variableName}} from call additionalData and {{sip_endpoint}} for the caller.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipUui.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional User-to-User payload on the operator call, encoded as RFC 7433 hex.\nSupports {{variableName}} from call additionalData and {{sip_endpoint}} for the caller.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipUui.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipUui","typeLabel":"string | null"},"sipHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers on the operator call. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers on the operator call. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders","typeLabel":"object | null"},"interactionWithOperator":{"oneOf":[{"type":"object","description":"Behavior controlling what the agent says to the operator when they answer. Can use static predefined phrases or smart AI-generated context based on the conversation. Allows providing the operator with relevant information about the caller's needs before connecting them.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to customize how the AI agent interacts with the operator before bridging the call. Provides context-specific guidance for different scenarios, such as explaining the caller's situation, verifying operator availability, or following specific handoff protocols. Helps ensure smooth operator interactions while maintaining flexibility for different business processes.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to customize how the AI agent interacts with the operator before bridging the call. Provides context-specific guidance for different scenarios, such as explaining the caller's situation, verifying operator availability, or following specific handoff protocols. Helps ensure smooth operator interactions while maintaining flexibility for different business processes.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.additionalInstructions","typeLabel":"string | null"},"requireReadyBriefingAcceptance":{"type":"boolean","description":"When true, wait for operator readiness, deliver the configured briefing completely, and require later acceptance before bridging. Defaults to false, preserving the existing smart warm-transfer flow when absent or false.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.requireReadyBriefingAcceptance","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0","typeLabel":"object"},{"type":"object","description":"Behavior controlling what the agent says to the operator when they answer. Can use static predefined phrases or smart AI-generated context based on the conversation. Allows providing the operator with relevant information about the caller's needs before connecting them.","required":["type"],"properties":{"waitFirstAnswerFromOperator":{"oneOf":[{"type":"boolean","description":"Wait for voice detection from the operator before bridging the call. When enabled, the system waits for the operator to start speaking before connecting the caller, ensuring the operator is actively engaged and ready. When disabled, the call bridges immediately once other configured wait conditions are met or the timeout expires.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Wait for voice detection from the operator before bridging the call. When enabled, the system waits for the operator to start speaking before connecting the caller, ensuring the operator is actively engaged and ready. When disabled, the call bridges immediately once other configured wait conditions are met or the timeout expires.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator","typeLabel":"boolean | null"},"waitToneFromOperator":{"oneOf":[{"type":"array","items":{"type":"number","format":"double","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.0.items.[INDEX]","typeLabel":"number\u003cdouble>"},"description":"Audio frequency tones to wait for from the operator before bridging, specified in Hertz. Used to detect specific audio signals from the operator's phone system or IVR, such as 400Hz for readiness signals. The system listens for any of the specified frequencies and bridges the call when detected. Useful for integrating with legacy phone systems or custom operator signaling protocols.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.0","typeLabel":"number\u003cdouble>[]"},{"type":"null","items":{"type":"number","format":"double"},"description":"Audio frequency tones to wait for from the operator before bridging, specified in Hertz. Used to detect specific audio signals from the operator's phone system or IVR, such as 400Hz for readiness signals. The system listens for any of the specified frequencies and bridges the call when detected. Useful for integrating with legacy phone systems or custom operator signaling protocols.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitToneFromOperator","typeLabel":"number\u003cdouble>[] | null"},"waitDTMFFromOperator":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"DTMF key press tones to wait for from the operator before bridging the call. Accepts digit keys 0-9 and special keys like pound or star. The system waits for the operator to press any of the specified keys as an acknowledgment signal before connecting the caller. Common in call center environments where operators confirm readiness by pressing a specific key.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"DTMF key press tones to wait for from the operator before bridging the call. Accepts digit keys 0-9 and special keys like pound or star. The system waits for the operator to press any of the specified keys as an acknowledgment signal before connecting the caller. Common in call center environments where operators confirm readiness by pressing a specific key.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitDTMFFromOperator","typeLabel":"string[] | null"},"waitChecksTimeoutInS":{"oneOf":[{"type":"number","description":"Maximum time in seconds to wait for operator readiness signals before timing out. If the operator does not provide the expected voice, DTMF, or frequency tone signals within this timeout, the wait conditions are bypassed and the call proceeds according to failover configuration. Prevents indefinite waiting when operators are unavailable or unresponsive.","format":"double","default":4,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitChecksTimeoutInS.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Maximum time in seconds to wait for operator readiness signals before timing out. If the operator does not provide the expected voice, DTMF, or frequency tone signals within this timeout, the wait conditions are bypassed and the call proceeds according to failover configuration. Prevents indefinite waiting when operators are unavailable or unresponsive.","format":"double","default":4,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitChecksTimeoutInS.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitChecksTimeoutInS","typeLabel":"number\u003cdouble> | null"},"sayPhraseToOperator":{"oneOf":[{"type":"object","description":"Phrase configuration for introducing the caller to the operator before bridging. Allows the AI agent to provide context about the caller's needs, reason for transfer, or conversation summary to help the operator assist effectively. Can be configured to speak before or after the operator acknowledges, depending on call center workflow preferences.","required":["phrase"],"properties":{"phrase":{"minLength":1,"type":"string","description":"Phrase to speak to the operator when they answer. Should provide relevant context about the caller or their needs. Can include conversation summaries, caller identification, or reason for transfer to help the operator assist the user effectively.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.phrase","typeLabel":"string"},"beforeOperator":{"oneOf":[{"type":"boolean","description":"Controls timing of when the phrase is spoken. When true, the agent speaks immediately when the call connects, potentially before the operator fully answers. When false, waits for the operator to acknowledge before speaking the phrase.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls timing of when the phrase is spoken. When true, the agent speaks immediately when the call connects, potentially before the operator fully answers. When false, waits for the operator to acknowledge before speaking the phrase.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator","typeLabel":"object · object · null"},"sayPhraseToCustomer":{"oneOf":[{"type":"string","description":"Phrase to speak to the customer before bridging the call with the operator. Informs the user that they're being connected to a human agent. Can include reassurance or set expectations about the handoff.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sayPhraseToCustomer.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase to speak to the customer before bridging the call with the operator. Informs the user that they're being connected to a human agent. Can include reassurance or set expectations about the handoff.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sayPhraseToCustomer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sayPhraseToCustomer","typeLabel":"string | null"},"continueAfterOperatorDisconnected":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent resumes the conversation if the operator disconnects or hangs up. When true, the agent continues talking to the user after the operator leaves. When false, the call ends when the operator disconnects.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueAfterOperatorDisconnected.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent resumes the conversation if the operator disconnects or hangs up. When true, the agent continues talking to the user after the operator leaves. When false, the call ends when the operator disconnects.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueAfterOperatorDisconnected.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueAfterOperatorDisconnected","typeLabel":"boolean | null"},"continueRecordingInTransfer":{"oneOf":[{"type":"boolean","default":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecordingInTransfer.oneOf.0","typeLabel":"boolean"},{"type":"null","default":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecordingInTransfer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecordingInTransfer","typeLabel":"boolean | null"},"transferRoutes":{"oneOf":[{"type":"array","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].name","typeLabel":"string"},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX].endpoint","typeLabel":"string"}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX]","typeLabel":"object"},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations","typeLabel":"object[]"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions."},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected."}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured."},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to."}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description."},"default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes","typeLabel":"object[] | null"},"operatorName":{"oneOf":[{"type":"string","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.operatorName.oneOf.0","typeLabel":"string"},{"type":"null","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.operatorName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.operatorName","typeLabel":"string | null"},"continueRecognitionInTransfer":{"oneOf":[{"type":"boolean","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecognitionInTransfer.oneOf.0","typeLabel":"boolean"},{"type":"null","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecognitionInTransfer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecognitionInTransfer","typeLabel":"boolean | null"},"callerIdMode":{"oneOf":[{"type":"string","description":"Determines which phone number is displayed to the transfer destination (human agent) during warm transfer.\nAgentPhoneNumber (default): Uses the AI agent's configured outbound SIP fromUser as the caller ID.\nUserPhoneNumber: Uses the user's phone number (job.endpoint) as the caller ID.\nWhen null, defaults to AgentPhoneNumber behavior.","default":"agentPhoneNumber","enum":["userPhoneNumber","agentPhoneNumber"],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.callerIdMode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.callerIdMode.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.callerIdMode","typeLabel":"enum\u003cstring> | null"},"threewayMessaging":{"oneOf":[{"type":"object","description":"Optional threeway messaging configuration.\nWhen configured, delivers a unified phrase to BOTH user and operator\nsimultaneously before the bridge channel is executed.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to customize how the AI generates the announcement phrase spoken to both parties simultaneously. Guides the language model in crafting appropriate handoff messaging, such as maintaining professional tone, including issue summaries, providing reassurance, or mentioning specialist involvement. When not specified, the phrase is generated based solely on conversation context without additional constraints.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to customize how the AI generates the announcement phrase spoken to both parties simultaneously. Guides the language model in crafting appropriate handoff messaging, such as maintaining professional tone, including issue summaries, providing reassurance, or mentioning specialist involvement. When not specified, the phrase is generated based solely on conversation context without additional constraints.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0.additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0","typeLabel":"object"},{"type":"object","description":"Optional threeway messaging configuration.\nWhen configured, delivers a unified phrase to BOTH user and operator\nsimultaneously before the bridge channel is executed.","required":["type"],"properties":{"phrase":{"oneOf":[{"type":"string","description":"Phrase spoken to both caller and operator simultaneously right before bridging the call. Should be clear and concise as both parties will hear it at the same moment during the transfer transition. Common examples include connection announcements like \"Connecting you now\", hold notifications like \"Please hold while I connect you\", or representative introduction messages like \"You are now being connected to a representative\".","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1.phrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to both caller and operator simultaneously right before bridging the call. Should be clear and concise as both parties will hear it at the same moment during the transfer transition. Common examples include connection announcements like \"Connecting you now\", hold notifications like \"Please hold while I connect you\", or representative introduction messages like \"You are now being connected to a representative\".","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1.phrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1.phrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging","typeLabel":"object · object · null"},"holdMedia":{"oneOf":[{"type":"object","description":"Optional hold media configuration for warm transfers.\nWhen enabled, plays media via media:// protocol instead of using the respond node\nto communicate with users during transfer.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.mediaFilename","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia","typeLabel":"object | null"},"fallbackToColdTransfer":{"type":"boolean","description":"When true and the warm transfer fails (the operator does not answer, the operator briefing fails, or the operator call cannot be placed), the agent cold-transfers the caller to the same destination before applying the failover behavior. Defaults to false.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.fallbackToColdTransfer","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback","typeLabel":"object · object · null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1","typeLabel":"object"},{"type":"object","description":"Call transfer configuration. Supports warm transfer (agent stays on call), cold transfer (agent hangs up), or HTTP transfer (external API handles transfer). Enables the agent to transfer calls to other numbers or systems.","required":["endpointDestination","type","description"],"properties":{"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.description","typeLabel":"string"},"endpointDestination":{"minLength":1,"type":"string","description":"Operator destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The agent calls this endpoint first before bridging with the user.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.endpointDestination","typeLabel":"string"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.isEnabled","typeLabel":"boolean | null"},"sip":{"oneOf":[{"type":"object","description":"Optional SIP configuration override for placing the call to the operator. When specified, uses these SIP credentials instead of the agent's default outbound SIP settings for this specific transfer call.","properties":{"domain":{"oneOf":[{"type":"string","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.domain.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.domain.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.domain","typeLabel":"string | null"},"password":{"oneOf":[{"type":"string","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.password.oneOf.0","typeLabel":"string"},{"type":"null","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.password.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.password","typeLabel":"string | null"},"fromUser":{"oneOf":[{"type":"string","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.fromUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.fromUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.fromUser","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for SIP communication. Supported values are UDP (default), TCP, or TLS for encrypted connections.","default":"udp","enum":["udp","tcp","tls"],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.transport","typeLabel":"enum\u003cstring> | null"},"cpsLimit":{"oneOf":[{"type":"integer","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsLimit.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsLimit.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsLimit","typeLabel":"integer\u003cint32> | null"},"cpsKey":{"oneOf":[{"type":"string","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsKey.oneOf.0","typeLabel":"string"},{"type":"null","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsKey","typeLabel":"string | null"},"displayName":{"oneOf":[{"type":"string","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.displayName","typeLabel":"string | null"},"server":{"oneOf":[{"type":"string","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.server.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.server.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.server","typeLabel":"string | null"},"authUser":{"oneOf":[{"type":"string","description":"Authentication user identifier as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.authUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"Authentication user identifier as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.authUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.authUser","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip","typeLabel":"object | null"},"sipUui":{"oneOf":[{"type":"string","description":"Optional User-to-User payload on the operator call, encoded as RFC 7433 hex.\nSupports {{variableName}} from call additionalData and {{sip_endpoint}} for the caller.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipUui.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional User-to-User payload on the operator call, encoded as RFC 7433 hex.\nSupports {{variableName}} from call additionalData and {{sip_endpoint}} for the caller.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipUui.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipUui","typeLabel":"string | null"},"sipHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers on the operator call. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers on the operator call. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders","typeLabel":"object | null"},"interactionWithOperator":{"oneOf":[{"type":"object","description":"Behavior controlling what the agent says to the operator when they answer. Can use static predefined phrases or smart AI-generated context based on the conversation. Allows providing the operator with relevant information about the caller's needs before connecting them.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to customize how the AI agent interacts with the operator before bridging the call. Provides context-specific guidance for different scenarios, such as explaining the caller's situation, verifying operator availability, or following specific handoff protocols. Helps ensure smooth operator interactions while maintaining flexibility for different business processes.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to customize how the AI agent interacts with the operator before bridging the call. Provides context-specific guidance for different scenarios, such as explaining the caller's situation, verifying operator availability, or following specific handoff protocols. Helps ensure smooth operator interactions while maintaining flexibility for different business processes.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.additionalInstructions","typeLabel":"string | null"},"requireReadyBriefingAcceptance":{"type":"boolean","description":"When true, wait for operator readiness, deliver the configured briefing completely, and require later acceptance before bridging. Defaults to false, preserving the existing smart warm-transfer flow when absent or false.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.requireReadyBriefingAcceptance","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0","typeLabel":"object"},{"type":"object","description":"Behavior controlling what the agent says to the operator when they answer. Can use static predefined phrases or smart AI-generated context based on the conversation. Allows providing the operator with relevant information about the caller's needs before connecting them.","required":["type"],"properties":{"waitFirstAnswerFromOperator":{"oneOf":[{"type":"boolean","description":"Wait for voice detection from the operator before bridging the call. When enabled, the system waits for the operator to start speaking before connecting the caller, ensuring the operator is actively engaged and ready. When disabled, the call bridges immediately once other configured wait conditions are met or the timeout expires.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Wait for voice detection from the operator before bridging the call. When enabled, the system waits for the operator to start speaking before connecting the caller, ensuring the operator is actively engaged and ready. When disabled, the call bridges immediately once other configured wait conditions are met or the timeout expires.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator","typeLabel":"boolean | null"},"waitToneFromOperator":{"oneOf":[{"type":"array","items":{"type":"number","format":"double","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.0.items.[INDEX]","typeLabel":"number\u003cdouble>"},"description":"Audio frequency tones to wait for from the operator before bridging, specified in Hertz. Used to detect specific audio signals from the operator's phone system or IVR, such as 400Hz for readiness signals. The system listens for any of the specified frequencies and bridges the call when detected. Useful for integrating with legacy phone systems or custom operator signaling protocols.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.0","typeLabel":"number\u003cdouble>[]"},{"type":"null","items":{"type":"number","format":"double"},"description":"Audio frequency tones to wait for from the operator before bridging, specified in Hertz. Used to detect specific audio signals from the operator's phone system or IVR, such as 400Hz for readiness signals. The system listens for any of the specified frequencies and bridges the call when detected. Useful for integrating with legacy phone systems or custom operator signaling protocols.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitToneFromOperator","typeLabel":"number\u003cdouble>[] | null"},"waitDTMFFromOperator":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"DTMF key press tones to wait for from the operator before bridging the call. Accepts digit keys 0-9 and special keys like pound or star. The system waits for the operator to press any of the specified keys as an acknowledgment signal before connecting the caller. Common in call center environments where operators confirm readiness by pressing a specific key.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"DTMF key press tones to wait for from the operator before bridging the call. Accepts digit keys 0-9 and special keys like pound or star. The system waits for the operator to press any of the specified keys as an acknowledgment signal before connecting the caller. Common in call center environments where operators confirm readiness by pressing a specific key.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitDTMFFromOperator","typeLabel":"string[] | null"},"waitChecksTimeoutInS":{"oneOf":[{"type":"number","description":"Maximum time in seconds to wait for operator readiness signals before timing out. If the operator does not provide the expected voice, DTMF, or frequency tone signals within this timeout, the wait conditions are bypassed and the call proceeds according to failover configuration. Prevents indefinite waiting when operators are unavailable or unresponsive.","format":"double","default":4,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitChecksTimeoutInS.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Maximum time in seconds to wait for operator readiness signals before timing out. If the operator does not provide the expected voice, DTMF, or frequency tone signals within this timeout, the wait conditions are bypassed and the call proceeds according to failover configuration. Prevents indefinite waiting when operators are unavailable or unresponsive.","format":"double","default":4,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitChecksTimeoutInS.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitChecksTimeoutInS","typeLabel":"number\u003cdouble> | null"},"sayPhraseToOperator":{"oneOf":[{"type":"object","description":"Phrase configuration for introducing the caller to the operator before bridging. Allows the AI agent to provide context about the caller's needs, reason for transfer, or conversation summary to help the operator assist effectively. Can be configured to speak before or after the operator acknowledges, depending on call center workflow preferences.","required":["phrase"],"properties":{"phrase":{"minLength":1,"type":"string","description":"Phrase to speak to the operator when they answer. Should provide relevant context about the caller or their needs. Can include conversation summaries, caller identification, or reason for transfer to help the operator assist the user effectively.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.phrase","typeLabel":"string"},"beforeOperator":{"oneOf":[{"type":"boolean","description":"Controls timing of when the phrase is spoken. When true, the agent speaks immediately when the call connects, potentially before the operator fully answers. When false, waits for the operator to acknowledge before speaking the phrase.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls timing of when the phrase is spoken. When true, the agent speaks immediately when the call connects, potentially before the operator fully answers. When false, waits for the operator to acknowledge before speaking the phrase.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator","typeLabel":"object · object · null"},"sayPhraseToCustomer":{"oneOf":[{"type":"string","description":"Phrase to speak to the customer before bridging the call with the operator. Informs the user that they're being connected to a human agent. Can include reassurance or set expectations about the handoff.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sayPhraseToCustomer.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase to speak to the customer before bridging the call with the operator. Informs the user that they're being connected to a human agent. Can include reassurance or set expectations about the handoff.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sayPhraseToCustomer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sayPhraseToCustomer","typeLabel":"string | null"},"continueAfterOperatorDisconnected":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent resumes the conversation if the operator disconnects or hangs up. When true, the agent continues talking to the user after the operator leaves. When false, the call ends when the operator disconnects.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueAfterOperatorDisconnected.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent resumes the conversation if the operator disconnects or hangs up. When true, the agent continues talking to the user after the operator leaves. When false, the call ends when the operator disconnects.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueAfterOperatorDisconnected.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueAfterOperatorDisconnected","typeLabel":"boolean | null"},"continueRecordingInTransfer":{"oneOf":[{"type":"boolean","default":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecordingInTransfer.oneOf.0","typeLabel":"boolean"},{"type":"null","default":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecordingInTransfer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecordingInTransfer","typeLabel":"boolean | null"},"transferRoutes":{"oneOf":[{"type":"array","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].name","typeLabel":"string"},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX].endpoint","typeLabel":"string"}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX]","typeLabel":"object"},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations","typeLabel":"object[]"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions."},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected."}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured."},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to."}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description."},"default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes","typeLabel":"object[] | null"},"operatorName":{"oneOf":[{"type":"string","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.operatorName.oneOf.0","typeLabel":"string"},{"type":"null","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.operatorName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.operatorName","typeLabel":"string | null"},"continueRecognitionInTransfer":{"oneOf":[{"type":"boolean","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecognitionInTransfer.oneOf.0","typeLabel":"boolean"},{"type":"null","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecognitionInTransfer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecognitionInTransfer","typeLabel":"boolean | null"},"callerIdMode":{"oneOf":[{"type":"string","description":"Determines which phone number is displayed to the transfer destination (human agent) during warm transfer.\nAgentPhoneNumber (default): Uses the AI agent's configured outbound SIP fromUser as the caller ID.\nUserPhoneNumber: Uses the user's phone number (job.endpoint) as the caller ID.\nWhen null, defaults to AgentPhoneNumber behavior.","default":"agentPhoneNumber","enum":["userPhoneNumber","agentPhoneNumber"],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.callerIdMode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.callerIdMode.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.callerIdMode","typeLabel":"enum\u003cstring> | null"},"threewayMessaging":{"oneOf":[{"type":"object","description":"Optional threeway messaging configuration.\nWhen configured, delivers a unified phrase to BOTH user and operator\nsimultaneously before the bridge channel is executed.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to customize how the AI generates the announcement phrase spoken to both parties simultaneously. Guides the language model in crafting appropriate handoff messaging, such as maintaining professional tone, including issue summaries, providing reassurance, or mentioning specialist involvement. When not specified, the phrase is generated based solely on conversation context without additional constraints.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to customize how the AI generates the announcement phrase spoken to both parties simultaneously. Guides the language model in crafting appropriate handoff messaging, such as maintaining professional tone, including issue summaries, providing reassurance, or mentioning specialist involvement. When not specified, the phrase is generated based solely on conversation context without additional constraints.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0.additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0","typeLabel":"object"},{"type":"object","description":"Optional threeway messaging configuration.\nWhen configured, delivers a unified phrase to BOTH user and operator\nsimultaneously before the bridge channel is executed.","required":["type"],"properties":{"phrase":{"oneOf":[{"type":"string","description":"Phrase spoken to both caller and operator simultaneously right before bridging the call. Should be clear and concise as both parties will hear it at the same moment during the transfer transition. Common examples include connection announcements like \"Connecting you now\", hold notifications like \"Please hold while I connect you\", or representative introduction messages like \"You are now being connected to a representative\".","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1.phrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to both caller and operator simultaneously right before bridging the call. Should be clear and concise as both parties will hear it at the same moment during the transfer transition. Common examples include connection announcements like \"Connecting you now\", hold notifications like \"Please hold while I connect you\", or representative introduction messages like \"You are now being connected to a representative\".","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1.phrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1.phrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging","typeLabel":"object · object · null"},"holdMedia":{"oneOf":[{"type":"object","description":"Optional hold media configuration for warm transfers.\nWhen enabled, plays media via media:// protocol instead of using the respond node\nto communicate with users during transfer.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.mediaFilename","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia","typeLabel":"object | null"},"fallbackToColdTransfer":{"type":"boolean","description":"When true and the warm transfer fails (the operator does not answer, the operator briefing fails, or the operator call cannot be placed), the agent cold-transfers the caller to the same destination before applying the failover behavior. Defaults to false.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.fallbackToColdTransfer","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer","typeLabel":"object · object · object · null"},"postCallAnalysis":{"oneOf":[{"type":"array","items":{"required":["labels","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Name identifier for this analysis configuration. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used to identify this analysis in the results.","isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].name","typeLabel":"string"},"labels":{"type":"array","items":{"required":["description","name","type"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Field name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. This name is used as the key in the analysis results.","isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].name","typeLabel":"string"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of what information to extract and how to interpret it. Guides the language model in identifying and extracting the relevant data from the conversation. Should clearly explain what to look for and how to categorize or format the extracted information.","isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].description","typeLabel":"string"},"type":{"type":"string","description":"Data type for the extracted value. Determines the structure and format of the extracted information and constrains what the language model can return.","enum":["string","number","boolean","enum"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"values":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].values.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Allowed values for enum type labels. When Type is Enum, the extracted value must be one of these predefined options. The language model selects the most appropriate value from this list based on the conversation content.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].values.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Allowed values for enum type labels. When Type is Enum, the extracted value must be one of these predefined options. The language model selects the most appropriate value from this list based on the conversation content.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].values.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].values","typeLabel":"string[] | null"},"required":{"oneOf":[{"type":"boolean","description":"Indicates whether this field must be populated. When true, the analysis will always attempt to extract a value for this field. When false, the field may be left empty if the relevant information is not found in the conversation.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].required.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Indicates whether this field must be populated. When true, the analysis will always attempt to extract a value for this field. When false, the field may be left empty if the relevant information is not found in the conversation.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].required.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].required","typeLabel":"boolean | null"}},"additionalProperties":false,"description":"Data field definition for post-call analysis extraction. Specifies a piece of information to identify and extract from conversation transcripts such as customer sentiment, appointment details, or business outcomes. The language model analyzes the completed conversation and attempts to populate this field based on the description and type constraints.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX]","typeLabel":"object"},"description":"List of data fields to extract from the conversation transcript. Each label defines a piece of information to identify and extract, such as customer sentiment, appointment times, order numbers, or custom business outcomes. The language model analyzes the conversation and populates these labels based on the transcript content.","isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels","typeLabel":"object[]"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this post-call analysis. When enabled, the system performs the configured analysis after each call completes and includes results in the completion webhook payload.","default":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this post-call analysis. When enabled, the system performs the configured analysis after each call completes and includes results in the completion webhook payload.","default":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].isEnabled","typeLabel":"boolean | null"}},"additionalProperties":false,"description":"Post-call analysis configuration for automatically extracting structured data from conversation transcripts after calls complete. Defines labels and fields to extract using language model analysis of the conversation. Enables automated classification, sentiment analysis, information extraction, and business outcome tracking from completed calls. Results are included in the completed webhook payload for integration with CRM systems, analytics platforms, or business intelligence tools.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Post-call analysis configurations for extracting insights after conversations complete. Multiple analysis tasks can be configured to process transcripts and generate structured data.","default":[],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["labels","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Name identifier for this analysis configuration. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used to identify this analysis in the results."},"labels":{"type":"array","items":{"required":["description","name","type"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Field name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. This name is used as the key in the analysis results."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of what information to extract and how to interpret it. Guides the language model in identifying and extracting the relevant data from the conversation. Should clearly explain what to look for and how to categorize or format the extracted information."},"type":{"type":"string","description":"Data type for the extracted value. Determines the structure and format of the extracted information and constrains what the language model can return.","enum":["string","number","boolean","enum"]},"values":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"Allowed values for enum type labels. When Type is Enum, the extracted value must be one of these predefined options. The language model selects the most appropriate value from this list based on the conversation content."},{"type":"null","items":{"type":"string"},"description":"Allowed values for enum type labels. When Type is Enum, the extracted value must be one of these predefined options. The language model selects the most appropriate value from this list based on the conversation content."}]},"required":{"oneOf":[{"type":"boolean","description":"Indicates whether this field must be populated. When true, the analysis will always attempt to extract a value for this field. When false, the field may be left empty if the relevant information is not found in the conversation."},{"type":"null","description":"Indicates whether this field must be populated. When true, the analysis will always attempt to extract a value for this field. When false, the field may be left empty if the relevant information is not found in the conversation."}]}},"additionalProperties":false,"description":"Data field definition for post-call analysis extraction. Specifies a piece of information to identify and extract from conversation transcripts such as customer sentiment, appointment details, or business outcomes. The language model analyzes the completed conversation and attempts to populate this field based on the description and type constraints."},"description":"List of data fields to extract from the conversation transcript. Each label defines a piece of information to identify and extract, such as customer sentiment, appointment times, order numbers, or custom business outcomes. The language model analyzes the conversation and populates these labels based on the transcript content."},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this post-call analysis. When enabled, the system performs the configured analysis after each call completes and includes results in the completion webhook payload.","default":true},{"type":"null","description":"Enables or disables this post-call analysis. When enabled, the system performs the configured analysis after each call completes and includes results in the completion webhook payload.","default":true}]}},"additionalProperties":false,"description":"Post-call analysis configuration for automatically extracting structured data from conversation transcripts after calls complete. Defines labels and fields to extract using language model analysis of the conversation. Enables automated classification, sentiment analysis, information extraction, and business outcome tracking from completed calls. Results are included in the completed webhook payload for integration with CRM systems, analytics platforms, or business intelligence tools."},"description":"Post-call analysis configurations for extracting insights after conversations complete. Multiple analysis tasks can be configured to process transcripts and generate structured data.","default":[],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis","typeLabel":"object[] | null"},"talkFirst":{"oneOf":[{"type":"object","description":"Controls whether the agent speaks first when the call connects. When enabled, the agent greets the user immediately rather than waiting for the user to speak first.","default":{"version":"v1","delay":1,"isEnabled":false,"interruptible":true},"properties":{"phrase":{"oneOf":[{"type":"string","description":"Greeting phrase the agent should speak immediately when the call connects. This is spoken before the normal conversation flow begins, allowing the agent to introduce itself or provide an opening statement on outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.phrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Greeting phrase the agent should speak immediately when the call connects. This is spoken before the normal conversation flow begins, allowing the agent to introduce itself or provide an opening statement on outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.phrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.phrase","typeLabel":"string | null"},"delay":{"oneOf":[{"type":"number","description":"Delay in seconds before speaking the greeting phrase. Allows time for the call connection to stabilize or for the user to say hello first if desired. The agent waits this duration after call connection before speaking the configured phrase.","format":"double","default":1,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.delay.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Delay in seconds before speaking the greeting phrase. Allows time for the call connection to stabilize or for the user to say hello first if desired. The agent waits this duration after call connection before speaking the configured phrase.","format":"double","default":1,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.delay.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.delay","typeLabel":"number\u003cdouble> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables the talk first feature. When enabled, the agent speaks the configured greeting phrase after the specified delay when the call connects.","default":false,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables the talk first feature. When enabled, the agent speaks the configured greeting phrase after the specified delay when the call connects.","default":false,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.isEnabled","typeLabel":"boolean | null"},"interruptible":{"oneOf":[{"type":"boolean","description":"Controls whether the user can interrupt the greeting phrase. When true, the agent stops speaking the greeting if the user starts talking. When false, the agent completes the entire greeting phrase before listening for user input.","default":true,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.interruptible.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the user can interrupt the greeting phrase. When true, the agent stops speaking the greeting if the user starts talking. When false, the agent completes the entire greeting phrase before listening for user input.","default":true,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.interruptible.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.interruptible","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst","typeLabel":"object | null"},"maxDuration":{"oneOf":[{"type":"object","description":"Maximum duration limit for conversations. The call will be automatically ended if it exceeds the configured time limit.","default":{"version":"v1","maxDurationSeconds":3600,"maxDurationInTransferSeconds":7200,"isEnabled":true},"properties":{"maxDurationSeconds":{"oneOf":[{"type":"integer","description":"Maximum duration in seconds for normal conversations before the call is automatically ended. Prevents calls from running indefinitely and helps control costs and resource usage.","format":"int32","default":3600,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationSeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum duration in seconds for normal conversations before the call is automatically ended. Prevents calls from running indefinitely and helps control costs and resource usage.","format":"int32","default":3600,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationSeconds","typeLabel":"integer\u003cint32> | null"},"maxDurationInTransferSeconds":{"oneOf":[{"type":"integer","description":"Maximum duration in seconds for conversations that have been transferred. Allows longer durations for transferred calls since they may involve more complex interactions or human operators. The call is automatically ended when this limit is exceeded during a transfer.","format":"int32","default":7200,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationInTransferSeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum duration in seconds for conversations that have been transferred. Allows longer durations for transferred calls since they may involve more complex interactions or human operators. The call is automatically ended when this limit is exceeded during a transfer.","format":"int32","default":7200,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationInTransferSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationInTransferSeconds","typeLabel":"integer\u003cint32> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables maximum duration enforcement. When enabled, calls are automatically terminated when they exceed the configured duration limits.","default":true,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables maximum duration enforcement. When enabled, calls are automatically terminated when they exceed the configured duration limits.","default":true,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.isEnabled","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration","typeLabel":"object | null"},"ivrDetection":{"oneOf":[{"type":"object","description":"IVR (Interactive Voice Response) detection for identifying automated phone systems. Helps the agent recognize and respond appropriately to menu prompts and automated messages.","default":{"version":"v1","isEnabled":true,"enabledForChat":false,"enabledForInbound":false,"enabledForOutbound":true,"enabledForWebCall":false,"ivrNavigation":false},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Master enable flag for IVR and answering machine detection. When enabled, the system attempts to detect whether calls are answered by humans or machines and behaves according to the configured settings.","default":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Master enable flag for IVR and answering machine detection. When enabled, the system attempts to detect whether calls are answered by humans or machines and behaves according to the configured settings.","default":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.isEnabled","typeLabel":"boolean | null"},"enabledForChat":{"oneOf":[{"type":"boolean","description":"Enables answering machine detection for chat conversations. When enabled, the system attempts to detect automated chat responses or bot interactions.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForChat.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables answering machine detection for chat conversations. When enabled, the system attempts to detect automated chat responses or bot interactions.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForChat.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForChat","typeLabel":"boolean | null"},"enabledForInbound":{"oneOf":[{"type":"boolean","description":"Enables answering machine detection for inbound phone calls. When enabled, the system detects if the caller is a human or an automated system calling your phone numbers.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForInbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables answering machine detection for inbound phone calls. When enabled, the system detects if the caller is a human or an automated system calling your phone numbers.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForInbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForInbound","typeLabel":"boolean | null"},"enabledForOutbound":{"oneOf":[{"type":"boolean","description":"Enables answering machine detection for outbound phone calls. When enabled, the system detects whether a human or voicemail/IVR system answered the call, allowing the agent to leave messages or navigate menus as configured.","default":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForOutbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables answering machine detection for outbound phone calls. When enabled, the system detects whether a human or voicemail/IVR system answered the call, allowing the agent to leave messages or navigate menus as configured.","default":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForOutbound","typeLabel":"boolean | null"},"enabledForWebCall":{"oneOf":[{"type":"boolean","description":"Enables answering machine detection for web-based voice calls. When enabled, the system detects automated responses in web call scenarios.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForWebCall.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables answering machine detection for web-based voice calls. When enabled, the system detects automated responses in web call scenarios.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForWebCall.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForWebCall","typeLabel":"boolean | null"},"ivrNavigation":{"oneOf":[{"type":"boolean","description":"Enables IVR menu navigation using DTMF tone sending. When enabled, the agent attempts to navigate through automated phone menus by sending touch-tone digits before giving up on the call. Useful for reaching human operators through phone trees on outbound calls.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.ivrNavigation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables IVR menu navigation using DTMF tone sending. When enabled, the agent attempts to navigate through automated phone menus by sending touch-tone digits before giving up on the call. Useful for reaching human operators through phone trees on outbound calls.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.ivrNavigation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.ivrNavigation","typeLabel":"boolean | null"},"experimental":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Experimental features. `ivr_voice_recognition` (boolean) turns on audio-based machine detection;\n`ivr_voice_recognition_engine` selects its engine: `\"dasha\"` (default) or `\"amdy\"` (amdy.io).\n`ivr_voice_recognition_immediate` (boolean, amdy.io only) asks for a verdict as soon as amdy.io has one,\nwhich takes less audio but is less confident; off, amdy.io listens longer before deciding.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Experimental features. `ivr_voice_recognition` (boolean) turns on audio-based machine detection;\n`ivr_voice_recognition_engine` selects its engine: `\"dasha\"` (default) or `\"amdy\"` (amdy.io).\n`ivr_voice_recognition_immediate` (boolean, amdy.io only) asks for a verdict as soon as amdy.io has one,\nwhich takes less audio but is less confident; off, amdy.io listens longer before deciding.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental","typeLabel":"object | null"},"behavior":{"oneOf":[{"type":"object","description":"Behavior configuration controlling what the agent says or does when an answering machine or IVR is detected. Static behaviors use predefined phrases, while smart behaviors use the language model to generate contextual responses based on the conversation.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to guide the language model in generating voicemail messages. Provides context about what information to include, tone to use, or specific details to mention. Supports variable interpolation using {{variableName}} syntax for dynamic instructions based on call data.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to guide the language model in generating voicemail messages. Provides context about what information to include, tone to use, or specific details to mention. Supports variable interpolation using {{variableName}} syntax for dynamic instructions based on call data.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0.additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0","typeLabel":"object"},{"type":"object","description":"Behavior configuration controlling what the agent says or does when an answering machine or IVR is detected. Static behaviors use predefined phrases, while smart behaviors use the language model to generate contextual responses based on the conversation.","required":["type"],"properties":{"staticPhrase":{"oneOf":[{"type":"string","description":"Voicemail message to speak when an answering machine is detected. The agent says this exact phrase after detection. Supports variable interpolation using {{variableName}} syntax to include dynamic data like caller names, phone numbers, or appointment details in the message.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Voicemail message to speak when an answering machine is detected. The agent says this exact phrase after detection. Supports variable interpolation using {{variableName}} syntax to include dynamic data like caller names, phone numbers, or appointment details in the message.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior","typeLabel":"object · object · null"},"screeningAssistantBehavior":{"oneOf":[{"type":"object","description":"Optional prompt-driven behavior for automated assistants that screen calls before connecting the caller to a person.\nWhen omitted, call screening retains the existing pass-through behavior.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions that control what the agent says and how long it waits while screening is active.\nSupports variable interpolation using {{variableName}} syntax.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions that control what the agent says and how long it waits while screening is active.\nSupports variable interpolation using {{variableName}} syntax.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0.additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior","typeLabel":"object | null"},"staticPhraseForIVR":{"oneOf":[{"type":"string","description":"Deprecated static phrase for answering machine messages. Use the Behavior property instead for more flexible message configuration. This field supports variable interpolation using {{variableName}} syntax.","default":null,"deprecated":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.staticPhraseForIVR.oneOf.0","typeLabel":"string"},{"type":"null","description":"Deprecated static phrase for answering machine messages. Use the Behavior property instead for more flexible message configuration. This field supports variable interpolation using {{variableName}} syntax.","default":null,"deprecated":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.staticPhraseForIVR.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.staticPhraseForIVR","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection","typeLabel":"object | null"},"ambientNoise":{"oneOf":[{"type":"object","description":"Ambient background noise configuration. Adds realistic background sounds like cafe ambiance or office noise to make the agent sound more natural and human-like.","default":{"version":"v1","isEnabled":false,"ambientNoiseLevel":0.1},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables ambient noise playback. When enabled, the configured background sound or noise level is mixed with the agent's voice output.","default":false,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables ambient noise playback. When enabled, the configured background sound or noise level is mixed with the agent's voice output.","default":false,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.isEnabled","typeLabel":"boolean | null"},"ambientNoiseLevel":{"oneOf":[{"type":"number","description":"Volume level for the ambient noise relative to the agent's voice. Controls how loud the background noise is compared to the agent's speech. Lower values create subtle background ambience, higher values make the background more prominent.","format":"double","default":0.1,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.ambientNoiseLevel.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Volume level for the ambient noise relative to the agent's voice. Controls how loud the background noise is compared to the agent's speech. Lower values create subtle background ambience, higher values make the background more prominent.","format":"double","default":0.1,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.ambientNoiseLevel.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.ambientNoiseLevel","typeLabel":"number\u003cdouble> | null"},"backgroundSound":{"oneOf":[{"type":"string","description":"Identifier for the background sound to play. Specifies which ambient sound effect or noise pattern to use, such as office sounds, cafe ambience, or generic background noise.","default":null,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.backgroundSound.oneOf.0","typeLabel":"string"},{"type":"null","description":"Identifier for the background sound to play. Specifies which ambient sound effect or noise pattern to use, such as office sounds, cafe ambience, or generic background noise.","default":null,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.backgroundSound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.backgroundSound","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise","typeLabel":"object | null"},"rag":{"oneOf":[{"type":"object","description":"RAG (Retrieval-Augmented Generation) feature for knowledge base integration. Enables the agent to search and retrieve information from connected knowledge bases during conversations.","required":["kbLinks"],"properties":{"kbLinks":{"type":"array","items":{"required":["id"],"type":"object","properties":{"id":{"maxLength":255,"minLength":1,"type":"string","description":"Unique identifier of the knowledge base to link. References a knowledge base that has been created and contains indexed documents, articles, or reference materials that the agent can search.","isRequired":true,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.kbLinks.items.[INDEX].id","typeLabel":"string"}},"additionalProperties":false,"description":"Knowledge base link reference for RAG (Retrieval-Augmented Generation) feature. Points to a knowledge base that the agent can search during conversations to retrieve relevant information for answering questions. The knowledge base must be created and populated with documents before being linked to the agent.","uniqueKey":"config.features.oneOf.0.rag.oneOf.0.kbLinks.items.[INDEX]","typeLabel":"object"},"description":"List of knowledge base references that the agent can search. Each link identifies a knowledge base containing documents, FAQs, or reference materials. The agent can query these knowledge bases during conversations to augment its responses with retrieved information.","isRequired":true,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.kbLinks","typeLabel":"object[]"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables RAG functionality. When enabled, the agent can search linked knowledge bases during conversations to retrieve relevant information for answering user questions with accurate, contextual responses.","default":false,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables RAG functionality. When enabled, the agent can search linked knowledge bases during conversations to retrieve relevant information for answering user questions with accurate, contextual responses.","default":false,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mode":{"oneOf":[{"type":"string","description":"How the agent searches its knowledge bases in text chat: \"everyTurn\" (the default when omitted) searches once before every reply; \"tool\" lets the agent call a searchKnowledgeBase tool when it needs facts, as many times as a reply needs. Applies to text chat only; voice calls search on every turn in either mode.","enum":["everyTurn","tool"],"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.mode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.rag.oneOf.0.mode.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.mode","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.rag.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.rag","typeLabel":"object | null"},"languageSwitching":{"oneOf":[{"type":"object","description":"Language switching capability allowing the agent to switch between multiple languages during the call. Enables the agent to communicate in different languages within the same conversation.","default":{"version":"v1","isEnabled":true},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables the language switching capability. When enabled, the agent can switch languages mid-conversation in response to user requests to speak in a different language.","default":true,"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables the language switching capability. When enabled, the agent can switch languages mid-conversation in response to user requests to speak in a different language.","default":true,"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0.isEnabled","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.languageSwitching","typeLabel":"object | null"},"fillers":{"oneOf":[{"type":"object","description":"Filler words and phrases configuration. Controls natural speech patterns like \"um\", \"uh\", \"let me see\" to make the agent sound more conversational and human-like.","default":{"version":"v1","isEnabled":true,"strategy":{"type":"static","texts":["um"]}},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables filler word insertion. When enabled, the agent occasionally uses the configured filler phrases during conversations to sound more natural and less robotic.","default":true,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables filler word insertion. When enabled, the agent occasionally uses the configured filler phrases during conversations to sound more natural and less robotic.","default":true,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.isEnabled","typeLabel":"boolean | null"},"strategy":{"oneOf":[{"type":"object","description":"Strategy for selecting and inserting filler words. Static strategies use a predefined list of filler phrases. The strategy controls which fillers to use and how often they appear in the agent's speech.","default":{"type":"static","texts":["um"]},"required":["type"],"properties":{"texts":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.texts.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of filler phrases the agent can use. The agent randomly selects from these options when inserting verbal pauses. Common examples include \"um\", \"uh\", \"let me see\", \"well\", \"you know\", \"hmm\", or \"let me think\". Customize this list to control the agent's hesitation patterns and speaking style.","default":["um"],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.texts.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of filler phrases the agent can use. The agent randomly selects from these options when inserting verbal pauses. Common examples include \"um\", \"uh\", \"let me see\", \"well\", \"you know\", \"hmm\", or \"let me think\". Customize this list to control the agent's hesitation patterns and speaking style.","default":["um"],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.texts.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.texts","typeLabel":"string[] | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.fillers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers","typeLabel":"object | null"},"backchannel":{"oneOf":[{"type":"object","description":"Backchannel responses configuration. Controls brief acknowledgments like \"mm-hmm\", \"I see\", \"right\" that the agent uses while listening to show active engagement.","default":{"version":"v1","isEnabled":false},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables backchannel acknowledgments. When enabled, the agent produces listening cues while the user speaks to indicate attention and understanding.","default":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables backchannel acknowledgments. When enabled, the agent produces listening cues while the user speaks to indicate attention and understanding.","default":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.isEnabled","typeLabel":"boolean | null"},"behavior":{"oneOf":[{"type":"object","description":"Behavior configuration controlling when and how the agent produces backchannels. Static behaviors use configurable timing properties to determine when to insert acknowledgments. Smart behaviors use intelligent detection to produce backchannels at natural conversation points.","required":["type"],"properties":{"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to guide the AI in producing backchannels. Provides context about when or how to acknowledge, tone to use, or specific phrases to prefer. Supports variable interpolation using {{variableName}} syntax for dynamic instructions based on conversation data.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to guide the AI in producing backchannels. Provides context about when or how to acknowledge, tone to use, or specific phrases to prefer. Supports variable interpolation using {{variableName}} syntax for dynamic instructions based on conversation data.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.additionalInstructions","typeLabel":"string | null"},"frequency":{"oneOf":[{"type":"number","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Lower values make backchannels very rare, 0.5 provides moderate acknowledgments, and higher values produce frequent listening cues. Controls how often the AI decides to signal active listening during user speech.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.frequency.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Lower values make backchannels very rare, 0.5 provides moderate acknowledgments, and higher values produce frequent listening cues. Controls how often the AI decides to signal active listening during user speech.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.frequency.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.frequency","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0","typeLabel":"object"},{"type":"object","description":"Behavior configuration controlling when and how the agent produces backchannels. Static behaviors use configurable timing properties to determine when to insert acknowledgments. Smart behaviors use intelligent detection to produce backchannels at natural conversation points.","required":["type"],"properties":{"phrases":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.phrases.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of acknowledgment phrases the agent can use for backchannels. The agent randomly selects from these options when timing conditions are met. Common examples include \"uh-huh\", \"mm-hmm\", \"I see\", \"right\", \"okay\", or \"go on\". Supports variable interpolation using {{variableName}} syntax for dynamic phrases.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.phrases.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of acknowledgment phrases the agent can use for backchannels. The agent randomly selects from these options when timing conditions are met. Common examples include \"uh-huh\", \"mm-hmm\", \"I see\", \"right\", \"okay\", or \"go on\". Supports variable interpolation using {{variableName}} syntax for dynamic phrases.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.phrases.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.phrases","typeLabel":"string[] | null"},"minLengthVoice":{"oneOf":[{"type":"number","description":"Minimum duration in seconds the user must speak before a backchannel can be triggered. Prevents acknowledgments from interrupting very short utterances. The agent waits at least this long into user speech before considering backchannel insertion.","format":"double","default":10,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoice.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Minimum duration in seconds the user must speak before a backchannel can be triggered. Prevents acknowledgments from interrupting very short utterances. The agent waits at least this long into user speech before considering backchannel insertion.","format":"double","default":10,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoice.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoice","typeLabel":"number\u003cdouble> | null"},"minLengthVoiceDeviation":{"oneOf":[{"type":"number","description":"Percentage deviation for minimum voice length randomization, ranging from 0.0 to 1.0. Multiplied by MinLengthVoice to introduce natural variation in when backchannels can occur. Higher values create more unpredictability in timing for a more human-like pattern.","format":"double","default":0.25,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoiceDeviation.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Percentage deviation for minimum voice length randomization, ranging from 0.0 to 1.0. Multiplied by MinLengthVoice to introduce natural variation in when backchannels can occur. Higher values create more unpredictability in timing for a more human-like pattern.","format":"double","default":0.25,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoiceDeviation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoiceDeviation","typeLabel":"number\u003cdouble> | null"},"frequency":{"oneOf":[{"type":"number","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Controls how often acknowledgments occur when timing conditions are met. Lower values make backchannels rarer, higher values produce more frequent listening cues.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.frequency.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Controls how often acknowledgments occur when timing conditions are met. Lower values make backchannels rarer, higher values produce more frequent listening cues.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.frequency.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.frequency","typeLabel":"number\u003cdouble> | null"},"minCooldown":{"oneOf":[{"type":"number","description":"Minimum time in seconds that must elapse between consecutive backchannels. Prevents acknowledgments from occurring too close together. The agent waits at least this long after one backchannel before producing another.","format":"double","default":8,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldown.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Minimum time in seconds that must elapse between consecutive backchannels. Prevents acknowledgments from occurring too close together. The agent waits at least this long after one backchannel before producing another.","format":"double","default":8,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldown.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldown","typeLabel":"number\u003cdouble> | null"},"minCooldownDeviation":{"oneOf":[{"type":"number","description":"Percentage deviation for cooldown randomization, ranging from 0.0 to 1.0. Multiplied by MinCooldown to introduce natural variation in spacing between backchannels. Higher values create more unpredictable timing for a more human-like rhythm.","format":"double","default":0.25,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldownDeviation.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Percentage deviation for cooldown randomization, ranging from 0.0 to 1.0. Multiplied by MinCooldown to introduce natural variation in spacing between backchannels. Higher values create more unpredictable timing for a more human-like rhythm.","format":"double","default":0.25,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldownDeviation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldownDeviation","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1","typeLabel":"object"},{"type":"object","description":"Behavior configuration controlling when and how the agent produces backchannels. Static behaviors use configurable timing properties to determine when to insert acknowledgments. Smart behaviors use intelligent detection to produce backchannels at natural conversation points.","required":["type"],"properties":{"phrases":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.phrases.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of acknowledgment phrases the agent can use for backchannels. The agent randomly selects from these options when inserting listening cues. Common examples include \"uh-huh\", \"mm-hmm\", \"I see\", \"right\", \"okay\", or \"go on\". Supports variable interpolation using {{variableName}} syntax for dynamic phrases.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.phrases.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of acknowledgment phrases the agent can use for backchannels. The agent randomly selects from these options when inserting listening cues. Common examples include \"uh-huh\", \"mm-hmm\", \"I see\", \"right\", \"okay\", or \"go on\". Supports variable interpolation using {{variableName}} syntax for dynamic phrases.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.phrases.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.phrases","typeLabel":"string[] | null"},"frequency":{"oneOf":[{"type":"number","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Lower values make backchannels very rare, 0.5 provides moderate acknowledgments, and higher values produce frequent listening cues. Controls how often the agent signals active listening during user speech.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.frequency.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Lower values make backchannels very rare, 0.5 provides moderate acknowledgments, and higher values produce frequent listening cues. Controls how often the agent signals active listening during user speech.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.frequency.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.frequency","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.backchannel.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel","typeLabel":"object | null"},"turnTaking":{"oneOf":[{"type":"object","description":"Turn taking configuration for the main customer call. Controls which DashaScript VAD mode is passed to the initial connect operation.","default":{"version":"v1","vad":"asap_v2","vadFallback":"asap_v2"},"properties":{"vad":{"type":"string","description":"Voice activity detection mode passed to the main call connect options.","default":"asap_v2","enum":["asap_v1","asap_v2","flux","companion"],"uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.0.vad","typeLabel":"enum\u003cstring>"},"vadFallback":{"type":"string","description":"Fallback used only in companion mode. Omitted uses Platform's ASAP v2 default.","default":"asap_v2","enum":["asap_v2","asap_v1","legacy"],"uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.0.vadFallback","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.turnTaking","typeLabel":"object | null"},"companions":{"oneOf":[{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"oneOf":[{"type":"string","description":"Optional absolute ws/wss URL. Omit to resolve the companion by its registered name.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.url.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional absolute ws/wss URL. Omit to resolve the companion by its registered name.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.url","typeLabel":"string | null"},"streams":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.streams.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Subscribed streams: audio, vad, stt, tts, vad_prob. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.streams.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Subscribed streams: audio, vad, stt, tts, vad_prob. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.streams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.streams","typeLabel":"string[] | null"},"channels":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.channels.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Audio channels: in, out. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.channels.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Audio channels: in, out. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.channels.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.channels","typeLabel":"string[] | null"},"mic":{"oneOf":[{"type":"string","description":"Microphone source: raw or cleaned. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.mic.oneOf.0","typeLabel":"string"},{"type":"null","description":"Microphone source: raw or cleaned. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.mic.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.mic","typeLabel":"string | null"},"turn_control":{"oneOf":[{"type":"boolean","description":"Opt in to controlling turns when turnTaking.vad is companion.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.turn_control.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opt in to controlling turns when turnTaking.vad is companion.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.turn_control.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.turn_control","typeLabel":"boolean | null"},"interruption_control":{"oneOf":[{"type":"boolean","description":"Opt in to companion interruption decisions. Requires turn control.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.interruption_control.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opt in to companion interruption decisions. Requires turn control.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.interruption_control.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.interruption_control","typeLabel":"boolean | null"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional headers sent on the companion WebSocket connection.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional headers sent on the companion WebSocket connection.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers","typeLabel":"object | null"},"max_message_bytes":{"oneOf":[{"type":"integer","description":"Positive inbound message size limit in bytes.","format":"int32","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_message_bytes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Positive inbound message size limit in bytes.","format":"int32","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_message_bytes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_message_bytes","typeLabel":"integer\u003cint32> | null"},"max_messages_per_second":{"oneOf":[{"type":"number","description":"Positive inbound message rate limit.","format":"double","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_messages_per_second.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Positive inbound message rate limit.","format":"double","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_messages_per_second.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_messages_per_second","typeLabel":"number\u003cdouble> | null"},"params":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Companion-specific parameters, preserving nested JSON values.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Companion-specific parameters, preserving nested JSON values.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params","typeLabel":"object | null"}},"additionalProperties":false,"description":"Voice companion options for the main customer call. Field names match Platform's wire configuration.\nOmitted options inherit the registered companion's defaults. Provider secrets belong in Platform.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties","typeLabel":"object"},"description":"Optional voice companions for the main customer call, keyed by registered name.\nA custom companion may supply an absolute ws/wss URL. Omitted means no companions.","default":null,"uniqueKey":"config.features.oneOf.0.companions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"object","properties":{"url":{"oneOf":[{"type":"string","description":"Optional absolute ws/wss URL. Omit to resolve the companion by its registered name.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.url.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional absolute ws/wss URL. Omit to resolve the companion by its registered name.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.url","typeLabel":"string | null"},"streams":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.streams.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Subscribed streams: audio, vad, stt, tts, vad_prob. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.streams.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Subscribed streams: audio, vad, stt, tts, vad_prob. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.streams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.streams","typeLabel":"string[] | null"},"channels":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.channels.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Audio channels: in, out. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.channels.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Audio channels: in, out. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.channels.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.channels","typeLabel":"string[] | null"},"mic":{"oneOf":[{"type":"string","description":"Microphone source: raw or cleaned. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.mic.oneOf.0","typeLabel":"string"},{"type":"null","description":"Microphone source: raw or cleaned. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.mic.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.mic","typeLabel":"string | null"},"turn_control":{"oneOf":[{"type":"boolean","description":"Opt in to controlling turns when turnTaking.vad is companion.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.turn_control.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opt in to controlling turns when turnTaking.vad is companion.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.turn_control.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.turn_control","typeLabel":"boolean | null"},"interruption_control":{"oneOf":[{"type":"boolean","description":"Opt in to companion interruption decisions. Requires turn control.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.interruption_control.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opt in to companion interruption decisions. Requires turn control.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.interruption_control.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.interruption_control","typeLabel":"boolean | null"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional headers sent on the companion WebSocket connection.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional headers sent on the companion WebSocket connection.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers","typeLabel":"object | null"},"max_message_bytes":{"oneOf":[{"type":"integer","description":"Positive inbound message size limit in bytes.","format":"int32","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_message_bytes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Positive inbound message size limit in bytes.","format":"int32","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_message_bytes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_message_bytes","typeLabel":"integer\u003cint32> | null"},"max_messages_per_second":{"oneOf":[{"type":"number","description":"Positive inbound message rate limit.","format":"double","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_messages_per_second.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Positive inbound message rate limit.","format":"double","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_messages_per_second.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_messages_per_second","typeLabel":"number\u003cdouble> | null"},"params":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Companion-specific parameters, preserving nested JSON values.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Companion-specific parameters, preserving nested JSON values.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params","typeLabel":"object | null"}},"additionalProperties":false,"description":"Voice companion options for the main customer call. Field names match Platform's wire configuration.\nOmitted options inherit the registered companion's defaults. Provider secrets belong in Platform.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties","typeLabel":"object"},"description":"Optional voice companions for the main customer call, keyed by registered name.\nA custom companion may supply an absolute ws/wss URL. Omitted means no companions.","default":null,"uniqueKey":"config.features.oneOf.0.companions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions","typeLabel":"object | null"},"silenceManagement":{"oneOf":[{"type":"object","description":"Silence management configuration. Controls how the agent handles pauses and silence during conversations including timeout behavior and prompting strategies.","default":{"version":"v1","isEnabled":true,"maxReminderAttempts":2,"reminderSilenceThresholdSeconds":5,"endWhenReminderLimitExceeded":true},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables silence management. When enabled, the agent sends reminders when the user is silent and can automatically end conversations after inactivity thresholds are exceeded. When disabled, the agent waits indefinitely for user input without prompting or terminating.","default":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables silence management. When enabled, the agent sends reminders when the user is silent and can automatically end conversations after inactivity thresholds are exceeded. When disabled, the agent waits indefinitely for user input without prompting or terminating.","default":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.isEnabled","typeLabel":"boolean | null"},"maxReminderAttempts":{"oneOf":[{"type":"integer","description":"Maximum number of reminder attempts to make when the user is silent. After this limit is reached, behavior is controlled by EndWhenReminderLimitExceeded to determine whether to end the call or stop reminding.","format":"int32","default":2,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.maxReminderAttempts.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum number of reminder attempts to make when the user is silent. After this limit is reached, behavior is controlled by EndWhenReminderLimitExceeded to determine whether to end the call or stop reminding.","format":"int32","default":2,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.maxReminderAttempts.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.maxReminderAttempts","typeLabel":"integer\u003cint32> | null"},"reminderSilenceThresholdSeconds":{"oneOf":[{"type":"number","description":"Silence duration in seconds after which a reminder is triggered. The agent waits this long for user input before prompting the user to ensure they are still engaged in the conversation.","format":"double","default":5,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.reminderSilenceThresholdSeconds.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Silence duration in seconds after which a reminder is triggered. The agent waits this long for user input before prompting the user to ensure they are still engaged in the conversation.","format":"double","default":5,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.reminderSilenceThresholdSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.reminderSilenceThresholdSeconds","typeLabel":"number\u003cdouble> | null"},"endWhenReminderLimitExceeded":{"oneOf":[{"type":"boolean","description":"Controls whether to end the conversation when maximum reminder attempts have been exceeded. When true, the call terminates after all reminders are exhausted. When false, the agent stops sending reminders but keeps the conversation open, waiting indefinitely for user input.","default":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endWhenReminderLimitExceeded.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether to end the conversation when maximum reminder attempts have been exceeded. When true, the call terminates after all reminders are exhausted. When false, the agent stops sending reminders but keeps the conversation open, waiting indefinitely for user input.","default":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endWhenReminderLimitExceeded.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endWhenReminderLimitExceeded","typeLabel":"boolean | null"},"endAfterSilenceThresholdSeconds":{"oneOf":[{"type":"number","description":"Absolute silence duration in seconds after which the conversation is automatically ended, regardless of reminder attempts. Provides a hard timeout for user inactivity. When not specified, only reminder-based termination applies.","format":"double","default":null,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endAfterSilenceThresholdSeconds.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Absolute silence duration in seconds after which the conversation is automatically ended, regardless of reminder attempts. Provides a hard timeout for user inactivity. When not specified, only reminder-based termination applies.","format":"double","default":null,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endAfterSilenceThresholdSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endAfterSilenceThresholdSeconds","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement","typeLabel":"object | null"},"preConversationMedia":{"oneOf":[{"type":"object","description":"Pre-conversation media playback. Plays an audio file immediately when the call connects,\nbefore the conversation begins. The media plays once and is non-interruptible.\nCan be enabled independently for inbound, outbound, and web calls.","default":{"version":"v1","isEnabled":false,"enabledForInbound":false,"enabledForOutbound":false,"enabledForWebCall":false},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables pre-conversation media playback.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables pre-conversation media playback.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play before the conversation starts.\nMust reference a media file that has been uploaded to the system.","default":null,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play before the conversation starts.\nMust reference a media file that has been uploaded to the system.","default":null,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.mediaFilename","typeLabel":"string | null"},"enabledForInbound":{"oneOf":[{"type":"boolean","description":"Enables pre-conversation media for inbound phone calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForInbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables pre-conversation media for inbound phone calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForInbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForInbound","typeLabel":"boolean | null"},"enabledForOutbound":{"oneOf":[{"type":"boolean","description":"Enables pre-conversation media for outbound phone calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForOutbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables pre-conversation media for outbound phone calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForOutbound","typeLabel":"boolean | null"},"enabledForWebCall":{"oneOf":[{"type":"boolean","description":"Enables pre-conversation media for web-based voice calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForWebCall.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables pre-conversation media for web-based voice calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForWebCall.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForWebCall","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia","typeLabel":"object | null"},"noiseSuppression":{"oneOf":[{"type":"object","description":"Noise suppression configuration for filtering background noise from call audio.\nSupports \"none\" (disabled) or \"krisp\" (Krisp engine, additional fee applies).\nAlso controls the noise suppression level and recording write strategy.","default":{"version":"v1","isEnabled":false,"type":"none","noiseSuppressionLevel":75,"recordWriteStrategy":"raw"},"properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables noise suppression. When disabled, no noise suppression is applied regardless of other settings.","default":false,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables noise suppression. When disabled, no noise suppression is applied regardless of other settings.","default":false,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.isEnabled","typeLabel":"boolean | null"},"type":{"oneOf":[{"type":"string","description":"The noise suppression engine to use.","default":"none","enum":["none","krisp"],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.type.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.type","typeLabel":"enum\u003cstring> | null"},"noiseSuppressionLevel":{"oneOf":[{"type":"integer","description":"The noise suppression level, from 0 (minimum) to 100 (maximum). Default is 75.\nControls how aggressively background noise is filtered.","format":"int32","default":75,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.noiseSuppressionLevel.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"The noise suppression level, from 0 (minimum) to 100 (maximum). Default is 75.\nControls how aggressively background noise is filtered.","format":"int32","default":75,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.noiseSuppressionLevel.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.noiseSuppressionLevel","typeLabel":"integer\u003cint32> | null"},"recordWriteStrategy":{"oneOf":[{"type":"string","description":"Controls what audio is stored in the call recording.\nDefault is \"raw\".","default":"raw","enum":["raw","cleaned"],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.recordWriteStrategy.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.recordWriteStrategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.recordWriteStrategy","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features","typeLabel":"object | null"},"mcpConnections":{"oneOf":[{"type":"array","items":{"required":["name","serverUrl"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Display name for this MCP connection. Used to identify the connection in logs and configuration.","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].name","typeLabel":"string"},"serverUrl":{"type":"string","description":"MCP server URL to connect to. The URL format depends on the transport protocol (SSE uses HTTP/HTTPS endpoints, StreamableHTTP uses HTTP endpoints).","format":"uri","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].serverUrl","typeLabel":"string\u003curi>"},"authentication":{"oneOf":[{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["apiKey","type"],"properties":{"apiKey":{"minLength":1,"type":"string","description":"API key value to send with requests. This is the secret key provided by the MCP server.","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.apiKey","typeLabel":"string"},"headerName":{"oneOf":[{"type":"string","description":"HTTP header name for the API key. Defaults to \"Authorization\" (the key is sent as the raw value, without a \"Bearer\" prefix). Set a custom header name such as \"X-API-Key\" if the MCP server expects one.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.headerName.oneOf.0","typeLabel":"string"},{"type":"null","description":"HTTP header name for the API key. Defaults to \"Authorization\" (the key is sent as the raw value, without a \"Bearer\" prefix). Set a custom header name such as \"X-API-Key\" if the MCP server expects one.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.headerName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.headerName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0","typeLabel":"object"},{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["token","type"],"properties":{"token":{"minLength":1,"type":"string","description":"Bearer token value without the \"Bearer \" prefix. The system automatically adds the prefix when sending requests. This is the OAuth or JWT token provided by the MCP server or authorization service.","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.1.token","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.1","typeLabel":"object"},{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["type"],"properties":{},"additionalProperties":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication","typeLabel":"object · object · object · null"},"customHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with each request to the MCP server. Useful for passing additional metadata or configuration to the server.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with each request to the MCP server. Useful for passing additional metadata or configuration to the server.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Whether this MCP connection is enabled. When disabled, the agent will not connect to this MCP server or use its tools.","default":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether this MCP connection is enabled. When disabled, the agent will not connect to this MCP server or use its tools.","default":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isEnabled","typeLabel":"boolean | null"},"description":{"oneOf":[{"type":"string","description":"Optional description explaining the purpose of this MCP connection or what services it provides.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional description explaining the purpose of this MCP connection or what services it provides.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].description","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for MCP communication. Supported values are SSE (Server-Sent Events for persistent connections) and StreamableHTTP (for request-response patterns).","default":"SSE","enum":["SSE","StreamableHTTP"],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].transport","typeLabel":"enum\u003cstring> | null"},"blackListTools":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].blackListTools.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of tool names to exclude from this MCP connection. Tools in this list will not be available to the agent even if the MCP server provides them. Useful for restricting access to specific tools.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].blackListTools.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of tool names to exclude from this MCP connection. Tools in this list will not be available to the agent even if the MCP server provides them. Useful for restricting access to specific tools.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].blackListTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].blackListTools","typeLabel":"string[] | null"},"whiteListTools":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].whiteListTools.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of tool names to allow from this MCP connection. When specified, only tools in this list will be available to the agent. If not specified, all tools from the server are available (subject to BlackListTools).","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].whiteListTools.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of tool names to allow from this MCP connection. When specified, only tools in this list will be available to the agent. If not specified, all tools from the server are available (subject to BlackListTools).","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].whiteListTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].whiteListTools","typeLabel":"string[] | null"},"isLongRunning":{"oneOf":[{"type":"boolean","description":"Whether every tool from this MCP connection is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the MCP server answers. Use LongRunningTools instead to mark only some of the connection's tools. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isLongRunning.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether every tool from this MCP connection is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the MCP server answers. Use LongRunningTools instead to mark only some of the connection's tools. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isLongRunning.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isLongRunning","typeLabel":"boolean | null"},"longRunningTools":{"oneOf":[{"type":"array","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Raw MCP tool name, as reported by the MCP server and without the connection prefix.","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX].name","typeLabel":"string"},"additionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX].additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX].additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX].additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"description":"Marks a single tool of an MCP connection as slow. A slow tool never blocks the conversation: the agent gets an immediate acknowledgement, keeps talking to the user, and the real result is added to the conversation history once the MCP server answers.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Individual tools of this connection that are slow, each with optional extra guidance for the agent. Tools listed here are slow even when IsLongRunning is disabled; when IsLongRunning is enabled every tool of the connection is slow and this list only supplies the per-tool guidance. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Raw MCP tool name, as reported by the MCP server and without the connection prefix."},"additionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null},{"type":"null","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null}]}},"additionalProperties":false,"description":"Marks a single tool of an MCP connection as slow. A slow tool never blocks the conversation: the agent gets an immediate acknowledgement, keeps talking to the user, and the real result is added to the conversation history once the MCP server answers."},"description":"Individual tools of this connection that are slow, each with optional extra guidance for the agent. Tools listed here are slow even when IsLongRunning is disabled; when IsLongRunning is enabled every tool of the connection is slow and this list only supplies the per-tool guidance. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"Model Context Protocol connection configuration for integrating external services with the agent. Defines how to connect to an MCP server including server URL, authentication, transport protocol, custom headers, and tool filtering.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Model Context Protocol connections for integrating external services. Allows the agent to connect to MCP servers via SSE or HTTP to access external tools and data sources.","default":[],"uniqueKey":"config.mcpConnections.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["name","serverUrl"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Display name for this MCP connection. Used to identify the connection in logs and configuration."},"serverUrl":{"type":"string","description":"MCP server URL to connect to. The URL format depends on the transport protocol (SSE uses HTTP/HTTPS endpoints, StreamableHTTP uses HTTP endpoints).","format":"uri"},"authentication":{"oneOf":[{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["apiKey","type"],"properties":{"apiKey":{"minLength":1,"type":"string","description":"API key value to send with requests. This is the secret key provided by the MCP server."},"headerName":{"oneOf":[{"type":"string","description":"HTTP header name for the API key. Defaults to \"Authorization\" (the key is sent as the raw value, without a \"Bearer\" prefix). Set a custom header name such as \"X-API-Key\" if the MCP server expects one."},{"type":"null","description":"HTTP header name for the API key. Defaults to \"Authorization\" (the key is sent as the raw value, without a \"Bearer\" prefix). Set a custom header name such as \"X-API-Key\" if the MCP server expects one."}]}},"additionalProperties":false},{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["token","type"],"properties":{"token":{"minLength":1,"type":"string","description":"Bearer token value without the \"Bearer \" prefix. The system automatically adds the prefix when sending requests. This is the OAuth or JWT token provided by the MCP server or authorization service."}},"additionalProperties":false},{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["type"],"properties":{},"additionalProperties":false},{"type":"null"}]},"customHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string"},"description":"Custom HTTP headers to include with each request to the MCP server. Useful for passing additional metadata or configuration to the server."},{"type":"null","additionalProperties":{"type":"string"},"description":"Custom HTTP headers to include with each request to the MCP server. Useful for passing additional metadata or configuration to the server."}]},"isEnabled":{"oneOf":[{"type":"boolean","description":"Whether this MCP connection is enabled. When disabled, the agent will not connect to this MCP server or use its tools.","default":true},{"type":"null","description":"Whether this MCP connection is enabled. When disabled, the agent will not connect to this MCP server or use its tools.","default":true}]},"description":{"oneOf":[{"type":"string","description":"Optional description explaining the purpose of this MCP connection or what services it provides.","default":null},{"type":"null","description":"Optional description explaining the purpose of this MCP connection or what services it provides.","default":null}]},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for MCP communication. Supported values are SSE (Server-Sent Events for persistent connections) and StreamableHTTP (for request-response patterns).","default":"SSE","enum":["SSE","StreamableHTTP"]},{"type":"null"}]},"blackListTools":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"List of tool names to exclude from this MCP connection. Tools in this list will not be available to the agent even if the MCP server provides them. Useful for restricting access to specific tools.","default":null},{"type":"null","items":{"type":"string"},"description":"List of tool names to exclude from this MCP connection. Tools in this list will not be available to the agent even if the MCP server provides them. Useful for restricting access to specific tools.","default":null}]},"whiteListTools":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"List of tool names to allow from this MCP connection. When specified, only tools in this list will be available to the agent. If not specified, all tools from the server are available (subject to BlackListTools).","default":null},{"type":"null","items":{"type":"string"},"description":"List of tool names to allow from this MCP connection. When specified, only tools in this list will be available to the agent. If not specified, all tools from the server are available (subject to BlackListTools).","default":null}]},"isLongRunning":{"oneOf":[{"type":"boolean","description":"Whether every tool from this MCP connection is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the MCP server answers. Use LongRunningTools instead to mark only some of the connection's tools. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false},{"type":"null","description":"Whether every tool from this MCP connection is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the MCP server answers. Use LongRunningTools instead to mark only some of the connection's tools. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false}]},"longRunningTools":{"oneOf":[{"type":"array","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Raw MCP tool name, as reported by the MCP server and without the connection prefix."},"additionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null},{"type":"null","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null}]}},"additionalProperties":false,"description":"Marks a single tool of an MCP connection as slow. A slow tool never blocks the conversation: the agent gets an immediate acknowledgement, keeps talking to the user, and the real result is added to the conversation history once the MCP server answers."},"description":"Individual tools of this connection that are slow, each with optional extra guidance for the agent. Tools listed here are slow even when IsLongRunning is disabled; when IsLongRunning is enabled every tool of the connection is slow and this list only supplies the per-tool guidance. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":null},{"type":"null","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Raw MCP tool name, as reported by the MCP server and without the connection prefix."},"additionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null},{"type":"null","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null}]}},"additionalProperties":false,"description":"Marks a single tool of an MCP connection as slow. A slow tool never blocks the conversation: the agent gets an immediate acknowledgement, keeps talking to the user, and the real result is added to the conversation history once the MCP server answers."},"description":"Individual tools of this connection that are slow, each with optional extra guidance for the agent. Tools listed here are slow even when IsLongRunning is disabled; when IsLongRunning is enabled every tool of the connection is slow and this list only supplies the per-tool guidance. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":null}]}},"additionalProperties":false,"description":"Model Context Protocol connection configuration for integrating external services with the agent. Defines how to connect to an MCP server including server URL, authentication, transport protocol, custom headers, and tool filtering."},"description":"Model Context Protocol connections for integrating external services. Allows the agent to connect to MCP servers via SSE or HTTP to access external tools and data sources.","default":[],"uniqueKey":"config.mcpConnections.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections","typeLabel":"object[] | null"},"startWebhook":{"oneOf":[{"type":"object","description":"Webhook URL called when a call starts, before the conversation begins. Allows you to inject dynamic data or configuration at call initiation time.","required":["webhook"],"properties":{"webhook":{"type":"object","description":"Webhook configuration defining the endpoint, headers, and request settings for start-of-conversation notifications. The system sends conversation initiation data to this webhook and waits for a response.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.startWebhook.oneOf.0.webhook.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.startWebhook.oneOf.0.webhook.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.startWebhook.oneOf.0.webhook.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.startWebhook.oneOf.0.webhook.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.headers","typeLabel":"object | null"},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"],"isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.httpMethod","typeLabel":"enum\u003cstring>"},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams","typeLabel":"object | null"},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain.","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0.template","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook","typeLabel":"object"},"fallbackResponse":{"oneOf":[{"type":"object","description":"Fallback response to use when the webhook call fails or times out. Determines whether to accept or reject the conversation if the webhook endpoint is unavailable or returns an error. Can be configured to accept the call with default settings or reject it.","default":{"accept":false,"reasonMessage":"Webhook for started webhook failed"},"properties":{"overrideAgentConfig":{"oneOf":[{"type":"object","description":"Optional modified agent configuration to use for this call instead of the original. Allows customizing the agent's behavior, language model settings, prompts, voice, tools, or any other configuration based on external logic or data. The entire configuration is replaced, not merged, so include all settings you want to apply.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideAgentConfig.oneOf.0","typeLabel":"object"},{"type":"null","description":"Optional modified agent configuration to use for this call instead of the original. Allows customizing the agent's behavior, language model settings, prompts, voice, tools, or any other configuration based on external logic or data. The entire configuration is replaced, not merged, so include all settings you want to apply.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideAgentConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideAgentConfig","typeLabel":"object | null"},"additionalData":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Additional data variables to use for this call. These values can be referenced in prompts using {{variableName}} syntax and override or supplement the agent's default AdditionalData. Useful for personalizing the conversation based on external context or user information.","uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Additional data variables to use for this call. These values can be referenced in prompts using {{variableName}} syntax and override or supplement the agent's default AdditionalData. Useful for personalizing the conversation based on external context or user information.","uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData","typeLabel":"object | null"},"overrideOutboundConfig":{"oneOf":[{"type":"object","description":"Optional override for outbound SIP configuration. Allows changing the SIP credentials, server, or transport settings for this specific outbound call without modifying the agent's default SIP configuration.","properties":{"phoneNumber":{"oneOf":[{"maxLength":255,"type":"string","description":"Phone number to use for this call instead of the agent's default. Overrides which number appears as the caller ID and which SIP registration is used for the call.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.phoneNumber.oneOf.0","typeLabel":"string"},{"maxLength":255,"type":"null","description":"Phone number to use for this call instead of the agent's default. Overrides which number appears as the caller ID and which SIP registration is used for the call.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.phoneNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.phoneNumber","typeLabel":"string | null"},"credentialsId":{"oneOf":[{"type":"string","description":"SIP credentials to use for this call instead of the agent's default. Allows routing the call through a different SIP trunk, useful for failover, cost optimization, or geographic routing.","format":"uuid","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.credentialsId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"SIP credentials to use for this call instead of the agent's default. Allows routing the call through a different SIP trunk, useful for failover, cost optimization, or geographic routing.","format":"uuid","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.credentialsId.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.credentialsId","typeLabel":"string\u003cuuid> | null"},"displayName":{"oneOf":[{"maxLength":255,"type":"string","description":"Display name to use for caller ID for this call instead of the phone number's default. Overrides the caller ID name shown to the recipient.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"maxLength":255,"type":"null","description":"Display name to use for caller ID for this call instead of the phone number's default. Overrides the caller ID name shown to the recipient.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.displayName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0","typeLabel":"object"},{"type":"object","description":"Fallback response to use when the webhook call fails or times out. Determines whether to accept or reject the conversation if the webhook endpoint is unavailable or returns an error. Can be configured to accept the call with default settings or reject it.","default":{"accept":false,"reasonMessage":"Webhook for started webhook failed"},"required":["reasonMessage"],"properties":{"reasonMessage":{"minLength":1,"type":"string","description":"Explanation of why the call is being rejected. This message is used for logging and debugging purposes to understand why external logic determined the call should not proceed.","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.1.reasonMessage","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse","typeLabel":"object · object · null"},"isEnabledForInbound":{"oneOf":[{"type":"boolean","description":"Enables the start webhook for inbound phone calls. When enabled, the webhook is triggered when someone calls one of your configured phone numbers, allowing you to accept or reject incoming calls based on external logic.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForInbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables the start webhook for inbound phone calls. When enabled, the webhook is triggered when someone calls one of your configured phone numbers, allowing you to accept or reject incoming calls based on external logic.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForInbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForInbound","typeLabel":"boolean | null"},"isEnabledForOutbound":{"oneOf":[{"type":"boolean","description":"Enables the start webhook for outbound phone calls. When enabled, the webhook is triggered before making an outbound call, allowing you to modify call parameters or cancel the call based on external conditions.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForOutbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables the start webhook for outbound phone calls. When enabled, the webhook is triggered before making an outbound call, allowing you to modify call parameters or cancel the call based on external conditions.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForOutbound","typeLabel":"boolean | null"},"isEnabledForWidget":{"oneOf":[{"type":"boolean","description":"Enables the start webhook for widget-based conversations. When enabled, the webhook is triggered when a user initiates a conversation through your web widget, allowing you to accept or reject widget interactions.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForWidget.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables the start webhook for widget-based conversations. When enabled, the webhook is triggered when a user initiates a conversation through your web widget, allowing you to accept or reject widget interactions.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForWidget.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForWidget","typeLabel":"boolean | null"},"timeout":{"oneOf":[{"type":"number","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the fallback response is used. Controls how long the system waits before proceeding with or rejecting the conversation.","format":"double","default":10,"uniqueKey":"config.startWebhook.oneOf.0.timeout.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the fallback response is used. Controls how long the system waits before proceeding with or rejecting the conversation.","format":"double","default":10,"uniqueKey":"config.startWebhook.oneOf.0.timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.timeout","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook","typeLabel":"object | null"},"tools":{"oneOf":[{"type":"array","items":{"required":["description","name","schema","webhook"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Tool name identifier. Used by the language model to reference this tool when deciding which function to call.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].name","typeLabel":"string"},"schema":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].schema.additionalProperties","typeLabel":"any"},"description":"JSON Schema defining the tool's input parameters. Describes what arguments the tool accepts, their types, and which parameters are required. The language model uses this schema to generate valid function calls.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].schema","typeLabel":"object"},"webhook":{"type":"object","description":"Webhook endpoint to call when the tool is invoked. The system sends a POST request with the tool parameters to this URL and returns the response to the language model.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers","typeLabel":"object | null"},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"],"isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.httpMethod","typeLabel":"enum\u003cstring>"},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams","typeLabel":"object | null"},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.0.template","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.0","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook","typeLabel":"object"},"description":{"minLength":1,"type":"string","description":"Tool description explaining what the tool does and when to use it. The language model uses this description to decide whether this tool is appropriate for the current conversation context.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].description","typeLabel":"string"},"fallBackResult":{"oneOf":[{"description":"Fallback result to return if the webhook call fails. When specified, the agent continues the conversation using this result instead of reporting an error to the user.","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].fallBackResult.oneOf.0","typeLabel":"any"},{"description":"Fallback result to return if the webhook call fails. When specified, the agent continues the conversation using this result instead of reporting an error to the user.","default":null,"type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].fallBackResult.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].fallBackResult","typeLabel":"any | null"},"timeoutSeconds":{"oneOf":[{"type":"integer","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the call is considered failed and the fallback result is used if available.","format":"int32","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].timeoutSeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the call is considered failed and the fallback result is used if available.","format":"int32","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].timeoutSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].timeoutSeconds","typeLabel":"integer\u003cint32> | null"},"retryCount":{"oneOf":[{"type":"integer","description":"Number of retry attempts if the webhook call fails. Helps handle transient network errors or temporary service unavailability.","format":"int32","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].retryCount.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Number of retry attempts if the webhook call fails. Helps handle transient network errors or temporary service unavailability.","format":"int32","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].retryCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].retryCount","typeLabel":"integer\u003cint32> | null"},"isLongRunning":{"oneOf":[{"type":"boolean","description":"Whether this tool is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the webhook answers. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].isLongRunning.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether this tool is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the webhook answers. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].isLongRunning.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].isLongRunning","typeLabel":"boolean | null"},"longRunningAdditionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the operation usually takes. Only used when IsLongRunning is enabled and enhanced tooling is disabled.","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].longRunningAdditionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Extra guidance for the agent about this slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the operation usually takes. Only used when IsLongRunning is enabled and enhanced tooling is disabled.","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].longRunningAdditionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].longRunningAdditionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"description":"Custom tool definition for language model function calling. Describes a function that the agent can invoke during conversations to perform actions or retrieve information through webhook calls.","uniqueKey":"config.tools.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Custom tools available to the agent during conversations. Each tool defines a function the agent can call with parameters and expected output. The agent will use these tools when needed to accomplish tasks beyond conversation.","default":[],"uniqueKey":"config.tools.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","name","schema","webhook"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Tool name identifier. Used by the language model to reference this tool when deciding which function to call."},"schema":{"type":"object","additionalProperties":{"oneOf":[{}]},"description":"JSON Schema defining the tool's input parameters. Describes what arguments the tool accepts, their types, and which parameters are required. The language model uses this schema to generate valid function calls."},"webhook":{"type":"object","description":"Webhook endpoint to call when the tool is invoked. The system sends a POST request with the tool parameters to this URL and returns the response to the language model.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint."},{"type":"null","additionalProperties":{"type":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint."}]},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"]},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands."},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands."}]},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain."}},"additionalProperties":false},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result."},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result."}]}},"additionalProperties":false},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name."},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name."}]}},"additionalProperties":false},{"type":"null"}]}},"additionalProperties":false},{"type":"null"}]}},"additionalProperties":false},"description":{"minLength":1,"type":"string","description":"Tool description explaining what the tool does and when to use it. The language model uses this description to decide whether this tool is appropriate for the current conversation context."},"fallBackResult":{"oneOf":[{"description":"Fallback result to return if the webhook call fails. When specified, the agent continues the conversation using this result instead of reporting an error to the user.","default":null},{"description":"Fallback result to return if the webhook call fails. When specified, the agent continues the conversation using this result instead of reporting an error to the user.","default":null,"type":"null"}]},"timeoutSeconds":{"oneOf":[{"type":"integer","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the call is considered failed and the fallback result is used if available.","format":"int32","default":null},{"type":"null","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the call is considered failed and the fallback result is used if available.","format":"int32","default":null}]},"retryCount":{"oneOf":[{"type":"integer","description":"Number of retry attempts if the webhook call fails. Helps handle transient network errors or temporary service unavailability.","format":"int32","default":null},{"type":"null","description":"Number of retry attempts if the webhook call fails. Helps handle transient network errors or temporary service unavailability.","format":"int32","default":null}]},"isLongRunning":{"oneOf":[{"type":"boolean","description":"Whether this tool is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the webhook answers. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false},{"type":"null","description":"Whether this tool is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the webhook answers. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false}]},"longRunningAdditionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the operation usually takes. Only used when IsLongRunning is enabled and enhanced tooling is disabled.","default":null},{"type":"null","description":"Extra guidance for the agent about this slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the operation usually takes. Only used when IsLongRunning is enabled and enhanced tooling is disabled.","default":null}]}},"additionalProperties":false,"description":"Custom tool definition for language model function calling. Describes a function that the agent can invoke during conversations to perform actions or retrieve information through webhook calls."},"description":"Custom tools available to the agent during conversations. Each tool defines a function the agent can call with parameters and expected output. The agent will use these tools when needed to accomplish tasks beyond conversation.","default":[],"uniqueKey":"config.tools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools","typeLabel":"object[] | null"},"builtInTools":{"oneOf":[{"type":"array","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Built-in tool name. Currently supported tool is \"finishTheConversation\" for ending calls gracefully.","isRequired":true,"uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX].name","typeLabel":"string"},"additionalInstructions":{"oneOf":[{"type":"string","description":"Additional instructions for when and how to use this tool. Guides the agent on the appropriate circumstances to invoke the tool during conversations.","default":null,"uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX].additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Additional instructions for when and how to use this tool. Guides the agent on the appropriate circumstances to invoke the tool during conversations.","default":null,"uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX].additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX].additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"description":"Configuration for a built-in tool with custom usage instructions. Built-in tools are pre-defined system tools that don't require custom implementation, and this configuration allows you to specify when and how the agent should use them.","uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Built-in tools configuration with additional instructions for when and how to use them. Currently includes \"finishTheConversation\" tool with custom instructions that guide the agent on when to end calls gracefully. These are pre-defined system tools with configurable usage instructions.","default":[],"uniqueKey":"config.builtInTools.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Built-in tool name. Currently supported tool is \"finishTheConversation\" for ending calls gracefully."},"additionalInstructions":{"oneOf":[{"type":"string","description":"Additional instructions for when and how to use this tool. Guides the agent on the appropriate circumstances to invoke the tool during conversations.","default":null},{"type":"null","description":"Additional instructions for when and how to use this tool. Guides the agent on the appropriate circumstances to invoke the tool during conversations.","default":null}]}},"additionalProperties":false,"description":"Configuration for a built-in tool with custom usage instructions. Built-in tools are pre-defined system tools that don't require custom implementation, and this configuration allows you to specify when and how the agent should use them."},"description":"Built-in tools configuration with additional instructions for when and how to use them. Currently includes \"finishTheConversation\" tool with custom instructions that guide the agent on when to end calls gracefully. These are pre-defined system tools with configurable usage instructions.","default":[],"uniqueKey":"config.builtInTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.builtInTools","typeLabel":"object[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config","typeLabel":"object"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Whether the agent is enabled and can handle calls. When disabled, the agent cannot make outbound calls or handle inbound routing.","default":true,"uniqueKey":"isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether the agent is enabled and can handle calls. When disabled, the agent cannot make outbound calls or handle inbound routing.","default":true,"uniqueKey":"isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"isEnabled","typeLabel":"boolean | null"},"description":{"oneOf":[{"type":"string","description":"Optional description explaining the agent's purpose, behavior, or use case. Useful for documentation and team collaboration to understand what this agent is designed to do.","default":null,"uniqueKey":"description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional description explaining the agent's purpose, behavior, or use case. Useful for documentation and team collaboration to understand what this agent is designed to do.","default":null,"uniqueKey":"description.oneOf.1","typeLabel":"null"}],"uniqueKey":"description","typeLabel":"string | null"},"additionalData":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalData.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Default data for variable interpolation in agent prompts. Values can be referenced in prompts using {{variableName}} syntax. These serve as default values for the agent and can be overridden on a per-call basis when enqueueing calls.","uniqueKey":"additionalData.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalData.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Default data for variable interpolation in agent prompts. Values can be referenced in prompts using {{variableName}} syntax. These serve as default values for the agent and can be overridden on a per-call basis when enqueueing calls.","uniqueKey":"additionalData.oneOf.1","typeLabel":"null"}],"uniqueKey":"additionalData","typeLabel":"object | null"},"schedule":{"oneOf":[{"type":"object","description":"Time-based schedule defining when the agent can make outbound calls. Specifies available time slots for each day of the week and the timezone for schedule interpretation. Scheduled calls will only be placed during these time windows.","default":{"timezone":"UTC","mon":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"tue":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"wed":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"thu":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"fri":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"sat":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"sun":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}]},"required":["timezone"],"properties":{"timezone":{"minLength":1,"type":"string","description":"Timezone identifier for interpreting the schedule times. Uses IANA timezone database names like \"America/New_York\", \"Europe/London\", or \"UTC\". All time slots are interpreted in this timezone.","isRequired":true,"uniqueKey":"schedule.oneOf.0.timezone","typeLabel":"string"},"mon":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.mon.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Monday. Each slot defines a start and end time when outbound calls can be made. Multiple non-overlapping slots can be specified for the same day.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.mon.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Monday. Each slot defines a start and end time when outbound calls can be made. Multiple non-overlapping slots can be specified for the same day.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.mon.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.mon","typeLabel":"object[] | null"},"tue":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.tue.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Tuesday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.tue.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Tuesday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.tue.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.tue","typeLabel":"object[] | null"},"wed":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.wed.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Wednesday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.wed.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Wednesday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.wed.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.wed","typeLabel":"object[] | null"},"thu":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.thu.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Thursday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.thu.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Thursday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.thu.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.thu","typeLabel":"object[] | null"},"fri":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.fri.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Friday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.fri.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Friday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.fri.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.fri","typeLabel":"object[] | null"},"sat":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.sat.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Saturday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.sat.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Saturday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.sat.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.sat","typeLabel":"object[] | null"},"sun":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.oneOf.0.sun.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Sunday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.sun.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Sunday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.oneOf.0.sun.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.oneOf.0.sun","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"schedule.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"schedule.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule","typeLabel":"object | null"},"inboundSipConfig":{"oneOf":[{"type":"object","description":"Configuration for routing inbound calls to this agent. To configure phone number routing for incoming calls, use the SIP phone numbers API to assign a phone number to this agent instead of using this field directly.","properties":{"phoneNumber":{"oneOf":[{"maxLength":255,"type":"string","description":"Phone number that should route incoming calls to this agent. When specified, incoming calls to this phone number will be handled by this agent. The phone number must be configured in your SIP phone numbers.","default":null,"uniqueKey":"inboundSipConfig.oneOf.0.phoneNumber.oneOf.0","typeLabel":"string"},{"maxLength":255,"type":"null","description":"Phone number that should route incoming calls to this agent. When specified, incoming calls to this phone number will be handled by this agent. The phone number must be configured in your SIP phone numbers.","default":null,"uniqueKey":"inboundSipConfig.oneOf.0.phoneNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"inboundSipConfig.oneOf.0.phoneNumber","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"inboundSipConfig.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"inboundSipConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"inboundSipConfig","typeLabel":"object | null"},"expectedVersion":{"oneOf":[{"type":"integer","description":"Expected version number for optimistic concurrency control. If provided and does not match the current server version, the update will be rejected with a 409 Conflict response containing the current server state. Omit to skip version checking (not recommended for UI clients).","format":"int32","default":null,"uniqueKey":"expectedVersion.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Expected version number for optimistic concurrency control. If provided and does not match the current server version, the update will be rejected with a 409 Conflict response containing the current server state. Omit to skip version checking (not recommended for UI clients).","format":"int32","default":null,"uniqueKey":"expectedVersion.oneOf.1","typeLabel":"null"}],"uniqueKey":"expectedVersion","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","config":{"primaryLanguage":"\u003cstring>","ttsConfig":{"voiceId":"\u003cstring>","vendor":"\u003cstring>","model":null,"speed":1,"speedAdjustment":{"version":"v1","strategy":"OnRequest"},"vendorSpecificOptions":{},"responsiveness":null,"interruptionSensitivity":null,"pronunciationDictionary":{"id":"\u003cstring>","hash":"\u003cstring>"}},"llmConfig":{"model":"\u003cstring>","vendor":"\u003cstring>","prompt":"\u003cstring>","apiKey":null,"endpoint":null,"options":{"temperature":null,"maxTokens":null,"topP":null,"frequencyPenalty":null,"presencePenalty":null,"stop":null,"trailingPrompt":null,"reasoningMode":null,"maxRetries":null,"reasoningEffort":null},"vendorSpecificOptions":{},"toolScopes":null,"validateToolArguments":null,"enhancedTooling":{"isEnabled":false,"model":null}},"sttConfig":{"version":"v1","vendor":"Auto","vendorSpecificOptions":{}},"outboundSipConfig":{"server":"\u003cstring>","authUser":"\u003cstring>","domain":null,"password":null,"fromUser":null,"transport":"udp","cpsLimit":null,"cpsKey":null,"displayName":null},"resultWebhook":{"url":"\u003cstring>","headers":{},"customSettings":{"queryParams":{},"bodyFormat":{"template":"\u003cstring>"}}},"features":{"version":"v1","postCallAnalysis":[],"talkFirst":{"version":"v1","delay":1,"isEnabled":false,"interruptible":true},"maxDuration":{"version":"v1","maxDurationSeconds":3600,"maxDurationInTransferSeconds":7200,"isEnabled":true},"ivrDetection":{"version":"v1","isEnabled":true,"enabledForChat":false,"enabledForInbound":false,"enabledForOutbound":true,"enabledForWebCall":false,"ivrNavigation":false},"ambientNoise":{"version":"v1","isEnabled":false,"ambientNoiseLevel":0.1},"languageSwitching":{"version":"v1","isEnabled":true},"fillers":{"version":"v1","isEnabled":true,"strategy":{"type":"static","texts":["um"]}},"backchannel":{"version":"v1","isEnabled":false},"turnTaking":{"version":"v1","vad":"asap_v2","vadFallback":"asap_v2"},"silenceManagement":{"version":"v1","isEnabled":true,"maxReminderAttempts":2,"reminderSilenceThresholdSeconds":5,"endWhenReminderLimitExceeded":true},"preConversationMedia":{"version":"v1","isEnabled":false,"enabledForInbound":false,"enabledForOutbound":false,"enabledForWebCall":false},"noiseSuppression":{"version":"v1","isEnabled":false,"type":"none","noiseSuppressionLevel":75,"recordWriteStrategy":"raw"}},"mcpConnections":[],"startWebhook":{"webhook":{"url":"\u003cstring>","headers":{},"customSettings":{"queryParams":{},"bodyFormat":{"template":"\u003cstring>"}}},"fallbackResponse":{"accept":false,"reasonMessage":"Webhook for started webhook failed"},"isEnabledForInbound":false,"isEnabledForOutbound":false,"isEnabledForWidget":false,"timeout":10},"tools":[],"builtInTools":[]},"isEnabled":true,"description":null,"additionalData":{},"schedule":{"timezone":"UTC","mon":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"tue":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"wed":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"thu":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"fri":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"sat":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"sun":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}]},"inboundSipConfig":{"phoneNumber":null},"expectedVersion":null}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"603def63-2e4a-42ad-8a7a-1e928ea6d551":{"description":"Agent updated successfully","content":{"application/json":{"schema":{"required":["agentId","config","createdTime","inboundSipConfig","lastUpdateTime","name","orgId","schedule","version"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"type":"string","description":"Display name for the agent. Used to identify the agent in the UI, logs, and API responses.","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"config":{"type":"object","description":"Complete configuration for the agent's behavior including voice settings (TTS), language model (LLM), speech recognition (STT), outbound SIP configuration for making calls, webhooks for event notifications, features like RAG and transfers, MCP connections for external services, and custom tools. This defines how the agent will interact during conversations and what capabilities it has.","required":["llmConfig","primaryLanguage","ttsConfig"],"properties":{"primaryLanguage":{"minLength":1,"type":"string","description":"Primary language for the agent's conversations. Uses language codes like \"en-US\", \"es-ES\", \"fr-FR\". This determines the default language for speech synthesis and recognition.","isRequired":true,"uniqueKey":"config.primaryLanguage","typeLabel":"string"},"ttsConfig":{"type":"object","description":"Text-to-speech configuration controlling how the agent's voice sounds. Includes voice provider selection, voice ID, speed, stability, and pronunciation dictionary settings. Defines the agent's vocal characteristics during conversations.","required":["vendor","voiceId"],"properties":{"voiceId":{"minLength":1,"type":"string","description":"Voice identifier from the selected vendor. Specifies which voice the agent uses for speech synthesis. Each vendor has different voice IDs representing distinct voice characteristics like gender, accent, and speaking style.","isRequired":true,"uniqueKey":"config.ttsConfig.voiceId","typeLabel":"string"},"vendor":{"minLength":1,"type":"string","description":"Text-to-speech vendor providing the voice synthesis service. Identifies which TTS provider to use such as ElevenLabs, Cartesia, Dasha, Inworld, Lmnt, or Google. Different vendors offer different voice qualities, latency characteristics, and pricing.","isRequired":true,"uniqueKey":"config.ttsConfig.vendor","typeLabel":"string"},"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.ttsConfig.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.ttsConfig.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.version","typeLabel":"enum\u003cstring> | null"},"model":{"oneOf":[{"type":"string","description":"TTS model identifier for vendors that support multiple model versions. Allows selecting specific synthesis models or quality tiers when available from the vendor.","default":null,"uniqueKey":"config.ttsConfig.model.oneOf.0","typeLabel":"string"},{"type":"null","description":"TTS model identifier for vendors that support multiple model versions. Allows selecting specific synthesis models or quality tiers when available from the vendor.","default":null,"uniqueKey":"config.ttsConfig.model.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.model","typeLabel":"string | null"},"speed":{"oneOf":[{"type":"number","description":"Speech speed multiplier controlling how fast the agent speaks. Values above 1.0 increase speaking rate, values below 1.0 decrease it. Affects the overall pace of conversation and can be adjusted to match user preferences or content requirements.","format":"double","default":1,"uniqueKey":"config.ttsConfig.speed.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Speech speed multiplier controlling how fast the agent speaks. Values above 1.0 increase speaking rate, values below 1.0 decrease it. Affects the overall pace of conversation and can be adjusted to match user preferences or content requirements.","format":"double","default":1,"uniqueKey":"config.ttsConfig.speed.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.speed","typeLabel":"number\u003cdouble> | null"},"speedAdjustment":{"oneOf":[{"type":"object","description":"Speed adjustment settings controlling whether users can request the agent to speak faster or slower during conversations. Allows dynamic speed changes based on user feedback.","default":{"version":"v1","strategy":"OnRequest"},"required":["strategy"],"properties":{"strategy":{"type":"string","description":"Speed adjustment strategy determining when and how the agent can change its speaking rate. Controls whether speed adjustments are disabled entirely or enabled on user request.","enum":["Disabled","OnRequest"],"isRequired":true,"uniqueKey":"config.ttsConfig.speedAdjustment.oneOf.0.strategy","typeLabel":"enum\u003cstring>"},"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.ttsConfig.speedAdjustment.oneOf.0.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.ttsConfig.speedAdjustment.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.speedAdjustment.oneOf.0.version","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"uniqueKey":"config.ttsConfig.speedAdjustment.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.ttsConfig.speedAdjustment.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.speedAdjustment","typeLabel":"object | null"},"vendorSpecificOptions":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.ttsConfig.vendorSpecificOptions.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Vendor-specific TTS options that are unique to particular speech synthesis providers. Allows passing custom parameters for advanced voice configuration that isn't covered by standard settings.","uniqueKey":"config.ttsConfig.vendorSpecificOptions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.ttsConfig.vendorSpecificOptions.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Vendor-specific TTS options that are unique to particular speech synthesis providers. Allows passing custom parameters for advanced voice configuration that isn't covered by standard settings.","uniqueKey":"config.ttsConfig.vendorSpecificOptions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.vendorSpecificOptions","typeLabel":"object | null"},"responsiveness":{"oneOf":[{"maximum":1,"minimum":0,"type":"number","description":"Response timing control determining how quickly the agent begins speaking after the user finishes. Range is 0 to 1, where higher values make the agent respond faster and lower values add more deliberate pauses. Affects the conversational rhythm and turn-taking behavior.","format":"double","default":null,"uniqueKey":"config.ttsConfig.responsiveness.oneOf.0","typeLabel":"number\u003cdouble>"},{"maximum":1,"minimum":0,"type":"null","description":"Response timing control determining how quickly the agent begins speaking after the user finishes. Range is 0 to 1, where higher values make the agent respond faster and lower values add more deliberate pauses. Affects the conversational rhythm and turn-taking behavior.","format":"double","default":null,"uniqueKey":"config.ttsConfig.responsiveness.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.responsiveness","typeLabel":"number\u003cdouble> | null"},"interruptionSensitivity":{"oneOf":[{"maximum":1,"minimum":0,"type":"number","description":"Controls how easily the user can interrupt the agent while it is speaking. Range is 0 to 1, where higher values make interruptions easier to trigger and lower values require more user speech before the agent stops. A value of 0 makes the agent non-interruptible by normal speech. When unset, the agent uses its default interruptible behavior (equivalent to 1).","format":"double","default":null,"uniqueKey":"config.ttsConfig.interruptionSensitivity.oneOf.0","typeLabel":"number\u003cdouble>"},{"maximum":1,"minimum":0,"type":"null","description":"Controls how easily the user can interrupt the agent while it is speaking. Range is 0 to 1, where higher values make interruptions easier to trigger and lower values require more user speech before the agent stops. A value of 0 makes the agent non-interruptible by normal speech. When unset, the agent uses its default interruptible behavior (equivalent to 1).","format":"double","default":null,"uniqueKey":"config.ttsConfig.interruptionSensitivity.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.interruptionSensitivity","typeLabel":"number\u003cdouble> | null"},"pronunciationDictionary":{"oneOf":[{"type":"object","description":"Reference to a pronunciation dictionary for customizing how specific words or phrases are pronounced. Allows correcting mispronunciations, defining custom pronunciations for brand names, or adjusting phonetic rendering for domain-specific terminology.","required":["hash","id"],"properties":{"id":{"minLength":1,"type":"string","description":"Unique identifier of the pronunciation dictionary to use. References a dictionary that has been created and uploaded to the system containing custom phonetic rules and pronunciation mappings.","isRequired":true,"uniqueKey":"config.ttsConfig.pronunciationDictionary.oneOf.0.id","typeLabel":"string"},"hash":{"minLength":1,"type":"string","description":"Content hash of the pronunciation dictionary for version tracking and cache invalidation. Ensures the correct version of the dictionary is applied and allows detecting when dictionary content has been updated.","isRequired":true,"uniqueKey":"config.ttsConfig.pronunciationDictionary.oneOf.0.hash","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.ttsConfig.pronunciationDictionary.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.ttsConfig.pronunciationDictionary.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.ttsConfig.pronunciationDictionary","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.ttsConfig","typeLabel":"object"},"llmConfig":{"type":"object","description":"Language model configuration defining the agent's intelligence and conversation behavior. Includes model selection, system prompts, temperature, token limits, and conversation flow settings. Controls how the agent understands and responds to user input.","required":["model","prompt","vendor"],"properties":{"model":{"minLength":1,"type":"string","description":"Language model identifier. Specifies which model to use from the configured vendor.","isRequired":true,"uniqueKey":"config.llmConfig.model","typeLabel":"string"},"vendor":{"minLength":1,"type":"string","description":"Model vendor or provider identifier.","isRequired":true,"uniqueKey":"config.llmConfig.vendor","typeLabel":"string"},"prompt":{"minLength":1,"type":"string","description":"System prompt that defines the agent's personality, role, and behavior instructions. This prompt guides how the agent responds and interacts during conversations. Can reference variables from AdditionalData using {{variableName}} syntax.","isRequired":true,"uniqueKey":"config.llmConfig.prompt","typeLabel":"string"},"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.llmConfig.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.llmConfig.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.version","typeLabel":"enum\u003cstring> | null"},"apiKey":{"oneOf":[{"type":"string","description":"API key for authenticating with the language model provider. Used to authorize requests to the vendor's API.","default":null,"uniqueKey":"config.llmConfig.apiKey.oneOf.0","typeLabel":"string"},{"type":"null","description":"API key for authenticating with the language model provider. Used to authorize requests to the vendor's API.","default":null,"uniqueKey":"config.llmConfig.apiKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.apiKey","typeLabel":"string | null"},"endpoint":{"oneOf":[{"type":"string","description":"Custom API endpoint URL for the language model. Use when connecting to self-hosted models or alternative API gateways instead of the default vendor endpoint.","default":null,"uniqueKey":"config.llmConfig.endpoint.oneOf.0","typeLabel":"string"},{"type":"null","description":"Custom API endpoint URL for the language model. Use when connecting to self-hosted models or alternative API gateways instead of the default vendor endpoint.","default":null,"uniqueKey":"config.llmConfig.endpoint.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.endpoint","typeLabel":"string | null"},"options":{"oneOf":[{"type":"object","description":"Advanced language model parameters including temperature, max tokens, top P, frequency/presence penalties, stop sequences, trailing prompt, reasoning mode, and retry settings. Controls the model's creativity, response length, and behavior characteristics.","properties":{"temperature":{"oneOf":[{"type":"number","description":"Temperature controls randomness in responses. Higher values (e.g., 0.8-1.0) make output more creative and varied, while lower values (e.g., 0.1-0.3) make it more focused and deterministic. Range is typically 0.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.temperature.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Temperature controls randomness in responses. Higher values (e.g., 0.8-1.0) make output more creative and varied, while lower values (e.g., 0.1-0.3) make it more focused and deterministic. Range is typically 0.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.temperature.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.temperature","typeLabel":"number\u003cdouble> | null"},"maxTokens":{"oneOf":[{"type":"integer","description":"Maximum number of tokens the model can generate in a response. Limits the length of the agent's replies to control costs and response times.","format":"int32","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.maxTokens.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum number of tokens the model can generate in a response. Limits the length of the agent's replies to control costs and response times.","format":"int32","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.maxTokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.maxTokens","typeLabel":"integer\u003cint32> | null"},"topP":{"oneOf":[{"type":"number","description":"Top P (nucleus sampling) controls diversity by considering only the most probable tokens whose cumulative probability reaches this threshold. Range is 0.0 to 1.0, where lower values make responses more focused.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.topP.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Top P (nucleus sampling) controls diversity by considering only the most probable tokens whose cumulative probability reaches this threshold. Range is 0.0 to 1.0, where lower values make responses more focused.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.topP.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.topP","typeLabel":"number\u003cdouble> | null"},"frequencyPenalty":{"oneOf":[{"type":"number","description":"Frequency penalty reduces repetition of tokens based on how often they've appeared in the response. Higher values (e.g., 0.5-1.0) discourage repetition more strongly. Range is typically -2.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.frequencyPenalty.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Frequency penalty reduces repetition of tokens based on how often they've appeared in the response. Higher values (e.g., 0.5-1.0) discourage repetition more strongly. Range is typically -2.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.frequencyPenalty.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.frequencyPenalty","typeLabel":"number\u003cdouble> | null"},"presencePenalty":{"oneOf":[{"type":"number","description":"Presence penalty reduces repetition by penalizing tokens that have already appeared, regardless of frequency. Encourages the model to discuss new topics. Range is typically -2.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.presencePenalty.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Presence penalty reduces repetition by penalizing tokens that have already appeared, regardless of frequency. Encourages the model to discuss new topics. Range is typically -2.0 to 2.0.","format":"double","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.presencePenalty.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.presencePenalty","typeLabel":"number\u003cdouble> | null"},"stop":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.llmConfig.options.oneOf.0.stop.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Stop sequences that cause the model to stop generating tokens. When the model encounters any of these strings, it will immediately stop generating further output.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.stop.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Stop sequences that cause the model to stop generating tokens. When the model encounters any of these strings, it will immediately stop generating further output.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.stop.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.stop","typeLabel":"string[] | null"},"trailingPrompt":{"oneOf":[{"type":"string","description":"Trailing prompt appended to the conversation context before the model generates a response. Useful for providing last-minute instructions or context.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.trailingPrompt.oneOf.0","typeLabel":"string"},{"type":"null","description":"Trailing prompt appended to the conversation context before the model generates a response. Useful for providing last-minute instructions or context.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.trailingPrompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.trailingPrompt","typeLabel":"string | null"},"reasoningMode":{"oneOf":[{"type":"string","description":"Reasoning mode for models that support structured thinking. Controls how the model approaches problem-solving and response generation.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningMode.oneOf.0","typeLabel":"string"},{"type":"null","description":"Reasoning mode for models that support structured thinking. Controls how the model approaches problem-solving and response generation.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningMode.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningMode","typeLabel":"string | null"},"maxRetries":{"oneOf":[{"type":"integer","description":"Maximum number of retry attempts when API calls fail. Helps handle transient errors and rate limiting.","format":"int32","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.maxRetries.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum number of retry attempts when API calls fail. Helps handle transient errors and rate limiting.","format":"int32","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.maxRetries.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.maxRetries","typeLabel":"integer\u003cint32> | null"},"reasoningEffort":{"oneOf":[{"type":"string","description":"Reasoning effort level for models that support configurable thinking depth. Controls how much computational effort the model applies to reasoning through complex problems.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningEffort.oneOf.0","typeLabel":"string"},{"type":"null","description":"Reasoning effort level for models that support configurable thinking depth. Controls how much computational effort the model applies to reasoning through complex problems.","default":null,"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningEffort.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options.oneOf.0.reasoningEffort","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.llmConfig.options.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.llmConfig.options.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.options","typeLabel":"object | null"},"vendorSpecificOptions":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.llmConfig.vendorSpecificOptions.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Vendor-specific options and parameters that are unique to particular LLM providers. Allows passing custom configuration that isn't covered by standard options.","uniqueKey":"config.llmConfig.vendorSpecificOptions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.llmConfig.vendorSpecificOptions.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Vendor-specific options and parameters that are unique to particular LLM providers. Allows passing custom configuration that isn't covered by standard options.","uniqueKey":"config.llmConfig.vendorSpecificOptions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.vendorSpecificOptions","typeLabel":"object | null"},"toolScopes":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.llmConfig.toolScopes.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Tool scope restrictions for limiting which tools the language model can access. When specified, the model can only use tools matching these scope identifiers. If not specified, all configured tools are available.","default":null,"uniqueKey":"config.llmConfig.toolScopes.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Tool scope restrictions for limiting which tools the language model can access. When specified, the model can only use tools matching these scope identifiers. If not specified, all configured tools are available.","default":null,"uniqueKey":"config.llmConfig.toolScopes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.toolScopes","typeLabel":"string[] | null"},"validateToolArguments":{"oneOf":[{"type":"boolean","description":"Opts in to JSON Schema validation of custom webhook tool arguments before the webhook is called. False or omitted preserves existing behavior. Use minLength in string schemas to forbid empty strings.","default":null,"uniqueKey":"config.llmConfig.validateToolArguments.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opts in to JSON Schema validation of custom webhook tool arguments before the webhook is called. False or omitted preserves existing behavior. Use minLength in string schemas to forbid empty strings.","default":null,"uniqueKey":"config.llmConfig.validateToolArguments.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.validateToolArguments","typeLabel":"boolean | null"},"enhancedTooling":{"oneOf":[{"type":"object","description":"Enhanced tooling: more accurate tool calling at a higher LLM usage cost, optionally on a different OpenAI model. Disabled when not set. When enabled, the slow marks on custom tools and MCP connections (IsLongRunning, LongRunningTools) are not used.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Whether enhanced tooling is enabled. Disabled by default: the agent then behaves exactly as before.","default":false,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether enhanced tooling is enabled. Disabled by default: the agent then behaves exactly as before.","default":false,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.isEnabled","typeLabel":"boolean | null"},"model":{"oneOf":[{"type":"string","description":"OpenAI model used for tool calling when enhanced tooling is enabled. Leave empty to use the platform's default model for tool calling. Accepted values: gpt-6-luna, gpt-6-sol, gpt-5.6-luna, gpt-5.6-terra, gpt-4.1-mini, gpt-4.1.","default":null,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.model.oneOf.0","typeLabel":"string"},{"type":"null","description":"OpenAI model used for tool calling when enhanced tooling is enabled. Leave empty to use the platform's default model for tool calling. Accepted values: gpt-6-luna, gpt-6-sol, gpt-5.6-luna, gpt-5.6-terra, gpt-4.1-mini, gpt-4.1.","default":null,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.model.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0.model","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.llmConfig.enhancedTooling.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.llmConfig.enhancedTooling.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.llmConfig.enhancedTooling","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.llmConfig","typeLabel":"object"},"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.version","typeLabel":"enum\u003cstring> | null"},"sttConfig":{"oneOf":[{"type":"object","description":"Speech-to-text configuration for converting user speech to text. Includes provider selection and recognition settings. Controls how the agent understands spoken input from users.","default":{"version":"v1","vendor":"Auto","vendorSpecificOptions":{}},"properties":{"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.sttConfig.oneOf.0.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.sttConfig.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig.oneOf.0.version","typeLabel":"enum\u003cstring> | null"},"vendor":{"type":"string","description":"Speech recognition vendor to use for transcribing user speech. Can be a specific provider like Deepgram or Microsoft, or Auto to let the system choose the best option automatically.","default":"Auto","enum":["Deepgram","Microsoft","Auto"],"uniqueKey":"config.sttConfig.oneOf.0.vendor","typeLabel":"enum\u003cstring>"},"vendorSpecificOptions":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Vendor-specific STT options that are unique to particular speech recognition providers. Allows passing custom parameters for advanced recognition configuration such as profanity filtering, punctuation, or language-specific settings.","uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Vendor-specific STT options that are unique to particular speech recognition providers. Allows passing custom parameters for advanced recognition configuration such as profanity filtering, punctuation, or language-specific settings.","uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig.oneOf.0.vendorSpecificOptions","typeLabel":"object | null"},"keywords":{"oneOf":[{"type":"array","items":{"required":["keyword"],"type":"object","properties":{"keyword":{"minLength":1,"type":"string","description":"Word or phrase to prioritize during speech recognition. The STT engine gives preference to recognizing this keyword when transcribing user speech, improving accuracy for domain-specific vocabulary.","isRequired":true,"uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX].keyword","typeLabel":"string"},"weight":{"oneOf":[{"type":"number","description":"Optional weight controlling how strongly the keyword should be prioritized. Higher weights increase the likelihood of the keyword being recognized over similar-sounding alternatives. When not specified, a default prioritization is applied.","format":"double","uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX].weight.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Optional weight controlling how strongly the keyword should be prioritized. Higher weights increase the likelihood of the keyword being recognized over similar-sounding alternatives. When not specified, a default prioritization is applied.","format":"double","uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX].weight.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX].weight","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"description":"Speech recognition keyword hint for improving transcription accuracy of specific words or phrases. Tells the STT engine to prioritize recognition of domain-specific terminology, product names, technical jargon, or proper nouns that may not be in standard dictionaries. Helps reduce misrecognition of important context-specific vocabulary.","uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of keywords or phrases that the speech recognition should prioritize or recognize more accurately. Helps improve transcription accuracy for domain-specific terminology, product names, or technical jargon that may not be in standard dictionaries. Each keyword can have an optional weight to control recognition priority.","default":null,"uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["keyword"],"type":"object","properties":{"keyword":{"minLength":1,"type":"string","description":"Word or phrase to prioritize during speech recognition. The STT engine gives preference to recognizing this keyword when transcribing user speech, improving accuracy for domain-specific vocabulary."},"weight":{"oneOf":[{"type":"number","description":"Optional weight controlling how strongly the keyword should be prioritized. Higher weights increase the likelihood of the keyword being recognized over similar-sounding alternatives. When not specified, a default prioritization is applied.","format":"double"},{"type":"null","description":"Optional weight controlling how strongly the keyword should be prioritized. Higher weights increase the likelihood of the keyword being recognized over similar-sounding alternatives. When not specified, a default prioritization is applied.","format":"double"}]}},"additionalProperties":false,"description":"Speech recognition keyword hint for improving transcription accuracy of specific words or phrases. Tells the STT engine to prioritize recognition of domain-specific terminology, product names, technical jargon, or proper nouns that may not be in standard dictionaries. Helps reduce misrecognition of important context-specific vocabulary."},"description":"List of keywords or phrases that the speech recognition should prioritize or recognize more accurately. Helps improve transcription accuracy for domain-specific terminology, product names, or technical jargon that may not be in standard dictionaries. Each keyword can have an optional weight to control recognition priority.","default":null,"uniqueKey":"config.sttConfig.oneOf.0.keywords.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig.oneOf.0.keywords","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.sttConfig.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.sttConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.sttConfig","typeLabel":"object | null"},"outboundSipConfig":{"oneOf":[{"type":"object","description":"SIP configuration for making outbound calls. Includes phone number selection and trunk credentials. Required when the agent needs to initiate calls to phone numbers.","required":["authUser","server"],"properties":{"server":{"minLength":1,"type":"string","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Format is hostname:port (e.g., \"sip.example.com:5060\").","isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.0.server","typeLabel":"string"},"authUser":{"minLength":1,"type":"string","description":"Authentication user identifier as defined in RFC 3261. Different providers may call this \"username\", \"account\", \"user ID\", or other names depending on the SIP provider.","isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.0.authUser","typeLabel":"string"},"type":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration version type. Always \"v1\" for inline credentials configuration.","default":"v1","readOnly":true,"uniqueKey":"config.outboundSipConfig.oneOf.0.type.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration version type. Always \"v1\" for inline credentials configuration.","default":"v1","readOnly":true,"uniqueKey":"config.outboundSipConfig.oneOf.0.type.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.type","typeLabel":"enum\u003cstring> | null"},"domain":{"oneOf":[{"type":"string","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.domain.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.domain.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.domain","typeLabel":"string | null"},"password":{"oneOf":[{"type":"string","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.password.oneOf.0","typeLabel":"string"},{"type":"null","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.password.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.password","typeLabel":"string | null"},"fromUser":{"oneOf":[{"type":"string","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.fromUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.fromUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.fromUser","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for SIP communication. Supported values are UDP (default), TCP, or TLS for encrypted connections.","default":"udp","enum":["udp","tcp","tls"],"uniqueKey":"config.outboundSipConfig.oneOf.0.transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.outboundSipConfig.oneOf.0.transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.transport","typeLabel":"enum\u003cstring> | null"},"cpsLimit":{"oneOf":[{"type":"integer","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsLimit.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsLimit.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsLimit","typeLabel":"integer\u003cint32> | null"},"cpsKey":{"oneOf":[{"type":"string","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsKey.oneOf.0","typeLabel":"string"},{"type":"null","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.cpsKey","typeLabel":"string | null"},"displayName":{"oneOf":[{"type":"string","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.outboundSipConfig.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig.oneOf.0.displayName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.outboundSipConfig.oneOf.0","typeLabel":"object"},{"type":"object","description":"SIP configuration for making outbound calls. Includes phone number selection and trunk credentials. Required when the agent needs to initiate calls to phone numbers.","required":["phoneNumbers","type"],"properties":{"type":{"minLength":1,"enum":["v2"],"type":"string","description":"Configuration version type. Always \"v2\" for phone number reference configuration.","readOnly":true,"isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.1.type","typeLabel":"enum\u003cstring>"},"phoneNumbers":{"type":"array","items":{"required":["phoneNumberId"],"type":"object","properties":{"phoneNumberId":{"type":"string","description":"Unique identifier of the SIP phone number configuration to use for outbound calls. References a phone number configured via the SIP phone numbers API.","format":"uuid","isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.1.phoneNumbers.items.[INDEX].phoneNumberId","typeLabel":"string\u003cuuid>"}},"additionalProperties":false,"description":"Reference to a configured SIP phone number. Contains the phone number ID that points to the full phone number configuration including trunk credentials.","uniqueKey":"config.outboundSipConfig.oneOf.1.phoneNumbers.items.[INDEX]","typeLabel":"object"},"description":"List of phone number references for outbound calling. Currently supports only one phone number in the list. Each reference points to a configured SIP phone number that contains the trunk credentials and settings.","isRequired":true,"uniqueKey":"config.outboundSipConfig.oneOf.1.phoneNumbers","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"config.outboundSipConfig.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.outboundSipConfig.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.outboundSipConfig","typeLabel":"object · object · null"},"resultWebhook":{"oneOf":[{"type":"object","description":"Webhook URL to receive call results when conversations complete. The system will send a POST request with conversation outcome, transcript, and metadata to this URL.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri","isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.resultWebhook.oneOf.0.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.resultWebhook.oneOf.0.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.resultWebhook.oneOf.0.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.resultWebhook.oneOf.0.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.headers","typeLabel":"object | null"},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"],"isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.httpMethod","typeLabel":"enum\u003cstring>"},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.queryParams","typeLabel":"object | null"},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"type":{"type":"string","description":"Format type identifier. Always returns Text for this format.","enum":["Text"],"isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.0.type","typeLabel":"enum\u003cstring>"},"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain.","isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.0.template","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.0","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"type":{"type":"string","description":"Format type identifier. Always returns Json for this format.","enum":["Json"],"isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.type","typeLabel":"enum\u003cstring>"},"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.1","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"type":{"type":"string","description":"Format type identifier. Always returns Form for this format.","enum":["Form"],"isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.type","typeLabel":"enum\u003cstring>"},"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0.bodyFormat","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.resultWebhook.oneOf.0.customSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook.oneOf.0.customSettings","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.resultWebhook.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.resultWebhook.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.resultWebhook","typeLabel":"object | null"},"features":{"oneOf":[{"type":"object","description":"Advanced features for the agent including RAG (knowledge base retrieval), call transfers (warm or cold), ambient background sounds, interruption handling, and recording options. Enables specialized agent capabilities beyond basic conversation.","default":{"version":"v1","postCallAnalysis":[],"talkFirst":{"version":"v1","delay":1,"isEnabled":false,"interruptible":true},"maxDuration":{"version":"v1","maxDurationSeconds":3600,"maxDurationInTransferSeconds":7200,"isEnabled":true},"ivrDetection":{"version":"v1","isEnabled":true,"enabledForChat":false,"enabledForInbound":false,"enabledForOutbound":true,"enabledForWebCall":false,"ivrNavigation":false},"ambientNoise":{"version":"v1","isEnabled":false,"ambientNoiseLevel":0.1},"languageSwitching":{"version":"v1","isEnabled":true},"fillers":{"version":"v1","isEnabled":true,"strategy":{"type":"static","texts":["um"]}},"backchannel":{"version":"v1","isEnabled":false},"turnTaking":{"version":"v1","vad":"asap_v2","vadFallback":"asap_v2"},"silenceManagement":{"version":"v1","isEnabled":true,"maxReminderAttempts":2,"reminderSilenceThresholdSeconds":5,"endWhenReminderLimitExceeded":true},"preConversationMedia":{"version":"v1","isEnabled":false,"enabledForInbound":false,"enabledForOutbound":false,"enabledForWebCall":false},"noiseSuppression":{"version":"v1","isEnabled":false,"type":"none","noiseSuppressionLevel":75,"recordWriteStrategy":"raw"}},"properties":{"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Feature configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Feature configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.version","typeLabel":"enum\u003cstring> | null"},"transfer":{"oneOf":[{"type":"object","description":"Call transfer configuration. Supports warm transfer (agent stays on call), cold transfer (agent hangs up), or HTTP transfer (external API handles transfer). Enables the agent to transfer calls to other numbers or systems.","required":["endpointDestination","type","description"],"properties":{"type":{"type":"string","description":"Call transfer type determining how the call is handed off to a human operator or different destination. Different transfer types control the handoff mechanism, agent involvement during transfer, and whether decisions are made dynamically via HTTP requests.","enum":["cold"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.type","typeLabel":"enum\u003cstring>"},"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.description","typeLabel":"string"},"endpointDestination":{"minLength":1,"type":"string","description":"Transfer destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:1234567890@example.com\". The call is redirected to this endpoint using SIP REFER when the transfer is initiated.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.endpointDestination","typeLabel":"string"},"version":{"oneOf":[{"type":"string","description":"Configuration schema version. Currently always \"v1\".","readOnly":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.version.oneOf.0","typeLabel":"string"},{"type":"null","description":"Configuration schema version. Currently always \"v1\".","readOnly":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.version","typeLabel":"string | null"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.isEnabled","typeLabel":"boolean | null"},"sipUui":{"oneOf":[{"type":"string","description":"Optional User-to-User payload, encoded as RFC 7433 hex. Supports {{variableName}}\nfrom call additionalData and {{sip_endpoint}} for the caller.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipUui.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional User-to-User payload, encoded as RFC 7433 hex. Supports {{variableName}}\nfrom call additionalData and {{sip_endpoint}} for the caller.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipUui.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipUui","typeLabel":"string | null"},"sipHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers embedded in the Refer-To URI. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers embedded in the Refer-To URI. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.sipHeaders","typeLabel":"object | null"},"transferRoutes":{"oneOf":[{"type":"array","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].name","typeLabel":"string"},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX].endpoint","typeLabel":"string"}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX]","typeLabel":"object"},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations","typeLabel":"object[]"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Optional named transfer routes allowing the language model to choose between multiple destinations. Each route has a name, description, and list of endpoints. The model can select the appropriate route based on conversation context, enabling intelligent routing to different departments or specialists.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions."},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected."}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured."},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to."}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description."},"description":"Optional named transfer routes allowing the language model to choose between multiple destinations. Each route has a name, description, and list of endpoints. The model can select the appropriate route based on conversation context, enabling intelligent routing to different departments or specialists.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.transferRoutes","typeLabel":"object[] | null"},"holdMedia":{"oneOf":[{"type":"object","description":"Optional hold media configuration for playing audio during the transfer. When enabled, plays the specified media file on loop while the call is being transferred instead of using the agent's voice. Provides professional hold music or messages while the transfer completes.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0.mediaFilename","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0.holdMedia","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.0","typeLabel":"object"},{"type":"object","description":"Call transfer configuration. Supports warm transfer (agent stays on call), cold transfer (agent hangs up), or HTTP transfer (external API handles transfer). Enables the agent to transfer calls to other numbers or systems.","required":["type","webhook","description"],"properties":{"type":{"type":"string","description":"Call transfer type determining how the call is handed off to a human operator or different destination. Different transfer types control the handoff mechanism, agent involvement during transfer, and whether decisions are made dynamically via HTTP requests.","enum":["http"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.type","typeLabel":"enum\u003cstring>"},"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.description","typeLabel":"string"},"webhook":{"type":"object","description":"Webhook endpoint to call for transfer routing decisions. The system sends a POST request with conversation context and waits for a response specifying the transfer destination and type. The webhook should return a transfer decision in the response body indicating whether to perform a cold or warm transfer and to which endpoint.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.headers","typeLabel":"object | null"},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.httpMethod","typeLabel":"enum\u003cstring>"},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.queryParams","typeLabel":"object | null"},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"type":{"type":"string","description":"Format type identifier. Always returns Text for this format.","enum":["Text"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0.type","typeLabel":"enum\u003cstring>"},"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0.template","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"type":{"type":"string","description":"Format type identifier. Always returns Json for this format.","enum":["Json"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.type","typeLabel":"enum\u003cstring>"},"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"type":{"type":"string","description":"Format type identifier. Always returns Form for this format.","enum":["Form"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.type","typeLabel":"enum\u003cstring>"},"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0.bodyFormat","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook.customSettings","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.webhook","typeLabel":"object"},"version":{"oneOf":[{"type":"string","description":"Configuration schema version. Currently always \"v1\".","readOnly":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.version.oneOf.0","typeLabel":"string"},{"type":"null","description":"Configuration schema version. Currently always \"v1\".","readOnly":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.version","typeLabel":"string | null"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.isEnabled","typeLabel":"boolean | null"},"fallback":{"oneOf":[{"type":"object","description":"Fallback transfer configuration to use if the webhook request fails, times out, or returns an error. Ensures calls can still be transferred even when the routing system is unavailable. Can specify either a cold or warm transfer as the fallback behavior.","required":["endpointDestination","type","description"],"properties":{"type":{"type":"string","description":"Call transfer type determining how the call is handed off to a human operator or different destination. Different transfer types control the handoff mechanism, agent involvement during transfer, and whether decisions are made dynamically via HTTP requests.","enum":["cold"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.type","typeLabel":"enum\u003cstring>"},"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.description","typeLabel":"string"},"endpointDestination":{"minLength":1,"type":"string","description":"Transfer destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:1234567890@example.com\". The call is redirected to this endpoint using SIP REFER when the transfer is initiated.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.endpointDestination","typeLabel":"string"},"version":{"oneOf":[{"type":"string","description":"Configuration schema version. Currently always \"v1\".","readOnly":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.version.oneOf.0","typeLabel":"string"},{"type":"null","description":"Configuration schema version. Currently always \"v1\".","readOnly":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.version","typeLabel":"string | null"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.isEnabled","typeLabel":"boolean | null"},"sipUui":{"oneOf":[{"type":"string","description":"Optional User-to-User payload, encoded as RFC 7433 hex. Supports {{variableName}}\nfrom call additionalData and {{sip_endpoint}} for the caller.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipUui.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional User-to-User payload, encoded as RFC 7433 hex. Supports {{variableName}}\nfrom call additionalData and {{sip_endpoint}} for the caller.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipUui.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipUui","typeLabel":"string | null"},"sipHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers embedded in the Refer-To URI. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers embedded in the Refer-To URI. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.sipHeaders","typeLabel":"object | null"},"transferRoutes":{"oneOf":[{"type":"array","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].name","typeLabel":"string"},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX].endpoint","typeLabel":"string"}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX]","typeLabel":"object"},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations","typeLabel":"object[]"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Optional named transfer routes allowing the language model to choose between multiple destinations. Each route has a name, description, and list of endpoints. The model can select the appropriate route based on conversation context, enabling intelligent routing to different departments or specialists.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions."},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected."}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured."},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to."}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description."},"description":"Optional named transfer routes allowing the language model to choose between multiple destinations. Each route has a name, description, and list of endpoints. The model can select the appropriate route based on conversation context, enabling intelligent routing to different departments or specialists.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.transferRoutes","typeLabel":"object[] | null"},"holdMedia":{"oneOf":[{"type":"object","description":"Optional hold media configuration for playing audio during the transfer. When enabled, plays the specified media file on loop while the call is being transferred instead of using the agent's voice. Provides professional hold music or messages while the transfer completes.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0.mediaFilename","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0.holdMedia","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.0","typeLabel":"object"},{"type":"object","description":"Fallback transfer configuration to use if the webhook request fails, times out, or returns an error. Ensures calls can still be transferred even when the routing system is unavailable. Can specify either a cold or warm transfer as the fallback behavior.","required":["endpointDestination","type","description"],"properties":{"type":{"type":"string","description":"Call transfer type determining how the call is handed off to a human operator or different destination. Different transfer types control the handoff mechanism, agent involvement during transfer, and whether decisions are made dynamically via HTTP requests.","enum":["warm"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.type","typeLabel":"enum\u003cstring>"},"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.description","typeLabel":"string"},"endpointDestination":{"minLength":1,"type":"string","description":"Operator destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The agent calls this endpoint first before bridging with the user.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.endpointDestination","typeLabel":"string"},"version":{"oneOf":[{"type":"string","description":"Configuration schema version. Currently always \"v1\".","readOnly":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.version.oneOf.0","typeLabel":"string"},{"type":"null","description":"Configuration schema version. Currently always \"v1\".","readOnly":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.version","typeLabel":"string | null"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.isEnabled","typeLabel":"boolean | null"},"sip":{"oneOf":[{"type":"object","description":"Optional SIP configuration override for placing the call to the operator. When specified, uses these SIP credentials instead of the agent's default outbound SIP settings for this specific transfer call.","properties":{"domain":{"oneOf":[{"type":"string","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.domain.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.domain.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.domain","typeLabel":"string | null"},"password":{"oneOf":[{"type":"string","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.password.oneOf.0","typeLabel":"string"},{"type":"null","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.password.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.password","typeLabel":"string | null"},"fromUser":{"oneOf":[{"type":"string","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.fromUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.fromUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.fromUser","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for SIP communication. Supported values are UDP (default), TCP, or TLS for encrypted connections.","default":"udp","enum":["udp","tcp","tls"],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.transport","typeLabel":"enum\u003cstring> | null"},"cpsLimit":{"oneOf":[{"type":"integer","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsLimit.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsLimit.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsLimit","typeLabel":"integer\u003cint32> | null"},"cpsKey":{"oneOf":[{"type":"string","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsKey.oneOf.0","typeLabel":"string"},{"type":"null","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.cpsKey","typeLabel":"string | null"},"displayName":{"oneOf":[{"type":"string","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.displayName","typeLabel":"string | null"},"type":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration version type. Always \"v1\" for inline credentials configuration.","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.type.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration version type. Always \"v1\" for inline credentials configuration.","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.type.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.type","typeLabel":"enum\u003cstring> | null"},"server":{"oneOf":[{"type":"string","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.server.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.server.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.server","typeLabel":"string | null"},"authUser":{"oneOf":[{"type":"string","description":"Authentication user identifier as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.authUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"Authentication user identifier as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.authUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0.authUser","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sip","typeLabel":"object | null"},"sipUui":{"oneOf":[{"type":"string","description":"Optional User-to-User payload on the operator call, encoded as RFC 7433 hex.\nSupports {{variableName}} from call additionalData and {{sip_endpoint}} for the caller.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipUui.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional User-to-User payload on the operator call, encoded as RFC 7433 hex.\nSupports {{variableName}} from call additionalData and {{sip_endpoint}} for the caller.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipUui.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipUui","typeLabel":"string | null"},"sipHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers on the operator call. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers on the operator call. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sipHeaders","typeLabel":"object | null"},"interactionWithOperator":{"oneOf":[{"type":"object","description":"Behavior controlling what the agent says to the operator when they answer. Can use static predefined phrases or smart AI-generated context based on the conversation. Allows providing the operator with relevant information about the caller's needs before connecting them.","required":["type"],"properties":{"type":{"type":"string","description":"Warm transfer behavior type discriminator determining how the agent interacts with operators before bridging calls. Static behavior uses predefined rules with explicit wait conditions like DTMF tones, audio frequencies, or voice detection to determine when the operator is ready. SmartV1 behavior uses AI to intelligently detect operator readiness and adapt conversation flow dynamically. Unspecified serves as fallback for forward compatibility with future behavior types.","enum":["smartV1"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.type","typeLabel":"enum\u003cstring>"},"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to customize how the AI agent interacts with the operator before bridging the call. Provides context-specific guidance for different scenarios, such as explaining the caller's situation, verifying operator availability, or following specific handoff protocols. Helps ensure smooth operator interactions while maintaining flexibility for different business processes.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to customize how the AI agent interacts with the operator before bridging the call. Provides context-specific guidance for different scenarios, such as explaining the caller's situation, verifying operator availability, or following specific handoff protocols. Helps ensure smooth operator interactions while maintaining flexibility for different business processes.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.additionalInstructions","typeLabel":"string | null"},"requireReadyBriefingAcceptance":{"type":"boolean","description":"When true, wait for operator readiness, deliver the configured briefing completely, and require later acceptance before bridging. Defaults to false, preserving the existing smart warm-transfer flow when absent or false.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0.requireReadyBriefingAcceptance","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.0","typeLabel":"object"},{"type":"object","description":"Behavior controlling what the agent says to the operator when they answer. Can use static predefined phrases or smart AI-generated context based on the conversation. Allows providing the operator with relevant information about the caller's needs before connecting them.","required":["type"],"properties":{"type":{"type":"string","description":"Warm transfer behavior type discriminator determining how the agent interacts with operators before bridging calls. Static behavior uses predefined rules with explicit wait conditions like DTMF tones, audio frequencies, or voice detection to determine when the operator is ready. SmartV1 behavior uses AI to intelligently detect operator readiness and adapt conversation flow dynamically. Unspecified serves as fallback for forward compatibility with future behavior types.","enum":["static"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.type","typeLabel":"enum\u003cstring>"},"waitFirstAnswerFromOperator":{"oneOf":[{"type":"boolean","description":"Wait for voice detection from the operator before bridging the call. When enabled, the system waits for the operator to start speaking before connecting the caller, ensuring the operator is actively engaged and ready. When disabled, the call bridges immediately once other configured wait conditions are met or the timeout expires.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Wait for voice detection from the operator before bridging the call. When enabled, the system waits for the operator to start speaking before connecting the caller, ensuring the operator is actively engaged and ready. When disabled, the call bridges immediately once other configured wait conditions are met or the timeout expires.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator","typeLabel":"boolean | null"},"waitToneFromOperator":{"oneOf":[{"type":"array","items":{"type":"number","format":"double","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.0.items.[INDEX]","typeLabel":"number\u003cdouble>"},"description":"Audio frequency tones to wait for from the operator before bridging, specified in Hertz. Used to detect specific audio signals from the operator's phone system or IVR, such as 400Hz for readiness signals. The system listens for any of the specified frequencies and bridges the call when detected. Useful for integrating with legacy phone systems or custom operator signaling protocols.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.0","typeLabel":"number\u003cdouble>[]"},{"type":"null","items":{"type":"number","format":"double"},"description":"Audio frequency tones to wait for from the operator before bridging, specified in Hertz. Used to detect specific audio signals from the operator's phone system or IVR, such as 400Hz for readiness signals. The system listens for any of the specified frequencies and bridges the call when detected. Useful for integrating with legacy phone systems or custom operator signaling protocols.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitToneFromOperator","typeLabel":"number\u003cdouble>[] | null"},"waitDTMFFromOperator":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"DTMF key press tones to wait for from the operator before bridging the call. Accepts digit keys 0-9 and special keys like pound or star. The system waits for the operator to press any of the specified keys as an acknowledgment signal before connecting the caller. Common in call center environments where operators confirm readiness by pressing a specific key.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"DTMF key press tones to wait for from the operator before bridging the call. Accepts digit keys 0-9 and special keys like pound or star. The system waits for the operator to press any of the specified keys as an acknowledgment signal before connecting the caller. Common in call center environments where operators confirm readiness by pressing a specific key.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitDTMFFromOperator","typeLabel":"string[] | null"},"waitChecksTimeoutInS":{"oneOf":[{"type":"number","description":"Maximum time in seconds to wait for operator readiness signals before timing out. If the operator does not provide the expected voice, DTMF, or frequency tone signals within this timeout, the wait conditions are bypassed and the call proceeds according to failover configuration. Prevents indefinite waiting when operators are unavailable or unresponsive.","format":"double","default":4,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitChecksTimeoutInS.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Maximum time in seconds to wait for operator readiness signals before timing out. If the operator does not provide the expected voice, DTMF, or frequency tone signals within this timeout, the wait conditions are bypassed and the call proceeds according to failover configuration. Prevents indefinite waiting when operators are unavailable or unresponsive.","format":"double","default":4,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitChecksTimeoutInS.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.waitChecksTimeoutInS","typeLabel":"number\u003cdouble> | null"},"sayPhraseToOperator":{"oneOf":[{"type":"object","description":"Phrase configuration for introducing the caller to the operator before bridging. Allows the AI agent to provide context about the caller's needs, reason for transfer, or conversation summary to help the operator assist effectively. Can be configured to speak before or after the operator acknowledges, depending on call center workflow preferences.","required":["phrase"],"properties":{"phrase":{"minLength":1,"type":"string","description":"Phrase to speak to the operator when they answer. Should provide relevant context about the caller or their needs. Can include conversation summaries, caller identification, or reason for transfer to help the operator assist the user effectively.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.phrase","typeLabel":"string"},"beforeOperator":{"oneOf":[{"type":"boolean","description":"Controls timing of when the phrase is spoken. When true, the agent speaks immediately when the call connects, potentially before the operator fully answers. When false, waits for the operator to acknowledge before speaking the phrase.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls timing of when the phrase is spoken. When true, the agent speaks immediately when the call connects, potentially before the operator fully answers. When false, waits for the operator to acknowledge before speaking the phrase.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1.sayPhraseToOperator","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.interactionWithOperator","typeLabel":"object · object · null"},"sayPhraseToCustomer":{"oneOf":[{"type":"string","description":"Phrase to speak to the customer before bridging the call with the operator. Informs the user that they're being connected to a human agent. Can include reassurance or set expectations about the handoff.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sayPhraseToCustomer.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase to speak to the customer before bridging the call with the operator. Informs the user that they're being connected to a human agent. Can include reassurance or set expectations about the handoff.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sayPhraseToCustomer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.sayPhraseToCustomer","typeLabel":"string | null"},"continueAfterOperatorDisconnected":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent resumes the conversation if the operator disconnects or hangs up. When true, the agent continues talking to the user after the operator leaves. When false, the call ends when the operator disconnects.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueAfterOperatorDisconnected.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent resumes the conversation if the operator disconnects or hangs up. When true, the agent continues talking to the user after the operator leaves. When false, the call ends when the operator disconnects.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueAfterOperatorDisconnected.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueAfterOperatorDisconnected","typeLabel":"boolean | null"},"continueRecordingInTransfer":{"oneOf":[{"type":"boolean","default":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecordingInTransfer.oneOf.0","typeLabel":"boolean"},{"type":"null","default":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecordingInTransfer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecordingInTransfer","typeLabel":"boolean | null"},"transferRoutes":{"oneOf":[{"type":"array","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].name","typeLabel":"string"},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX].endpoint","typeLabel":"string"}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX]","typeLabel":"object"},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations","typeLabel":"object[]"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions."},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected."}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured."},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to."}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description."},"default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.transferRoutes","typeLabel":"object[] | null"},"operatorName":{"oneOf":[{"type":"string","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.operatorName.oneOf.0","typeLabel":"string"},{"type":"null","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.operatorName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.operatorName","typeLabel":"string | null"},"continueRecognitionInTransfer":{"oneOf":[{"type":"boolean","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecognitionInTransfer.oneOf.0","typeLabel":"boolean"},{"type":"null","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecognitionInTransfer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.continueRecognitionInTransfer","typeLabel":"boolean | null"},"callerIdMode":{"oneOf":[{"type":"string","description":"Determines which phone number is displayed to the transfer destination (human agent) during warm transfer.\nAgentPhoneNumber (default): Uses the AI agent's configured outbound SIP fromUser as the caller ID.\nUserPhoneNumber: Uses the user's phone number (job.endpoint) as the caller ID.\nWhen null, defaults to AgentPhoneNumber behavior.","default":"agentPhoneNumber","enum":["userPhoneNumber","agentPhoneNumber"],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.callerIdMode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.callerIdMode.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.callerIdMode","typeLabel":"enum\u003cstring> | null"},"threewayMessaging":{"oneOf":[{"type":"object","description":"Optional threeway messaging configuration.\nWhen configured, delivers a unified phrase to BOTH user and operator\nsimultaneously before the bridge channel is executed.","required":["type"],"properties":{"type":{"type":"string","description":"Threeway messaging behavior type discriminator determining how announcement phrases are delivered to both caller and operator simultaneously during warm transfer bridging. Static behavior uses predefined phrases spoken unchanged to both parties for consistent messaging. SmartV1 behavior uses AI to generate contextual announcement phrases based on conversation history and optional instructions, adapting to each transfer scenario. Unspecified serves as fallback for forward compatibility with future behavior types. The phrase is delivered to both the parent conversation channel and warm transfer child channel simultaneously right before connecting the caller to the operator.","enum":["smartV1"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0.type","typeLabel":"enum\u003cstring>"},"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to customize how the AI generates the announcement phrase spoken to both parties simultaneously. Guides the language model in crafting appropriate handoff messaging, such as maintaining professional tone, including issue summaries, providing reassurance, or mentioning specialist involvement. When not specified, the phrase is generated based solely on conversation context without additional constraints.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to customize how the AI generates the announcement phrase spoken to both parties simultaneously. Guides the language model in crafting appropriate handoff messaging, such as maintaining professional tone, including issue summaries, providing reassurance, or mentioning specialist involvement. When not specified, the phrase is generated based solely on conversation context without additional constraints.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0.additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.0","typeLabel":"object"},{"type":"object","description":"Optional threeway messaging configuration.\nWhen configured, delivers a unified phrase to BOTH user and operator\nsimultaneously before the bridge channel is executed.","required":["type"],"properties":{"type":{"type":"string","description":"Threeway messaging behavior type discriminator determining how announcement phrases are delivered to both caller and operator simultaneously during warm transfer bridging. Static behavior uses predefined phrases spoken unchanged to both parties for consistent messaging. SmartV1 behavior uses AI to generate contextual announcement phrases based on conversation history and optional instructions, adapting to each transfer scenario. Unspecified serves as fallback for forward compatibility with future behavior types. The phrase is delivered to both the parent conversation channel and warm transfer child channel simultaneously right before connecting the caller to the operator.","enum":["static"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1.type","typeLabel":"enum\u003cstring>"},"phrase":{"oneOf":[{"type":"string","description":"Phrase spoken to both caller and operator simultaneously right before bridging the call. Should be clear and concise as both parties will hear it at the same moment during the transfer transition. Common examples include connection announcements like \"Connecting you now\", hold notifications like \"Please hold while I connect you\", or representative introduction messages like \"You are now being connected to a representative\".","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1.phrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to both caller and operator simultaneously right before bridging the call. Should be clear and concise as both parties will hear it at the same moment during the transfer transition. Common examples include connection announcements like \"Connecting you now\", hold notifications like \"Please hold while I connect you\", or representative introduction messages like \"You are now being connected to a representative\".","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1.phrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1.phrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.threewayMessaging","typeLabel":"object · object · null"},"holdMedia":{"oneOf":[{"type":"object","description":"Optional hold media configuration for warm transfers.\nWhen enabled, plays media via media:// protocol instead of using the respond node\nto communicate with users during transfer.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0.mediaFilename","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.holdMedia","typeLabel":"object | null"},"fallbackToColdTransfer":{"type":"boolean","description":"When true and the warm transfer fails (the operator does not answer, the operator briefing fails, or the operator call cannot be placed), the agent cold-transfers the caller to the same destination before applying the failover behavior. Defaults to false.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1.fallbackToColdTransfer","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1.fallback","typeLabel":"object · object · null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.1","typeLabel":"object"},{"type":"object","description":"Call transfer configuration. Supports warm transfer (agent stays on call), cold transfer (agent hangs up), or HTTP transfer (external API handles transfer). Enables the agent to transfer calls to other numbers or systems.","required":["endpointDestination","type","description"],"properties":{"type":{"type":"string","description":"Call transfer type determining how the call is handed off to a human operator or different destination. Different transfer types control the handoff mechanism, agent involvement during transfer, and whether decisions are made dynamically via HTTP requests.","enum":["warm"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.type","typeLabel":"enum\u003cstring>"},"description":{"minLength":1,"type":"string","description":"Description of when and why this transfer should be used. Guides the language model in deciding when to invoke this transfer option during conversations. Should explain the circumstances or user requests that trigger this transfer.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.description","typeLabel":"string"},"endpointDestination":{"minLength":1,"type":"string","description":"Operator destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The agent calls this endpoint first before bridging with the user.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.endpointDestination","typeLabel":"string"},"version":{"oneOf":[{"type":"string","description":"Configuration schema version. Currently always \"v1\".","readOnly":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.version.oneOf.0","typeLabel":"string"},{"type":"null","description":"Configuration schema version. Currently always \"v1\".","readOnly":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.version","typeLabel":"string | null"},"failoverBehavior":{"oneOf":[{"type":"object","description":"Behavior when the transfer fails due to the destination being unavailable, busy, or unreachable. Controls whether the conversation continues with the AI agent or ends, and what message to communicate to the user about the failure.","properties":{"continueConversation":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.continueConversation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent continues the conversation after the transfer fails. When true, the agent resumes talking to the user and can attempt alternative solutions. When false, the call ends after explaining the transfer failure.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.continueConversation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.continueConversation","typeLabel":"boolean | null"},"systemMessage":{"oneOf":[{"type":"string","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.systemMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"System message added to the conversation context when the transfer fails. Provides internal context to the language model about the failure, influencing how it responds to the user after the failover. Not spoken aloud but affects the agent's behavior and understanding.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.systemMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.systemMessage","typeLabel":"string | null"},"staticPhrase":{"oneOf":[{"type":"string","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to the user when the transfer fails. Explains that the operator is unavailable and what happens next. Should provide clear communication about the failure and set expectations for the user.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.failoverBehavior","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this transfer option. When disabled, the language model cannot select this transfer even if the description matches the conversation context.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.isEnabled","typeLabel":"boolean | null"},"sip":{"oneOf":[{"type":"object","description":"Optional SIP configuration override for placing the call to the operator. When specified, uses these SIP credentials instead of the agent's default outbound SIP settings for this specific transfer call.","properties":{"domain":{"oneOf":[{"type":"string","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.domain.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP domain for authentication realm as defined in RFC 3261. Used in SIP authentication challenges.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.domain.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.domain","typeLabel":"string | null"},"password":{"oneOf":[{"type":"string","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.password.oneOf.0","typeLabel":"string"},{"type":"null","description":"Password for SIP authentication as defined in RFC 3261. Used for authenticating outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.password.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.password","typeLabel":"string | null"},"fromUser":{"oneOf":[{"type":"string","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.fromUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"From header user portion for outbound calls. Determines what user identifier appears in the SIP From header when making calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.fromUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.fromUser","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for SIP communication. Supported values are UDP (default), TCP, or TLS for encrypted connections.","default":"udp","enum":["udp","tcp","tls"],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.transport","typeLabel":"enum\u003cstring> | null"},"cpsLimit":{"oneOf":[{"type":"integer","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsLimit.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Calls per second limit for rate limiting outbound calls. Prevents exceeding provider rate limits.","format":"int32","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsLimit.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsLimit","typeLabel":"integer\u003cint32> | null"},"cpsKey":{"oneOf":[{"type":"string","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsKey.oneOf.0","typeLabel":"string"},{"type":"null","description":"Calls per second rate limiting key. Used to group multiple configurations under the same rate limit when specified.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.cpsKey","typeLabel":"string | null"},"displayName":{"oneOf":[{"type":"string","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name for caller ID. Appears in the From header display name when making outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.displayName","typeLabel":"string | null"},"type":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration version type. Always \"v1\" for inline credentials configuration.","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.type.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration version type. Always \"v1\" for inline credentials configuration.","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.type.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.type","typeLabel":"enum\u003cstring> | null"},"server":{"oneOf":[{"type":"string","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.server.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP server hostname or IP address with optional port as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.server.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.server","typeLabel":"string | null"},"authUser":{"oneOf":[{"type":"string","description":"Authentication user identifier as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.authUser.oneOf.0","typeLabel":"string"},{"type":"null","description":"Authentication user identifier as defined in RFC 3261. Optional in this variant.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.authUser.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0.authUser","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sip","typeLabel":"object | null"},"sipUui":{"oneOf":[{"type":"string","description":"Optional User-to-User payload on the operator call, encoded as RFC 7433 hex.\nSupports {{variableName}} from call additionalData and {{sip_endpoint}} for the caller.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipUui.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional User-to-User payload on the operator call, encoded as RFC 7433 hex.\nSupports {{variableName}} from call additionalData and {{sip_endpoint}} for the caller.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipUui.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipUui","typeLabel":"string | null"},"sipHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers on the operator call. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional X-* SIP headers on the operator call. Values support the same templates as SipUui.\nNames must start with X- and contain only letters, digits, hyphens and underscores.\nAlso applies to the cold transfer fallback.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sipHeaders","typeLabel":"object | null"},"interactionWithOperator":{"oneOf":[{"type":"object","description":"Behavior controlling what the agent says to the operator when they answer. Can use static predefined phrases or smart AI-generated context based on the conversation. Allows providing the operator with relevant information about the caller's needs before connecting them.","required":["type"],"properties":{"type":{"type":"string","description":"Warm transfer behavior type discriminator determining how the agent interacts with operators before bridging calls. Static behavior uses predefined rules with explicit wait conditions like DTMF tones, audio frequencies, or voice detection to determine when the operator is ready. SmartV1 behavior uses AI to intelligently detect operator readiness and adapt conversation flow dynamically. Unspecified serves as fallback for forward compatibility with future behavior types.","enum":["smartV1"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.type","typeLabel":"enum\u003cstring>"},"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to customize how the AI agent interacts with the operator before bridging the call. Provides context-specific guidance for different scenarios, such as explaining the caller's situation, verifying operator availability, or following specific handoff protocols. Helps ensure smooth operator interactions while maintaining flexibility for different business processes.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to customize how the AI agent interacts with the operator before bridging the call. Provides context-specific guidance for different scenarios, such as explaining the caller's situation, verifying operator availability, or following specific handoff protocols. Helps ensure smooth operator interactions while maintaining flexibility for different business processes.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.additionalInstructions","typeLabel":"string | null"},"requireReadyBriefingAcceptance":{"type":"boolean","description":"When true, wait for operator readiness, deliver the configured briefing completely, and require later acceptance before bridging. Defaults to false, preserving the existing smart warm-transfer flow when absent or false.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0.requireReadyBriefingAcceptance","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.0","typeLabel":"object"},{"type":"object","description":"Behavior controlling what the agent says to the operator when they answer. Can use static predefined phrases or smart AI-generated context based on the conversation. Allows providing the operator with relevant information about the caller's needs before connecting them.","required":["type"],"properties":{"type":{"type":"string","description":"Warm transfer behavior type discriminator determining how the agent interacts with operators before bridging calls. Static behavior uses predefined rules with explicit wait conditions like DTMF tones, audio frequencies, or voice detection to determine when the operator is ready. SmartV1 behavior uses AI to intelligently detect operator readiness and adapt conversation flow dynamically. Unspecified serves as fallback for forward compatibility with future behavior types.","enum":["static"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.type","typeLabel":"enum\u003cstring>"},"waitFirstAnswerFromOperator":{"oneOf":[{"type":"boolean","description":"Wait for voice detection from the operator before bridging the call. When enabled, the system waits for the operator to start speaking before connecting the caller, ensuring the operator is actively engaged and ready. When disabled, the call bridges immediately once other configured wait conditions are met or the timeout expires.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Wait for voice detection from the operator before bridging the call. When enabled, the system waits for the operator to start speaking before connecting the caller, ensuring the operator is actively engaged and ready. When disabled, the call bridges immediately once other configured wait conditions are met or the timeout expires.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitFirstAnswerFromOperator","typeLabel":"boolean | null"},"waitToneFromOperator":{"oneOf":[{"type":"array","items":{"type":"number","format":"double","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.0.items.[INDEX]","typeLabel":"number\u003cdouble>"},"description":"Audio frequency tones to wait for from the operator before bridging, specified in Hertz. Used to detect specific audio signals from the operator's phone system or IVR, such as 400Hz for readiness signals. The system listens for any of the specified frequencies and bridges the call when detected. Useful for integrating with legacy phone systems or custom operator signaling protocols.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.0","typeLabel":"number\u003cdouble>[]"},{"type":"null","items":{"type":"number","format":"double"},"description":"Audio frequency tones to wait for from the operator before bridging, specified in Hertz. Used to detect specific audio signals from the operator's phone system or IVR, such as 400Hz for readiness signals. The system listens for any of the specified frequencies and bridges the call when detected. Useful for integrating with legacy phone systems or custom operator signaling protocols.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitToneFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitToneFromOperator","typeLabel":"number\u003cdouble>[] | null"},"waitDTMFFromOperator":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"DTMF key press tones to wait for from the operator before bridging the call. Accepts digit keys 0-9 and special keys like pound or star. The system waits for the operator to press any of the specified keys as an acknowledgment signal before connecting the caller. Common in call center environments where operators confirm readiness by pressing a specific key.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"DTMF key press tones to wait for from the operator before bridging the call. Accepts digit keys 0-9 and special keys like pound or star. The system waits for the operator to press any of the specified keys as an acknowledgment signal before connecting the caller. Common in call center environments where operators confirm readiness by pressing a specific key.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitDTMFFromOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitDTMFFromOperator","typeLabel":"string[] | null"},"waitChecksTimeoutInS":{"oneOf":[{"type":"number","description":"Maximum time in seconds to wait for operator readiness signals before timing out. If the operator does not provide the expected voice, DTMF, or frequency tone signals within this timeout, the wait conditions are bypassed and the call proceeds according to failover configuration. Prevents indefinite waiting when operators are unavailable or unresponsive.","format":"double","default":4,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitChecksTimeoutInS.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Maximum time in seconds to wait for operator readiness signals before timing out. If the operator does not provide the expected voice, DTMF, or frequency tone signals within this timeout, the wait conditions are bypassed and the call proceeds according to failover configuration. Prevents indefinite waiting when operators are unavailable or unresponsive.","format":"double","default":4,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitChecksTimeoutInS.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.waitChecksTimeoutInS","typeLabel":"number\u003cdouble> | null"},"sayPhraseToOperator":{"oneOf":[{"type":"object","description":"Phrase configuration for introducing the caller to the operator before bridging. Allows the AI agent to provide context about the caller's needs, reason for transfer, or conversation summary to help the operator assist effectively. Can be configured to speak before or after the operator acknowledges, depending on call center workflow preferences.","required":["phrase"],"properties":{"phrase":{"minLength":1,"type":"string","description":"Phrase to speak to the operator when they answer. Should provide relevant context about the caller or their needs. Can include conversation summaries, caller identification, or reason for transfer to help the operator assist the user effectively.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.phrase","typeLabel":"string"},"beforeOperator":{"oneOf":[{"type":"boolean","description":"Controls timing of when the phrase is spoken. When true, the agent speaks immediately when the call connects, potentially before the operator fully answers. When false, waits for the operator to acknowledge before speaking the phrase.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls timing of when the phrase is spoken. When true, the agent speaks immediately when the call connects, potentially before the operator fully answers. When false, waits for the operator to acknowledge before speaking the phrase.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0.beforeOperator","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1.sayPhraseToOperator","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.interactionWithOperator","typeLabel":"object · object · null"},"sayPhraseToCustomer":{"oneOf":[{"type":"string","description":"Phrase to speak to the customer before bridging the call with the operator. Informs the user that they're being connected to a human agent. Can include reassurance or set expectations about the handoff.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sayPhraseToCustomer.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase to speak to the customer before bridging the call with the operator. Informs the user that they're being connected to a human agent. Can include reassurance or set expectations about the handoff.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sayPhraseToCustomer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.sayPhraseToCustomer","typeLabel":"string | null"},"continueAfterOperatorDisconnected":{"oneOf":[{"type":"boolean","description":"Controls whether the AI agent resumes the conversation if the operator disconnects or hangs up. When true, the agent continues talking to the user after the operator leaves. When false, the call ends when the operator disconnects.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueAfterOperatorDisconnected.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the AI agent resumes the conversation if the operator disconnects or hangs up. When true, the agent continues talking to the user after the operator leaves. When false, the call ends when the operator disconnects.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueAfterOperatorDisconnected.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueAfterOperatorDisconnected","typeLabel":"boolean | null"},"continueRecordingInTransfer":{"oneOf":[{"type":"boolean","default":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecordingInTransfer.oneOf.0","typeLabel":"boolean"},{"type":"null","default":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecordingInTransfer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecordingInTransfer","typeLabel":"boolean | null"},"transferRoutes":{"oneOf":[{"type":"array","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].name","typeLabel":"string"},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX].endpoint","typeLabel":"string"}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations.items.[INDEX]","typeLabel":"object"},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].endpointDestinations","typeLabel":"object[]"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to.","isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description.","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","endpointDestinations","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Route name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used by the language model to reference this route when making transfer decisions."},"endpointDestinations":{"minItems":1,"type":"array","items":{"required":["endpoint"],"type":"object","properties":{"endpoint":{"minLength":1,"type":"string","description":"Destination phone number or SIP address. Supports E.164 phone numbers like \"+1234567890\" or SIP URIs like \"sip:operator@example.com\". The transfer system attempts to connect to this endpoint when this destination is selected."}},"additionalProperties":false,"description":"Transfer endpoint destination specification. Defines a phone number or SIP address that calls can be transferred to. Used in transfer routes to specify possible destinations with support for failover when multiple endpoints are configured."},"description":"List of destination endpoints for this route. Can include multiple endpoints for failover or load balancing. The system attempts to transfer to these endpoints in order until one succeeds."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of when this route should be used. Guides the language model in selecting the appropriate route based on conversation context, user requests, or caller needs. Should explain what type of assistance or department this route connects to."}},"additionalProperties":false,"description":"Named transfer routing option for intelligent destination selection. Defines a named route with one or more endpoint destinations that the language model can choose based on conversation context. Enables dynamic routing to different departments, specialists, or services by allowing the model to select the most appropriate route based on the user's needs described in the route description."},"default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.transferRoutes","typeLabel":"object[] | null"},"operatorName":{"oneOf":[{"type":"string","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.operatorName.oneOf.0","typeLabel":"string"},{"type":"null","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.operatorName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.operatorName","typeLabel":"string | null"},"continueRecognitionInTransfer":{"oneOf":[{"type":"boolean","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecognitionInTransfer.oneOf.0","typeLabel":"boolean"},{"type":"null","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecognitionInTransfer.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.continueRecognitionInTransfer","typeLabel":"boolean | null"},"callerIdMode":{"oneOf":[{"type":"string","description":"Determines which phone number is displayed to the transfer destination (human agent) during warm transfer.\nAgentPhoneNumber (default): Uses the AI agent's configured outbound SIP fromUser as the caller ID.\nUserPhoneNumber: Uses the user's phone number (job.endpoint) as the caller ID.\nWhen null, defaults to AgentPhoneNumber behavior.","default":"agentPhoneNumber","enum":["userPhoneNumber","agentPhoneNumber"],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.callerIdMode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.callerIdMode.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.callerIdMode","typeLabel":"enum\u003cstring> | null"},"threewayMessaging":{"oneOf":[{"type":"object","description":"Optional threeway messaging configuration.\nWhen configured, delivers a unified phrase to BOTH user and operator\nsimultaneously before the bridge channel is executed.","required":["type"],"properties":{"type":{"type":"string","description":"Threeway messaging behavior type discriminator determining how announcement phrases are delivered to both caller and operator simultaneously during warm transfer bridging. Static behavior uses predefined phrases spoken unchanged to both parties for consistent messaging. SmartV1 behavior uses AI to generate contextual announcement phrases based on conversation history and optional instructions, adapting to each transfer scenario. Unspecified serves as fallback for forward compatibility with future behavior types. The phrase is delivered to both the parent conversation channel and warm transfer child channel simultaneously right before connecting the caller to the operator.","enum":["smartV1"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0.type","typeLabel":"enum\u003cstring>"},"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to customize how the AI generates the announcement phrase spoken to both parties simultaneously. Guides the language model in crafting appropriate handoff messaging, such as maintaining professional tone, including issue summaries, providing reassurance, or mentioning specialist involvement. When not specified, the phrase is generated based solely on conversation context without additional constraints.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to customize how the AI generates the announcement phrase spoken to both parties simultaneously. Guides the language model in crafting appropriate handoff messaging, such as maintaining professional tone, including issue summaries, providing reassurance, or mentioning specialist involvement. When not specified, the phrase is generated based solely on conversation context without additional constraints.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0.additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.0","typeLabel":"object"},{"type":"object","description":"Optional threeway messaging configuration.\nWhen configured, delivers a unified phrase to BOTH user and operator\nsimultaneously before the bridge channel is executed.","required":["type"],"properties":{"type":{"type":"string","description":"Threeway messaging behavior type discriminator determining how announcement phrases are delivered to both caller and operator simultaneously during warm transfer bridging. Static behavior uses predefined phrases spoken unchanged to both parties for consistent messaging. SmartV1 behavior uses AI to generate contextual announcement phrases based on conversation history and optional instructions, adapting to each transfer scenario. Unspecified serves as fallback for forward compatibility with future behavior types. The phrase is delivered to both the parent conversation channel and warm transfer child channel simultaneously right before connecting the caller to the operator.","enum":["static"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1.type","typeLabel":"enum\u003cstring>"},"phrase":{"oneOf":[{"type":"string","description":"Phrase spoken to both caller and operator simultaneously right before bridging the call. Should be clear and concise as both parties will hear it at the same moment during the transfer transition. Common examples include connection announcements like \"Connecting you now\", hold notifications like \"Please hold while I connect you\", or representative introduction messages like \"You are now being connected to a representative\".","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1.phrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phrase spoken to both caller and operator simultaneously right before bridging the call. Should be clear and concise as both parties will hear it at the same moment during the transfer transition. Common examples include connection announcements like \"Connecting you now\", hold notifications like \"Please hold while I connect you\", or representative introduction messages like \"You are now being connected to a representative\".","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1.phrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1.phrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.threewayMessaging","typeLabel":"object · object · null"},"holdMedia":{"oneOf":[{"type":"object","description":"Optional hold media configuration for warm transfers.\nWhen enabled, plays media via media:// protocol instead of using the respond node\nto communicate with users during transfer.","properties":{"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables hold media playback during transfers. When enabled, the specified media file plays on loop until the transfer completes. When disabled or not specified, the agent uses its voice to communicate with users during transfer.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play as hold music. Should be the filename of a media file that has been uploaded to the system. The file plays on loop during the transfer process.","default":null,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0.mediaFilename","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.holdMedia","typeLabel":"object | null"},"fallbackToColdTransfer":{"type":"boolean","description":"When true and the warm transfer fails (the operator does not answer, the operator briefing fails, or the operator call cannot be placed), the agent cold-transfers the caller to the same destination before applying the failover behavior. Defaults to false.","default":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2.fallbackToColdTransfer","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.transfer.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.transfer.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.transfer","typeLabel":"object · object · object · null"},"postCallAnalysis":{"oneOf":[{"type":"array","items":{"required":["labels","name"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Name identifier for this analysis configuration. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used to identify this analysis in the results.","isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].name","typeLabel":"string"},"labels":{"type":"array","items":{"required":["description","name","type"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Field name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. This name is used as the key in the analysis results.","isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].name","typeLabel":"string"},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of what information to extract and how to interpret it. Guides the language model in identifying and extracting the relevant data from the conversation. Should clearly explain what to look for and how to categorize or format the extracted information.","isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].description","typeLabel":"string"},"type":{"type":"string","description":"Data type for the extracted value. Determines the structure and format of the extracted information and constrains what the language model can return.","enum":["string","number","boolean","enum"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"values":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].values.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Allowed values for enum type labels. When Type is Enum, the extracted value must be one of these predefined options. The language model selects the most appropriate value from this list based on the conversation content.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].values.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Allowed values for enum type labels. When Type is Enum, the extracted value must be one of these predefined options. The language model selects the most appropriate value from this list based on the conversation content.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].values.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].values","typeLabel":"string[] | null"},"required":{"oneOf":[{"type":"boolean","description":"Indicates whether this field must be populated. When true, the analysis will always attempt to extract a value for this field. When false, the field may be left empty if the relevant information is not found in the conversation.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].required.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Indicates whether this field must be populated. When true, the analysis will always attempt to extract a value for this field. When false, the field may be left empty if the relevant information is not found in the conversation.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].required.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX].required","typeLabel":"boolean | null"}},"additionalProperties":false,"description":"Data field definition for post-call analysis extraction. Specifies a piece of information to identify and extract from conversation transcripts such as customer sentiment, appointment details, or business outcomes. The language model analyzes the completed conversation and attempts to populate this field based on the description and type constraints.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels.items.[INDEX]","typeLabel":"object"},"description":"List of data fields to extract from the conversation transcript. Each label defines a piece of information to identify and extract, such as customer sentiment, appointment times, order numbers, or custom business outcomes. The language model analyzes the conversation and populates these labels based on the transcript content.","isRequired":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].labels","typeLabel":"object[]"},"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].version","typeLabel":"enum\u003cstring> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this post-call analysis. When enabled, the system performs the configured analysis after each call completes and includes results in the completion webhook payload.","default":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables this post-call analysis. When enabled, the system performs the configured analysis after each call completes and includes results in the completion webhook payload.","default":true,"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX].isEnabled","typeLabel":"boolean | null"}},"additionalProperties":false,"description":"Post-call analysis configuration for automatically extracting structured data from conversation transcripts after calls complete. Defines labels and fields to extract using language model analysis of the conversation. Enables automated classification, sentiment analysis, information extraction, and business outcome tracking from completed calls. Results are included in the completed webhook payload for integration with CRM systems, analytics platforms, or business intelligence tools.","uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Post-call analysis configurations for extracting insights after conversations complete. Multiple analysis tasks can be configured to process transcripts and generate structured data.","default":[],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["labels","name"],"type":"object","properties":{"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true}]},"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Name identifier for this analysis configuration. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. Used to identify this analysis in the results."},"labels":{"type":"array","items":{"required":["description","name","type"],"type":"object","properties":{"name":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z\\-_][a-zA-Z0-9\\-_]*$","type":"string","description":"Field name identifier. Must start with a letter, hyphen, or underscore and contain only letters, numbers, hyphens, and underscores. This name is used as the key in the analysis results."},"description":{"maxLength":500,"minLength":1,"type":"string","description":"Description of what information to extract and how to interpret it. Guides the language model in identifying and extracting the relevant data from the conversation. Should clearly explain what to look for and how to categorize or format the extracted information."},"type":{"type":"string","description":"Data type for the extracted value. Determines the structure and format of the extracted information and constrains what the language model can return.","enum":["string","number","boolean","enum"]},"values":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"Allowed values for enum type labels. When Type is Enum, the extracted value must be one of these predefined options. The language model selects the most appropriate value from this list based on the conversation content."},{"type":"null","items":{"type":"string"},"description":"Allowed values for enum type labels. When Type is Enum, the extracted value must be one of these predefined options. The language model selects the most appropriate value from this list based on the conversation content."}]},"required":{"oneOf":[{"type":"boolean","description":"Indicates whether this field must be populated. When true, the analysis will always attempt to extract a value for this field. When false, the field may be left empty if the relevant information is not found in the conversation."},{"type":"null","description":"Indicates whether this field must be populated. When true, the analysis will always attempt to extract a value for this field. When false, the field may be left empty if the relevant information is not found in the conversation."}]}},"additionalProperties":false,"description":"Data field definition for post-call analysis extraction. Specifies a piece of information to identify and extract from conversation transcripts such as customer sentiment, appointment details, or business outcomes. The language model analyzes the completed conversation and attempts to populate this field based on the description and type constraints."},"description":"List of data fields to extract from the conversation transcript. Each label defines a piece of information to identify and extract, such as customer sentiment, appointment times, order numbers, or custom business outcomes. The language model analyzes the conversation and populates these labels based on the transcript content."},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables this post-call analysis. When enabled, the system performs the configured analysis after each call completes and includes results in the completion webhook payload.","default":true},{"type":"null","description":"Enables or disables this post-call analysis. When enabled, the system performs the configured analysis after each call completes and includes results in the completion webhook payload.","default":true}]}},"additionalProperties":false,"description":"Post-call analysis configuration for automatically extracting structured data from conversation transcripts after calls complete. Defines labels and fields to extract using language model analysis of the conversation. Enables automated classification, sentiment analysis, information extraction, and business outcome tracking from completed calls. Results are included in the completed webhook payload for integration with CRM systems, analytics platforms, or business intelligence tools."},"description":"Post-call analysis configurations for extracting insights after conversations complete. Multiple analysis tasks can be configured to process transcripts and generate structured data.","default":[],"uniqueKey":"config.features.oneOf.0.postCallAnalysis.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.postCallAnalysis","typeLabel":"object[] | null"},"talkFirst":{"oneOf":[{"type":"object","description":"Controls whether the agent speaks first when the call connects. When enabled, the agent greets the user immediately rather than waiting for the user to speak first.","default":{"version":"v1","delay":1,"isEnabled":false,"interruptible":true},"properties":{"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.version","typeLabel":"enum\u003cstring> | null"},"phrase":{"oneOf":[{"type":"string","description":"Greeting phrase the agent should speak immediately when the call connects. This is spoken before the normal conversation flow begins, allowing the agent to introduce itself or provide an opening statement on outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.phrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Greeting phrase the agent should speak immediately when the call connects. This is spoken before the normal conversation flow begins, allowing the agent to introduce itself or provide an opening statement on outbound calls.","default":null,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.phrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.phrase","typeLabel":"string | null"},"delay":{"oneOf":[{"type":"number","description":"Delay in seconds before speaking the greeting phrase. Allows time for the call connection to stabilize or for the user to say hello first if desired. The agent waits this duration after call connection before speaking the configured phrase.","format":"double","default":1,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.delay.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Delay in seconds before speaking the greeting phrase. Allows time for the call connection to stabilize or for the user to say hello first if desired. The agent waits this duration after call connection before speaking the configured phrase.","format":"double","default":1,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.delay.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.delay","typeLabel":"number\u003cdouble> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables the talk first feature. When enabled, the agent speaks the configured greeting phrase after the specified delay when the call connects.","default":false,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables the talk first feature. When enabled, the agent speaks the configured greeting phrase after the specified delay when the call connects.","default":false,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.isEnabled","typeLabel":"boolean | null"},"interruptible":{"oneOf":[{"type":"boolean","description":"Controls whether the user can interrupt the greeting phrase. When true, the agent stops speaking the greeting if the user starts talking. When false, the agent completes the entire greeting phrase before listening for user input.","default":true,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.interruptible.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether the user can interrupt the greeting phrase. When true, the agent stops speaking the greeting if the user starts talking. When false, the agent completes the entire greeting phrase before listening for user input.","default":true,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.interruptible.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0.interruptible","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.talkFirst.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.talkFirst","typeLabel":"object | null"},"maxDuration":{"oneOf":[{"type":"object","description":"Maximum duration limit for conversations. The call will be automatically ended if it exceeds the configured time limit.","default":{"version":"v1","maxDurationSeconds":3600,"maxDurationInTransferSeconds":7200,"isEnabled":true},"properties":{"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.version","typeLabel":"enum\u003cstring> | null"},"maxDurationSeconds":{"oneOf":[{"type":"integer","description":"Maximum duration in seconds for normal conversations before the call is automatically ended. Prevents calls from running indefinitely and helps control costs and resource usage.","format":"int32","default":3600,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationSeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum duration in seconds for normal conversations before the call is automatically ended. Prevents calls from running indefinitely and helps control costs and resource usage.","format":"int32","default":3600,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationSeconds","typeLabel":"integer\u003cint32> | null"},"maxDurationInTransferSeconds":{"oneOf":[{"type":"integer","description":"Maximum duration in seconds for conversations that have been transferred. Allows longer durations for transferred calls since they may involve more complex interactions or human operators. The call is automatically ended when this limit is exceeded during a transfer.","format":"int32","default":7200,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationInTransferSeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum duration in seconds for conversations that have been transferred. Allows longer durations for transferred calls since they may involve more complex interactions or human operators. The call is automatically ended when this limit is exceeded during a transfer.","format":"int32","default":7200,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationInTransferSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.maxDurationInTransferSeconds","typeLabel":"integer\u003cint32> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables maximum duration enforcement. When enabled, calls are automatically terminated when they exceed the configured duration limits.","default":true,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables maximum duration enforcement. When enabled, calls are automatically terminated when they exceed the configured duration limits.","default":true,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0.isEnabled","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.maxDuration.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.maxDuration","typeLabel":"object | null"},"ivrDetection":{"oneOf":[{"type":"object","description":"IVR (Interactive Voice Response) detection for identifying automated phone systems. Helps the agent recognize and respond appropriately to menu prompts and automated messages.","default":{"version":"v1","isEnabled":true,"enabledForChat":false,"enabledForInbound":false,"enabledForOutbound":true,"enabledForWebCall":false,"ivrNavigation":false},"properties":{"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.version","typeLabel":"enum\u003cstring> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Master enable flag for IVR and answering machine detection. When enabled, the system attempts to detect whether calls are answered by humans or machines and behaves according to the configured settings.","default":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Master enable flag for IVR and answering machine detection. When enabled, the system attempts to detect whether calls are answered by humans or machines and behaves according to the configured settings.","default":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.isEnabled","typeLabel":"boolean | null"},"enabledForChat":{"oneOf":[{"type":"boolean","description":"Enables answering machine detection for chat conversations. When enabled, the system attempts to detect automated chat responses or bot interactions.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForChat.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables answering machine detection for chat conversations. When enabled, the system attempts to detect automated chat responses or bot interactions.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForChat.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForChat","typeLabel":"boolean | null"},"enabledForInbound":{"oneOf":[{"type":"boolean","description":"Enables answering machine detection for inbound phone calls. When enabled, the system detects if the caller is a human or an automated system calling your phone numbers.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForInbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables answering machine detection for inbound phone calls. When enabled, the system detects if the caller is a human or an automated system calling your phone numbers.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForInbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForInbound","typeLabel":"boolean | null"},"enabledForOutbound":{"oneOf":[{"type":"boolean","description":"Enables answering machine detection for outbound phone calls. When enabled, the system detects whether a human or voicemail/IVR system answered the call, allowing the agent to leave messages or navigate menus as configured.","default":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForOutbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables answering machine detection for outbound phone calls. When enabled, the system detects whether a human or voicemail/IVR system answered the call, allowing the agent to leave messages or navigate menus as configured.","default":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForOutbound","typeLabel":"boolean | null"},"enabledForWebCall":{"oneOf":[{"type":"boolean","description":"Enables answering machine detection for web-based voice calls. When enabled, the system detects automated responses in web call scenarios.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForWebCall.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables answering machine detection for web-based voice calls. When enabled, the system detects automated responses in web call scenarios.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForWebCall.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.enabledForWebCall","typeLabel":"boolean | null"},"ivrNavigation":{"oneOf":[{"type":"boolean","description":"Enables IVR menu navigation using DTMF tone sending. When enabled, the agent attempts to navigate through automated phone menus by sending touch-tone digits before giving up on the call. Useful for reaching human operators through phone trees on outbound calls.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.ivrNavigation.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables IVR menu navigation using DTMF tone sending. When enabled, the agent attempts to navigate through automated phone menus by sending touch-tone digits before giving up on the call. Useful for reaching human operators through phone trees on outbound calls.","default":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.ivrNavigation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.ivrNavigation","typeLabel":"boolean | null"},"experimental":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Experimental features. `ivr_voice_recognition` (boolean) turns on audio-based machine detection;\n`ivr_voice_recognition_engine` selects its engine: `\"dasha\"` (default) or `\"amdy\"` (amdy.io).\n`ivr_voice_recognition_immediate` (boolean, amdy.io only) asks for a verdict as soon as amdy.io has one,\nwhich takes less audio but is less confident; off, amdy.io listens longer before deciding.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Experimental features. `ivr_voice_recognition` (boolean) turns on audio-based machine detection;\n`ivr_voice_recognition_engine` selects its engine: `\"dasha\"` (default) or `\"amdy\"` (amdy.io).\n`ivr_voice_recognition_immediate` (boolean, amdy.io only) asks for a verdict as soon as amdy.io has one,\nwhich takes less audio but is less confident; off, amdy.io listens longer before deciding.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.experimental","typeLabel":"object | null"},"behavior":{"oneOf":[{"type":"object","description":"Behavior configuration controlling what the agent says or does when an answering machine or IVR is detected. Static behaviors use predefined phrases, while smart behaviors use the language model to generate contextual responses based on the conversation.","required":["type"],"properties":{"type":{"type":"string","description":"Behavior type identifier. Always returns SmartV1 for this AI-generated approach.","enum":["smartV1"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0.type","typeLabel":"enum\u003cstring>"},"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to guide the language model in generating voicemail messages. Provides context about what information to include, tone to use, or specific details to mention. Supports variable interpolation using {{variableName}} syntax for dynamic instructions based on call data.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to guide the language model in generating voicemail messages. Provides context about what information to include, tone to use, or specific details to mention. Supports variable interpolation using {{variableName}} syntax for dynamic instructions based on call data.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0.additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.0","typeLabel":"object"},{"type":"object","description":"Behavior configuration controlling what the agent says or does when an answering machine or IVR is detected. Static behaviors use predefined phrases, while smart behaviors use the language model to generate contextual responses based on the conversation.","required":["type"],"properties":{"type":{"type":"string","description":"Behavior type identifier. Always returns Static for this approach.","enum":["static"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1.type","typeLabel":"enum\u003cstring>"},"staticPhrase":{"oneOf":[{"type":"string","description":"Voicemail message to speak when an answering machine is detected. The agent says this exact phrase after detection. Supports variable interpolation using {{variableName}} syntax to include dynamic data like caller names, phone numbers, or appointment details in the message.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1.staticPhrase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Voicemail message to speak when an answering machine is detected. The agent says this exact phrase after detection. Supports variable interpolation using {{variableName}} syntax to include dynamic data like caller names, phone numbers, or appointment details in the message.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1.staticPhrase.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1.staticPhrase","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.behavior","typeLabel":"object · object · null"},"screeningAssistantBehavior":{"oneOf":[{"type":"object","description":"Optional prompt-driven behavior for automated assistants that screen calls before connecting the caller to a person.\nWhen omitted, call screening retains the existing pass-through behavior.","required":["type"],"properties":{"type":{"type":"string","description":"Behavior discriminator. Always smartV1.","enum":["smartV1"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0.type","typeLabel":"enum\u003cstring>"},"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions that control what the agent says and how long it waits while screening is active.\nSupports variable interpolation using {{variableName}} syntax.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions that control what the agent says and how long it waits while screening is active.\nSupports variable interpolation using {{variableName}} syntax.","default":null,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0.additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.screeningAssistantBehavior","typeLabel":"object | null"},"staticPhraseForIVR":{"oneOf":[{"type":"string","description":"Deprecated static phrase for answering machine messages. Use the Behavior property instead for more flexible message configuration. This field supports variable interpolation using {{variableName}} syntax.","default":null,"deprecated":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.staticPhraseForIVR.oneOf.0","typeLabel":"string"},{"type":"null","description":"Deprecated static phrase for answering machine messages. Use the Behavior property instead for more flexible message configuration. This field supports variable interpolation using {{variableName}} syntax.","default":null,"deprecated":true,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.staticPhraseForIVR.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0.staticPhraseForIVR","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.ivrDetection.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ivrDetection","typeLabel":"object | null"},"ambientNoise":{"oneOf":[{"type":"object","description":"Ambient background noise configuration. Adds realistic background sounds like cafe ambiance or office noise to make the agent sound more natural and human-like.","default":{"version":"v1","isEnabled":false,"ambientNoiseLevel":0.1},"properties":{"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.version","typeLabel":"enum\u003cstring> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables ambient noise playback. When enabled, the configured background sound or noise level is mixed with the agent's voice output.","default":false,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables ambient noise playback. When enabled, the configured background sound or noise level is mixed with the agent's voice output.","default":false,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.isEnabled","typeLabel":"boolean | null"},"ambientNoiseLevel":{"oneOf":[{"type":"number","description":"Volume level for the ambient noise relative to the agent's voice. Controls how loud the background noise is compared to the agent's speech. Lower values create subtle background ambience, higher values make the background more prominent.","format":"double","default":0.1,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.ambientNoiseLevel.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Volume level for the ambient noise relative to the agent's voice. Controls how loud the background noise is compared to the agent's speech. Lower values create subtle background ambience, higher values make the background more prominent.","format":"double","default":0.1,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.ambientNoiseLevel.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.ambientNoiseLevel","typeLabel":"number\u003cdouble> | null"},"backgroundSound":{"oneOf":[{"type":"string","description":"Identifier for the background sound to play. Specifies which ambient sound effect or noise pattern to use, such as office sounds, cafe ambience, or generic background noise.","default":null,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.backgroundSound.oneOf.0","typeLabel":"string"},{"type":"null","description":"Identifier for the background sound to play. Specifies which ambient sound effect or noise pattern to use, such as office sounds, cafe ambience, or generic background noise.","default":null,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.backgroundSound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0.backgroundSound","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.ambientNoise.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.ambientNoise","typeLabel":"object | null"},"rag":{"oneOf":[{"type":"object","description":"RAG (Retrieval-Augmented Generation) feature for knowledge base integration. Enables the agent to search and retrieve information from connected knowledge bases during conversations.","required":["kbLinks"],"properties":{"kbLinks":{"type":"array","items":{"required":["id"],"type":"object","properties":{"id":{"maxLength":255,"minLength":1,"type":"string","description":"Unique identifier of the knowledge base to link. References a knowledge base that has been created and contains indexed documents, articles, or reference materials that the agent can search.","isRequired":true,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.kbLinks.items.[INDEX].id","typeLabel":"string"}},"additionalProperties":false,"description":"Knowledge base link reference for RAG (Retrieval-Augmented Generation) feature. Points to a knowledge base that the agent can search during conversations to retrieve relevant information for answering questions. The knowledge base must be created and populated with documents before being linked to the agent.","uniqueKey":"config.features.oneOf.0.rag.oneOf.0.kbLinks.items.[INDEX]","typeLabel":"object"},"description":"List of knowledge base references that the agent can search. Each link identifies a knowledge base containing documents, FAQs, or reference materials. The agent can query these knowledge bases during conversations to augment its responses with retrieved information.","isRequired":true,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.kbLinks","typeLabel":"object[]"},"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.version","typeLabel":"enum\u003cstring> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables RAG functionality. When enabled, the agent can search linked knowledge bases during conversations to retrieve relevant information for answering user questions with accurate, contextual responses.","default":false,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables RAG functionality. When enabled, the agent can search linked knowledge bases during conversations to retrieve relevant information for answering user questions with accurate, contextual responses.","default":false,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mode":{"oneOf":[{"type":"string","description":"How the agent searches its knowledge bases in text chat: \"everyTurn\" (the default when omitted) searches once before every reply; \"tool\" lets the agent call a searchKnowledgeBase tool when it needs facts, as many times as a reply needs. Applies to text chat only; voice calls search on every turn in either mode.","enum":["everyTurn","tool"],"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.mode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.rag.oneOf.0.mode.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.rag.oneOf.0.mode","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.rag.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.rag.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.rag","typeLabel":"object | null"},"languageSwitching":{"oneOf":[{"type":"object","description":"Language switching capability allowing the agent to switch between multiple languages during the call. Enables the agent to communicate in different languages within the same conversation.","default":{"version":"v1","isEnabled":true},"properties":{"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0.version","typeLabel":"enum\u003cstring> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables the language switching capability. When enabled, the agent can switch languages mid-conversation in response to user requests to speak in a different language.","default":true,"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables the language switching capability. When enabled, the agent can switch languages mid-conversation in response to user requests to speak in a different language.","default":true,"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0.isEnabled","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.languageSwitching.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.languageSwitching","typeLabel":"object | null"},"fillers":{"oneOf":[{"type":"object","description":"Filler words and phrases configuration. Controls natural speech patterns like \"um\", \"uh\", \"let me see\" to make the agent sound more conversational and human-like.","default":{"version":"v1","isEnabled":true,"strategy":{"type":"static","texts":["um"]}},"properties":{"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.version","typeLabel":"enum\u003cstring> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables filler word insertion. When enabled, the agent occasionally uses the configured filler phrases during conversations to sound more natural and less robotic.","default":true,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables filler word insertion. When enabled, the agent occasionally uses the configured filler phrases during conversations to sound more natural and less robotic.","default":true,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.isEnabled","typeLabel":"boolean | null"},"strategy":{"oneOf":[{"type":"object","description":"Strategy for selecting and inserting filler words. Static strategies use a predefined list of filler phrases. The strategy controls which fillers to use and how often they appear in the agent's speech.","default":{"type":"static","texts":["um"]},"required":["type"],"properties":{"type":{"type":"string","description":"Strategy type identifier. Always returns Static for this filler approach.","enum":["static"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.type","typeLabel":"enum\u003cstring>"},"texts":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.texts.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of filler phrases the agent can use. The agent randomly selects from these options when inserting verbal pauses. Common examples include \"um\", \"uh\", \"let me see\", \"well\", \"you know\", \"hmm\", or \"let me think\". Customize this list to control the agent's hesitation patterns and speaking style.","default":["um"],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.texts.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of filler phrases the agent can use. The agent randomly selects from these options when inserting verbal pauses. Common examples include \"um\", \"uh\", \"let me see\", \"well\", \"you know\", \"hmm\", or \"let me think\". Customize this list to control the agent's hesitation patterns and speaking style.","default":["um"],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.texts.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0.texts","typeLabel":"string[] | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0.strategy","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.fillers.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.fillers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.fillers","typeLabel":"object | null"},"backchannel":{"oneOf":[{"type":"object","description":"Backchannel responses configuration. Controls brief acknowledgments like \"mm-hmm\", \"I see\", \"right\" that the agent uses while listening to show active engagement.","default":{"version":"v1","isEnabled":false},"properties":{"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.version","typeLabel":"enum\u003cstring> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables backchannel acknowledgments. When enabled, the agent produces listening cues while the user speaks to indicate attention and understanding.","default":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables backchannel acknowledgments. When enabled, the agent produces listening cues while the user speaks to indicate attention and understanding.","default":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.isEnabled","typeLabel":"boolean | null"},"behavior":{"oneOf":[{"type":"object","description":"Behavior configuration controlling when and how the agent produces backchannels. Static behaviors use configurable timing properties to determine when to insert acknowledgments. Smart behaviors use intelligent detection to produce backchannels at natural conversation points.","required":["type"],"properties":{"type":{"type":"string","description":"Behavior type identifier. Always returns SmartV1 for this AI-driven approach.","enum":["smartV1"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.type","typeLabel":"enum\u003cstring>"},"additionalInstructions":{"oneOf":[{"type":"string","description":"Optional instructions to guide the AI in producing backchannels. Provides context about when or how to acknowledge, tone to use, or specific phrases to prefer. Supports variable interpolation using {{variableName}} syntax for dynamic instructions based on conversation data.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional instructions to guide the AI in producing backchannels. Provides context about when or how to acknowledge, tone to use, or specific phrases to prefer. Supports variable interpolation using {{variableName}} syntax for dynamic instructions based on conversation data.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.additionalInstructions","typeLabel":"string | null"},"frequency":{"oneOf":[{"type":"number","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Lower values make backchannels very rare, 0.5 provides moderate acknowledgments, and higher values produce frequent listening cues. Controls how often the AI decides to signal active listening during user speech.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.frequency.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Lower values make backchannels very rare, 0.5 provides moderate acknowledgments, and higher values produce frequent listening cues. Controls how often the AI decides to signal active listening during user speech.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.frequency.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0.frequency","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.0","typeLabel":"object"},{"type":"object","description":"Behavior configuration controlling when and how the agent produces backchannels. Static behaviors use configurable timing properties to determine when to insert acknowledgments. Smart behaviors use intelligent detection to produce backchannels at natural conversation points.","required":["type"],"properties":{"type":{"type":"string","description":"Behavior type identifier. Always returns StaticAdvanced for this approach.","enum":["staticAdvanced"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.type","typeLabel":"enum\u003cstring>"},"phrases":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.phrases.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of acknowledgment phrases the agent can use for backchannels. The agent randomly selects from these options when timing conditions are met. Common examples include \"uh-huh\", \"mm-hmm\", \"I see\", \"right\", \"okay\", or \"go on\". Supports variable interpolation using {{variableName}} syntax for dynamic phrases.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.phrases.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of acknowledgment phrases the agent can use for backchannels. The agent randomly selects from these options when timing conditions are met. Common examples include \"uh-huh\", \"mm-hmm\", \"I see\", \"right\", \"okay\", or \"go on\". Supports variable interpolation using {{variableName}} syntax for dynamic phrases.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.phrases.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.phrases","typeLabel":"string[] | null"},"minLengthVoice":{"oneOf":[{"type":"number","description":"Minimum duration in seconds the user must speak before a backchannel can be triggered. Prevents acknowledgments from interrupting very short utterances. The agent waits at least this long into user speech before considering backchannel insertion.","format":"double","default":10,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoice.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Minimum duration in seconds the user must speak before a backchannel can be triggered. Prevents acknowledgments from interrupting very short utterances. The agent waits at least this long into user speech before considering backchannel insertion.","format":"double","default":10,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoice.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoice","typeLabel":"number\u003cdouble> | null"},"minLengthVoiceDeviation":{"oneOf":[{"type":"number","description":"Percentage deviation for minimum voice length randomization, ranging from 0.0 to 1.0. Multiplied by MinLengthVoice to introduce natural variation in when backchannels can occur. Higher values create more unpredictability in timing for a more human-like pattern.","format":"double","default":0.25,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoiceDeviation.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Percentage deviation for minimum voice length randomization, ranging from 0.0 to 1.0. Multiplied by MinLengthVoice to introduce natural variation in when backchannels can occur. Higher values create more unpredictability in timing for a more human-like pattern.","format":"double","default":0.25,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoiceDeviation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minLengthVoiceDeviation","typeLabel":"number\u003cdouble> | null"},"frequency":{"oneOf":[{"type":"number","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Controls how often acknowledgments occur when timing conditions are met. Lower values make backchannels rarer, higher values produce more frequent listening cues.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.frequency.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Controls how often acknowledgments occur when timing conditions are met. Lower values make backchannels rarer, higher values produce more frequent listening cues.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.frequency.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.frequency","typeLabel":"number\u003cdouble> | null"},"minCooldown":{"oneOf":[{"type":"number","description":"Minimum time in seconds that must elapse between consecutive backchannels. Prevents acknowledgments from occurring too close together. The agent waits at least this long after one backchannel before producing another.","format":"double","default":8,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldown.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Minimum time in seconds that must elapse between consecutive backchannels. Prevents acknowledgments from occurring too close together. The agent waits at least this long after one backchannel before producing another.","format":"double","default":8,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldown.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldown","typeLabel":"number\u003cdouble> | null"},"minCooldownDeviation":{"oneOf":[{"type":"number","description":"Percentage deviation for cooldown randomization, ranging from 0.0 to 1.0. Multiplied by MinCooldown to introduce natural variation in spacing between backchannels. Higher values create more unpredictable timing for a more human-like rhythm.","format":"double","default":0.25,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldownDeviation.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Percentage deviation for cooldown randomization, ranging from 0.0 to 1.0. Multiplied by MinCooldown to introduce natural variation in spacing between backchannels. Higher values create more unpredictable timing for a more human-like rhythm.","format":"double","default":0.25,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldownDeviation.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1.minCooldownDeviation","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.1","typeLabel":"object"},{"type":"object","description":"Behavior configuration controlling when and how the agent produces backchannels. Static behaviors use configurable timing properties to determine when to insert acknowledgments. Smart behaviors use intelligent detection to produce backchannels at natural conversation points.","required":["type"],"properties":{"type":{"type":"string","description":"Behavior type identifier. Always returns Static for this approach.","enum":["static"],"isRequired":true,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.type","typeLabel":"enum\u003cstring>"},"phrases":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.phrases.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of acknowledgment phrases the agent can use for backchannels. The agent randomly selects from these options when inserting listening cues. Common examples include \"uh-huh\", \"mm-hmm\", \"I see\", \"right\", \"okay\", or \"go on\". Supports variable interpolation using {{variableName}} syntax for dynamic phrases.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.phrases.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of acknowledgment phrases the agent can use for backchannels. The agent randomly selects from these options when inserting listening cues. Common examples include \"uh-huh\", \"mm-hmm\", \"I see\", \"right\", \"okay\", or \"go on\". Supports variable interpolation using {{variableName}} syntax for dynamic phrases.","default":null,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.phrases.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.phrases","typeLabel":"string[] | null"},"frequency":{"oneOf":[{"type":"number","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Lower values make backchannels very rare, 0.5 provides moderate acknowledgments, and higher values produce frequent listening cues. Controls how often the agent signals active listening during user speech.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.frequency.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Frequency of backchannel insertions ranging from 0.0 to 1.0. Lower values make backchannels very rare, 0.5 provides moderate acknowledgments, and higher values produce frequent listening cues. Controls how often the agent signals active listening during user speech.","format":"double","default":0.5,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.frequency.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2.frequency","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0.behavior","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.backchannel.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.backchannel.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.backchannel","typeLabel":"object | null"},"turnTaking":{"oneOf":[{"type":"object","description":"Turn taking configuration for the main customer call. Controls which DashaScript VAD mode is passed to the initial connect operation.","default":{"version":"v1","vad":"asap_v2","vadFallback":"asap_v2"},"properties":{"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.0.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.0.version","typeLabel":"enum\u003cstring> | null"},"vad":{"type":"string","description":"Voice activity detection mode passed to the main call connect options.","default":"asap_v2","enum":["asap_v1","asap_v2","flux","companion"],"uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.0.vad","typeLabel":"enum\u003cstring>"},"vadFallback":{"type":"string","description":"Fallback used only in companion mode. Omitted uses Platform's ASAP v2 default.","default":"asap_v2","enum":["asap_v2","asap_v1","legacy"],"uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.0.vadFallback","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.turnTaking.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.turnTaking","typeLabel":"object | null"},"companions":{"oneOf":[{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"oneOf":[{"type":"string","description":"Optional absolute ws/wss URL. Omit to resolve the companion by its registered name.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.url.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional absolute ws/wss URL. Omit to resolve the companion by its registered name.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.url","typeLabel":"string | null"},"streams":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.streams.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Subscribed streams: audio, vad, stt, tts, vad_prob. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.streams.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Subscribed streams: audio, vad, stt, tts, vad_prob. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.streams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.streams","typeLabel":"string[] | null"},"channels":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.channels.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Audio channels: in, out. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.channels.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Audio channels: in, out. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.channels.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.channels","typeLabel":"string[] | null"},"mic":{"oneOf":[{"type":"string","description":"Microphone source: raw or cleaned. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.mic.oneOf.0","typeLabel":"string"},{"type":"null","description":"Microphone source: raw or cleaned. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.mic.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.mic","typeLabel":"string | null"},"turn_control":{"oneOf":[{"type":"boolean","description":"Opt in to controlling turns when turnTaking.vad is companion.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.turn_control.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opt in to controlling turns when turnTaking.vad is companion.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.turn_control.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.turn_control","typeLabel":"boolean | null"},"interruption_control":{"oneOf":[{"type":"boolean","description":"Opt in to companion interruption decisions. Requires turn control.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.interruption_control.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opt in to companion interruption decisions. Requires turn control.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.interruption_control.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.interruption_control","typeLabel":"boolean | null"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional headers sent on the companion WebSocket connection.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional headers sent on the companion WebSocket connection.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.headers","typeLabel":"object | null"},"max_message_bytes":{"oneOf":[{"type":"integer","description":"Positive inbound message size limit in bytes.","format":"int32","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_message_bytes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Positive inbound message size limit in bytes.","format":"int32","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_message_bytes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_message_bytes","typeLabel":"integer\u003cint32> | null"},"max_messages_per_second":{"oneOf":[{"type":"number","description":"Positive inbound message rate limit.","format":"double","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_messages_per_second.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Positive inbound message rate limit.","format":"double","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_messages_per_second.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.max_messages_per_second","typeLabel":"number\u003cdouble> | null"},"params":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Companion-specific parameters, preserving nested JSON values.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Companion-specific parameters, preserving nested JSON values.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties.params","typeLabel":"object | null"}},"additionalProperties":false,"description":"Voice companion options for the main customer call. Field names match Platform's wire configuration.\nOmitted options inherit the registered companion's defaults. Provider secrets belong in Platform.","uniqueKey":"config.features.oneOf.0.companions.oneOf.0.additionalProperties","typeLabel":"object"},"description":"Optional voice companions for the main customer call, keyed by registered name.\nA custom companion may supply an absolute ws/wss URL. Omitted means no companions.","default":null,"uniqueKey":"config.features.oneOf.0.companions.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"object","properties":{"url":{"oneOf":[{"type":"string","description":"Optional absolute ws/wss URL. Omit to resolve the companion by its registered name.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.url.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional absolute ws/wss URL. Omit to resolve the companion by its registered name.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.url","typeLabel":"string | null"},"streams":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.streams.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Subscribed streams: audio, vad, stt, tts, vad_prob. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.streams.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Subscribed streams: audio, vad, stt, tts, vad_prob. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.streams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.streams","typeLabel":"string[] | null"},"channels":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.channels.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Audio channels: in, out. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.channels.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Audio channels: in, out. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.channels.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.channels","typeLabel":"string[] | null"},"mic":{"oneOf":[{"type":"string","description":"Microphone source: raw or cleaned. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.mic.oneOf.0","typeLabel":"string"},{"type":"null","description":"Microphone source: raw or cleaned. Omit to inherit defaults.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.mic.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.mic","typeLabel":"string | null"},"turn_control":{"oneOf":[{"type":"boolean","description":"Opt in to controlling turns when turnTaking.vad is companion.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.turn_control.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opt in to controlling turns when turnTaking.vad is companion.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.turn_control.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.turn_control","typeLabel":"boolean | null"},"interruption_control":{"oneOf":[{"type":"boolean","description":"Opt in to companion interruption decisions. Requires turn control.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.interruption_control.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Opt in to companion interruption decisions. Requires turn control.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.interruption_control.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.interruption_control","typeLabel":"boolean | null"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional headers sent on the companion WebSocket connection.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional headers sent on the companion WebSocket connection.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.headers","typeLabel":"object | null"},"max_message_bytes":{"oneOf":[{"type":"integer","description":"Positive inbound message size limit in bytes.","format":"int32","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_message_bytes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Positive inbound message size limit in bytes.","format":"int32","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_message_bytes.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_message_bytes","typeLabel":"integer\u003cint32> | null"},"max_messages_per_second":{"oneOf":[{"type":"number","description":"Positive inbound message rate limit.","format":"double","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_messages_per_second.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Positive inbound message rate limit.","format":"double","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_messages_per_second.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.max_messages_per_second","typeLabel":"number\u003cdouble> | null"},"params":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Companion-specific parameters, preserving nested JSON values.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Companion-specific parameters, preserving nested JSON values.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties.params","typeLabel":"object | null"}},"additionalProperties":false,"description":"Voice companion options for the main customer call. Field names match Platform's wire configuration.\nOmitted options inherit the registered companion's defaults. Provider secrets belong in Platform.","uniqueKey":"config.features.oneOf.0.companions.oneOf.1.additionalProperties","typeLabel":"object"},"description":"Optional voice companions for the main customer call, keyed by registered name.\nA custom companion may supply an absolute ws/wss URL. Omitted means no companions.","default":null,"uniqueKey":"config.features.oneOf.0.companions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.companions","typeLabel":"object | null"},"silenceManagement":{"oneOf":[{"type":"object","description":"Silence management configuration. Controls how the agent handles pauses and silence during conversations including timeout behavior and prompting strategies.","default":{"version":"v1","isEnabled":true,"maxReminderAttempts":2,"reminderSilenceThresholdSeconds":5,"endWhenReminderLimitExceeded":true},"properties":{"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.version","typeLabel":"enum\u003cstring> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables silence management. When enabled, the agent sends reminders when the user is silent and can automatically end conversations after inactivity thresholds are exceeded. When disabled, the agent waits indefinitely for user input without prompting or terminating.","default":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables silence management. When enabled, the agent sends reminders when the user is silent and can automatically end conversations after inactivity thresholds are exceeded. When disabled, the agent waits indefinitely for user input without prompting or terminating.","default":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.isEnabled","typeLabel":"boolean | null"},"maxReminderAttempts":{"oneOf":[{"type":"integer","description":"Maximum number of reminder attempts to make when the user is silent. After this limit is reached, behavior is controlled by EndWhenReminderLimitExceeded to determine whether to end the call or stop reminding.","format":"int32","default":2,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.maxReminderAttempts.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum number of reminder attempts to make when the user is silent. After this limit is reached, behavior is controlled by EndWhenReminderLimitExceeded to determine whether to end the call or stop reminding.","format":"int32","default":2,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.maxReminderAttempts.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.maxReminderAttempts","typeLabel":"integer\u003cint32> | null"},"reminderSilenceThresholdSeconds":{"oneOf":[{"type":"number","description":"Silence duration in seconds after which a reminder is triggered. The agent waits this long for user input before prompting the user to ensure they are still engaged in the conversation.","format":"double","default":5,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.reminderSilenceThresholdSeconds.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Silence duration in seconds after which a reminder is triggered. The agent waits this long for user input before prompting the user to ensure they are still engaged in the conversation.","format":"double","default":5,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.reminderSilenceThresholdSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.reminderSilenceThresholdSeconds","typeLabel":"number\u003cdouble> | null"},"endWhenReminderLimitExceeded":{"oneOf":[{"type":"boolean","description":"Controls whether to end the conversation when maximum reminder attempts have been exceeded. When true, the call terminates after all reminders are exhausted. When false, the agent stops sending reminders but keeps the conversation open, waiting indefinitely for user input.","default":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endWhenReminderLimitExceeded.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Controls whether to end the conversation when maximum reminder attempts have been exceeded. When true, the call terminates after all reminders are exhausted. When false, the agent stops sending reminders but keeps the conversation open, waiting indefinitely for user input.","default":true,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endWhenReminderLimitExceeded.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endWhenReminderLimitExceeded","typeLabel":"boolean | null"},"endAfterSilenceThresholdSeconds":{"oneOf":[{"type":"number","description":"Absolute silence duration in seconds after which the conversation is automatically ended, regardless of reminder attempts. Provides a hard timeout for user inactivity. When not specified, only reminder-based termination applies.","format":"double","default":null,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endAfterSilenceThresholdSeconds.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Absolute silence duration in seconds after which the conversation is automatically ended, regardless of reminder attempts. Provides a hard timeout for user inactivity. When not specified, only reminder-based termination applies.","format":"double","default":null,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endAfterSilenceThresholdSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0.endAfterSilenceThresholdSeconds","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.silenceManagement.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.silenceManagement","typeLabel":"object | null"},"preConversationMedia":{"oneOf":[{"type":"object","description":"Pre-conversation media playback. Plays an audio file immediately when the call connects,\nbefore the conversation begins. The media plays once and is non-interruptible.\nCan be enabled independently for inbound, outbound, and web calls.","default":{"version":"v1","isEnabled":false,"enabledForInbound":false,"enabledForOutbound":false,"enabledForWebCall":false},"properties":{"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.version","typeLabel":"enum\u003cstring> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables pre-conversation media playback.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables pre-conversation media playback.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.isEnabled","typeLabel":"boolean | null"},"mediaFilename":{"oneOf":[{"type":"string","description":"Filename of the uploaded media file to play before the conversation starts.\nMust reference a media file that has been uploaded to the system.","default":null,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.mediaFilename.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filename of the uploaded media file to play before the conversation starts.\nMust reference a media file that has been uploaded to the system.","default":null,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.mediaFilename.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.mediaFilename","typeLabel":"string | null"},"enabledForInbound":{"oneOf":[{"type":"boolean","description":"Enables pre-conversation media for inbound phone calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForInbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables pre-conversation media for inbound phone calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForInbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForInbound","typeLabel":"boolean | null"},"enabledForOutbound":{"oneOf":[{"type":"boolean","description":"Enables pre-conversation media for outbound phone calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForOutbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables pre-conversation media for outbound phone calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForOutbound","typeLabel":"boolean | null"},"enabledForWebCall":{"oneOf":[{"type":"boolean","description":"Enables pre-conversation media for web-based voice calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForWebCall.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables pre-conversation media for web-based voice calls.","default":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForWebCall.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0.enabledForWebCall","typeLabel":"boolean | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.preConversationMedia.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.preConversationMedia","typeLabel":"object | null"},"noiseSuppression":{"oneOf":[{"type":"object","description":"Noise suppression configuration for filtering background noise from call audio.\nSupports \"none\" (disabled) or \"krisp\" (Krisp engine, additional fee applies).\nAlso controls the noise suppression level and recording write strategy.","default":{"version":"v1","isEnabled":false,"type":"none","noiseSuppressionLevel":75,"recordWriteStrategy":"raw"},"properties":{"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.version","typeLabel":"enum\u003cstring> | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Enables or disables noise suppression. When disabled, no noise suppression is applied regardless of other settings.","default":false,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables or disables noise suppression. When disabled, no noise suppression is applied regardless of other settings.","default":false,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.isEnabled","typeLabel":"boolean | null"},"type":{"oneOf":[{"type":"string","description":"The noise suppression engine to use.","default":"none","enum":["none","krisp"],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.type.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.type","typeLabel":"enum\u003cstring> | null"},"noiseSuppressionLevel":{"oneOf":[{"type":"integer","description":"The noise suppression level, from 0 (minimum) to 100 (maximum). Default is 75.\nControls how aggressively background noise is filtered.","format":"int32","default":75,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.noiseSuppressionLevel.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"The noise suppression level, from 0 (minimum) to 100 (maximum). Default is 75.\nControls how aggressively background noise is filtered.","format":"int32","default":75,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.noiseSuppressionLevel.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.noiseSuppressionLevel","typeLabel":"integer\u003cint32> | null"},"recordWriteStrategy":{"oneOf":[{"type":"string","description":"Controls what audio is stored in the call recording.\nDefault is \"raw\".","default":"raw","enum":["raw","cleaned"],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.recordWriteStrategy.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.recordWriteStrategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0.recordWriteStrategy","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.0.noiseSuppression.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features.oneOf.0.noiseSuppression","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.features.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.features.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.features","typeLabel":"object | null"},"mcpConnections":{"oneOf":[{"type":"array","items":{"required":["name","serverUrl"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Display name for this MCP connection. Used to identify the connection in logs and configuration.","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].name","typeLabel":"string"},"serverUrl":{"type":"string","description":"MCP server URL to connect to. The URL format depends on the transport protocol (SSE uses HTTP/HTTPS endpoints, StreamableHTTP uses HTTP endpoints).","format":"uri","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].serverUrl","typeLabel":"string\u003curi>"},"authentication":{"oneOf":[{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["apiKey","type"],"properties":{"type":{"type":"string","description":"Authentication type. Always \"apiKey\" for API key authentication.","minLength":1,"enum":["apiKey"],"readOnly":true,"isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.type","typeLabel":"enum\u003cstring>"},"apiKey":{"minLength":1,"type":"string","description":"API key value to send with requests. This is the secret key provided by the MCP server.","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.apiKey","typeLabel":"string"},"headerName":{"oneOf":[{"type":"string","description":"HTTP header name for the API key. Defaults to \"Authorization\" (the key is sent as the raw value, without a \"Bearer\" prefix). Set a custom header name such as \"X-API-Key\" if the MCP server expects one.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.headerName.oneOf.0","typeLabel":"string"},{"type":"null","description":"HTTP header name for the API key. Defaults to \"Authorization\" (the key is sent as the raw value, without a \"Bearer\" prefix). Set a custom header name such as \"X-API-Key\" if the MCP server expects one.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.headerName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0.headerName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.0","typeLabel":"object"},{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["token","type"],"properties":{"type":{"type":"string","description":"Authentication type. Always \"bearer\" for bearer token authentication.","minLength":1,"enum":["bearer"],"readOnly":true,"isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.1.type","typeLabel":"enum\u003cstring>"},"token":{"minLength":1,"type":"string","description":"Bearer token value without the \"Bearer \" prefix. The system automatically adds the prefix when sending requests. This is the OAuth or JWT token provided by the MCP server or authorization service.","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.1.token","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.1","typeLabel":"object"},{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["type"],"properties":{"type":{"type":"string","description":"Authentication type. Always \"none\" for no authentication.","minLength":1,"enum":["none"],"readOnly":true,"isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.2.type","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].authentication","typeLabel":"object · object · object · null"},"customHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with each request to the MCP server. Useful for passing additional metadata or configuration to the server.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with each request to the MCP server. Useful for passing additional metadata or configuration to the server.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].customHeaders","typeLabel":"object | null"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Whether this MCP connection is enabled. When disabled, the agent will not connect to this MCP server or use its tools.","default":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether this MCP connection is enabled. When disabled, the agent will not connect to this MCP server or use its tools.","default":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isEnabled","typeLabel":"boolean | null"},"description":{"oneOf":[{"type":"string","description":"Optional description explaining the purpose of this MCP connection or what services it provides.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional description explaining the purpose of this MCP connection or what services it provides.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].description","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for MCP communication. Supported values are SSE (Server-Sent Events for persistent connections) and StreamableHTTP (for request-response patterns).","default":"SSE","enum":["SSE","StreamableHTTP"],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].transport","typeLabel":"enum\u003cstring> | null"},"blackListTools":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].blackListTools.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of tool names to exclude from this MCP connection. Tools in this list will not be available to the agent even if the MCP server provides them. Useful for restricting access to specific tools.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].blackListTools.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of tool names to exclude from this MCP connection. Tools in this list will not be available to the agent even if the MCP server provides them. Useful for restricting access to specific tools.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].blackListTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].blackListTools","typeLabel":"string[] | null"},"whiteListTools":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].whiteListTools.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of tool names to allow from this MCP connection. When specified, only tools in this list will be available to the agent. If not specified, all tools from the server are available (subject to BlackListTools).","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].whiteListTools.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of tool names to allow from this MCP connection. When specified, only tools in this list will be available to the agent. If not specified, all tools from the server are available (subject to BlackListTools).","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].whiteListTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].whiteListTools","typeLabel":"string[] | null"},"isLongRunning":{"oneOf":[{"type":"boolean","description":"Whether every tool from this MCP connection is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the MCP server answers. Use LongRunningTools instead to mark only some of the connection's tools. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isLongRunning.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether every tool from this MCP connection is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the MCP server answers. Use LongRunningTools instead to mark only some of the connection's tools. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isLongRunning.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].isLongRunning","typeLabel":"boolean | null"},"longRunningTools":{"oneOf":[{"type":"array","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Raw MCP tool name, as reported by the MCP server and without the connection prefix.","isRequired":true,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX].name","typeLabel":"string"},"additionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX].additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX].additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX].additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"description":"Marks a single tool of an MCP connection as slow. A slow tool never blocks the conversation: the agent gets an immediate acknowledgement, keeps talking to the user, and the real result is added to the conversation history once the MCP server answers.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Individual tools of this connection that are slow, each with optional extra guidance for the agent. Tools listed here are slow even when IsLongRunning is disabled; when IsLongRunning is enabled every tool of the connection is slow and this list only supplies the per-tool guidance. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Raw MCP tool name, as reported by the MCP server and without the connection prefix."},"additionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null},{"type":"null","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null}]}},"additionalProperties":false,"description":"Marks a single tool of an MCP connection as slow. A slow tool never blocks the conversation: the agent gets an immediate acknowledgement, keeps talking to the user, and the real result is added to the conversation history once the MCP server answers."},"description":"Individual tools of this connection that are slow, each with optional extra guidance for the agent. Tools listed here are slow even when IsLongRunning is disabled; when IsLongRunning is enabled every tool of the connection is slow and this list only supplies the per-tool guidance. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":null,"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX].longRunningTools","typeLabel":"object[] | null"}},"additionalProperties":false,"description":"Model Context Protocol connection configuration for integrating external services with the agent. Defines how to connect to an MCP server including server URL, authentication, transport protocol, custom headers, and tool filtering.","uniqueKey":"config.mcpConnections.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Model Context Protocol connections for integrating external services. Allows the agent to connect to MCP servers via SSE or HTTP to access external tools and data sources.","default":[],"uniqueKey":"config.mcpConnections.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["name","serverUrl"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Display name for this MCP connection. Used to identify the connection in logs and configuration."},"serverUrl":{"type":"string","description":"MCP server URL to connect to. The URL format depends on the transport protocol (SSE uses HTTP/HTTPS endpoints, StreamableHTTP uses HTTP endpoints).","format":"uri"},"authentication":{"oneOf":[{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["apiKey","type"],"properties":{"type":{"type":"string","description":"Authentication type. Always \"apiKey\" for API key authentication.","minLength":1,"enum":["apiKey"],"readOnly":true},"apiKey":{"minLength":1,"type":"string","description":"API key value to send with requests. This is the secret key provided by the MCP server."},"headerName":{"oneOf":[{"type":"string","description":"HTTP header name for the API key. Defaults to \"Authorization\" (the key is sent as the raw value, without a \"Bearer\" prefix). Set a custom header name such as \"X-API-Key\" if the MCP server expects one."},{"type":"null","description":"HTTP header name for the API key. Defaults to \"Authorization\" (the key is sent as the raw value, without a \"Bearer\" prefix). Set a custom header name such as \"X-API-Key\" if the MCP server expects one."}]}},"additionalProperties":false},{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["token","type"],"properties":{"type":{"type":"string","description":"Authentication type. Always \"bearer\" for bearer token authentication.","minLength":1,"enum":["bearer"],"readOnly":true},"token":{"minLength":1,"type":"string","description":"Bearer token value without the \"Bearer \" prefix. The system automatically adds the prefix when sending requests. This is the OAuth or JWT token provided by the MCP server or authorization service."}},"additionalProperties":false},{"type":"object","description":"Authentication configuration for the MCP server. Supported types include none, API key, bearer token, and custom authentication schemes.","required":["type"],"properties":{"type":{"type":"string","description":"Authentication type. Always \"none\" for no authentication.","minLength":1,"enum":["none"],"readOnly":true}},"additionalProperties":false},{"type":"null"}]},"customHeaders":{"oneOf":[{"type":"object","additionalProperties":{"type":"string"},"description":"Custom HTTP headers to include with each request to the MCP server. Useful for passing additional metadata or configuration to the server."},{"type":"null","additionalProperties":{"type":"string"},"description":"Custom HTTP headers to include with each request to the MCP server. Useful for passing additional metadata or configuration to the server."}]},"isEnabled":{"oneOf":[{"type":"boolean","description":"Whether this MCP connection is enabled. When disabled, the agent will not connect to this MCP server or use its tools.","default":true},{"type":"null","description":"Whether this MCP connection is enabled. When disabled, the agent will not connect to this MCP server or use its tools.","default":true}]},"description":{"oneOf":[{"type":"string","description":"Optional description explaining the purpose of this MCP connection or what services it provides.","default":null},{"type":"null","description":"Optional description explaining the purpose of this MCP connection or what services it provides.","default":null}]},"transport":{"oneOf":[{"type":"string","description":"Transport protocol for MCP communication. Supported values are SSE (Server-Sent Events for persistent connections) and StreamableHTTP (for request-response patterns).","default":"SSE","enum":["SSE","StreamableHTTP"]},{"type":"null"}]},"blackListTools":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"List of tool names to exclude from this MCP connection. Tools in this list will not be available to the agent even if the MCP server provides them. Useful for restricting access to specific tools.","default":null},{"type":"null","items":{"type":"string"},"description":"List of tool names to exclude from this MCP connection. Tools in this list will not be available to the agent even if the MCP server provides them. Useful for restricting access to specific tools.","default":null}]},"whiteListTools":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"List of tool names to allow from this MCP connection. When specified, only tools in this list will be available to the agent. If not specified, all tools from the server are available (subject to BlackListTools).","default":null},{"type":"null","items":{"type":"string"},"description":"List of tool names to allow from this MCP connection. When specified, only tools in this list will be available to the agent. If not specified, all tools from the server are available (subject to BlackListTools).","default":null}]},"isLongRunning":{"oneOf":[{"type":"boolean","description":"Whether every tool from this MCP connection is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the MCP server answers. Use LongRunningTools instead to mark only some of the connection's tools. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false},{"type":"null","description":"Whether every tool from this MCP connection is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the MCP server answers. Use LongRunningTools instead to mark only some of the connection's tools. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false}]},"longRunningTools":{"oneOf":[{"type":"array","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Raw MCP tool name, as reported by the MCP server and without the connection prefix."},"additionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null},{"type":"null","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null}]}},"additionalProperties":false,"description":"Marks a single tool of an MCP connection as slow. A slow tool never blocks the conversation: the agent gets an immediate acknowledgement, keeps talking to the user, and the real result is added to the conversation history once the MCP server answers."},"description":"Individual tools of this connection that are slow, each with optional extra guidance for the agent. Tools listed here are slow even when IsLongRunning is disabled; when IsLongRunning is enabled every tool of the connection is slow and this list only supplies the per-tool guidance. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":null},{"type":"null","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Raw MCP tool name, as reported by the MCP server and without the connection prefix."},"additionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null},{"type":"null","description":"Extra guidance for the agent about this specific slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the lookup usually takes.","default":null}]}},"additionalProperties":false,"description":"Marks a single tool of an MCP connection as slow. A slow tool never blocks the conversation: the agent gets an immediate acknowledgement, keeps talking to the user, and the real result is added to the conversation history once the MCP server answers."},"description":"Individual tools of this connection that are slow, each with optional extra guidance for the agent. Tools listed here are slow even when IsLongRunning is disabled; when IsLongRunning is enabled every tool of the connection is slow and this list only supplies the per-tool guidance. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":null}]}},"additionalProperties":false,"description":"Model Context Protocol connection configuration for integrating external services with the agent. Defines how to connect to an MCP server including server URL, authentication, transport protocol, custom headers, and tool filtering."},"description":"Model Context Protocol connections for integrating external services. Allows the agent to connect to MCP servers via SSE or HTTP to access external tools and data sources.","default":[],"uniqueKey":"config.mcpConnections.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.mcpConnections","typeLabel":"object[] | null"},"startWebhook":{"oneOf":[{"type":"object","description":"Webhook URL called when a call starts, before the conversation begins. Allows you to inject dynamic data or configuration at call initiation time.","required":["webhook"],"properties":{"webhook":{"type":"object","description":"Webhook configuration defining the endpoint, headers, and request settings for start-of-conversation notifications. The system sends conversation initiation data to this webhook and waits for a response.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.startWebhook.oneOf.0.webhook.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.startWebhook.oneOf.0.webhook.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.startWebhook.oneOf.0.webhook.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.startWebhook.oneOf.0.webhook.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.headers","typeLabel":"object | null"},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"],"isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.httpMethod","typeLabel":"enum\u003cstring>"},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.queryParams","typeLabel":"object | null"},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"type":{"type":"string","description":"Format type identifier. Always returns Text for this format.","enum":["Text"],"isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0.type","typeLabel":"enum\u003cstring>"},"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain.","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0.template","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.0","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"type":{"type":"string","description":"Format type identifier. Always returns Json for this format.","enum":["Json"],"isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.type","typeLabel":"enum\u003cstring>"},"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.1","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"type":{"type":"string","description":"Format type identifier. Always returns Form for this format.","enum":["Form"],"isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.type","typeLabel":"enum\u003cstring>"},"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0.bodyFormat","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.webhook.customSettings","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.webhook","typeLabel":"object"},"version":{"oneOf":[{"enum":["v1"],"type":"string","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.startWebhook.oneOf.0.version.oneOf.0","typeLabel":"enum\u003cstring>"},{"enum":["v1"],"type":"null","description":"Configuration schema version. Currently always \"v1\".","default":"v1","readOnly":true,"uniqueKey":"config.startWebhook.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.version","typeLabel":"enum\u003cstring> | null"},"fallbackResponse":{"oneOf":[{"type":"object","description":"Fallback response to use when the webhook call fails or times out. Determines whether to accept or reject the conversation if the webhook endpoint is unavailable or returns an error. Can be configured to accept the call with default settings or reject it.","default":{"accept":false,"reasonMessage":"Webhook for started webhook failed"},"properties":{"accept":{"enum":[true],"type":"boolean","description":"Accept indicator. Always true for this response type, indicating the call should proceed.","default":true,"readOnly":true,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.accept","typeLabel":"enum\u003cboolean>"},"overrideAgentConfig":{"oneOf":[{"type":"object","description":"Optional modified agent configuration to use for this call instead of the original. Allows customizing the agent's behavior, language model settings, prompts, voice, tools, or any other configuration based on external logic or data. The entire configuration is replaced, not merged, so include all settings you want to apply.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideAgentConfig.oneOf.0","typeLabel":"object"},{"type":"null","description":"Optional modified agent configuration to use for this call instead of the original. Allows customizing the agent's behavior, language model settings, prompts, voice, tools, or any other configuration based on external logic or data. The entire configuration is replaced, not merged, so include all settings you want to apply.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideAgentConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideAgentConfig","typeLabel":"object | null"},"additionalData":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Additional data variables to use for this call. These values can be referenced in prompts using {{variableName}} syntax and override or supplement the agent's default AdditionalData. Useful for personalizing the conversation based on external context or user information.","uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Additional data variables to use for this call. These values can be referenced in prompts using {{variableName}} syntax and override or supplement the agent's default AdditionalData. Useful for personalizing the conversation based on external context or user information.","uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.additionalData","typeLabel":"object | null"},"overrideOutboundConfig":{"oneOf":[{"type":"object","description":"Optional override for outbound SIP configuration. Allows changing the SIP credentials, server, or transport settings for this specific outbound call without modifying the agent's default SIP configuration.","properties":{"phoneNumber":{"oneOf":[{"maxLength":255,"type":"string","description":"Phone number to use for this call instead of the agent's default. Overrides which number appears as the caller ID and which SIP registration is used for the call.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.phoneNumber.oneOf.0","typeLabel":"string"},{"maxLength":255,"type":"null","description":"Phone number to use for this call instead of the agent's default. Overrides which number appears as the caller ID and which SIP registration is used for the call.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.phoneNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.phoneNumber","typeLabel":"string | null"},"credentialsId":{"oneOf":[{"type":"string","description":"SIP credentials to use for this call instead of the agent's default. Allows routing the call through a different SIP trunk, useful for failover, cost optimization, or geographic routing.","format":"uuid","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.credentialsId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"SIP credentials to use for this call instead of the agent's default. Allows routing the call through a different SIP trunk, useful for failover, cost optimization, or geographic routing.","format":"uuid","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.credentialsId.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.credentialsId","typeLabel":"string\u003cuuid> | null"},"displayName":{"oneOf":[{"maxLength":255,"type":"string","description":"Display name to use for caller ID for this call instead of the phone number's default. Overrides the caller ID name shown to the recipient.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"maxLength":255,"type":"null","description":"Display name to use for caller ID for this call instead of the phone number's default. Overrides the caller ID name shown to the recipient.","default":null,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0.displayName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0.overrideOutboundConfig","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.0","typeLabel":"object"},{"type":"object","description":"Fallback response to use when the webhook call fails or times out. Determines whether to accept or reject the conversation if the webhook endpoint is unavailable or returns an error. Can be configured to accept the call with default settings or reject it.","default":{"accept":false,"reasonMessage":"Webhook for started webhook failed"},"required":["reasonMessage"],"properties":{"reasonMessage":{"minLength":1,"type":"string","description":"Explanation of why the call is being rejected. This message is used for logging and debugging purposes to understand why external logic determined the call should not proceed.","isRequired":true,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.1.reasonMessage","typeLabel":"string"},"accept":{"enum":[false],"type":"boolean","description":"Accept indicator. Always false for this response type, indicating the call should be rejected.","default":false,"readOnly":true,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.1.accept","typeLabel":"enum\u003cboolean>"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse.oneOf.2","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.fallbackResponse","typeLabel":"object · object · null"},"isEnabledForInbound":{"oneOf":[{"type":"boolean","description":"Enables the start webhook for inbound phone calls. When enabled, the webhook is triggered when someone calls one of your configured phone numbers, allowing you to accept or reject incoming calls based on external logic.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForInbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables the start webhook for inbound phone calls. When enabled, the webhook is triggered when someone calls one of your configured phone numbers, allowing you to accept or reject incoming calls based on external logic.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForInbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForInbound","typeLabel":"boolean | null"},"isEnabledForOutbound":{"oneOf":[{"type":"boolean","description":"Enables the start webhook for outbound phone calls. When enabled, the webhook is triggered before making an outbound call, allowing you to modify call parameters or cancel the call based on external conditions.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForOutbound.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables the start webhook for outbound phone calls. When enabled, the webhook is triggered before making an outbound call, allowing you to modify call parameters or cancel the call based on external conditions.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForOutbound","typeLabel":"boolean | null"},"isEnabledForWidget":{"oneOf":[{"type":"boolean","description":"Enables the start webhook for widget-based conversations. When enabled, the webhook is triggered when a user initiates a conversation through your web widget, allowing you to accept or reject widget interactions.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForWidget.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enables the start webhook for widget-based conversations. When enabled, the webhook is triggered when a user initiates a conversation through your web widget, allowing you to accept or reject widget interactions.","default":false,"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForWidget.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.isEnabledForWidget","typeLabel":"boolean | null"},"timeout":{"oneOf":[{"type":"number","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the fallback response is used. Controls how long the system waits before proceeding with or rejecting the conversation.","format":"double","default":10,"uniqueKey":"config.startWebhook.oneOf.0.timeout.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the fallback response is used. Controls how long the system waits before proceeding with or rejecting the conversation.","format":"double","default":10,"uniqueKey":"config.startWebhook.oneOf.0.timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook.oneOf.0.timeout","typeLabel":"number\u003cdouble> | null"}},"additionalProperties":false,"uniqueKey":"config.startWebhook.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.startWebhook.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.startWebhook","typeLabel":"object | null"},"tools":{"oneOf":[{"type":"array","items":{"required":["description","name","schema","webhook"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Tool name identifier. Used by the language model to reference this tool when deciding which function to call.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].name","typeLabel":"string"},"schema":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].schema.additionalProperties","typeLabel":"any"},"description":"JSON Schema defining the tool's input parameters. Describes what arguments the tool accepts, their types, and which parameters are required. The language model uses this schema to generate valid function calls.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].schema","typeLabel":"object"},"webhook":{"type":"object","description":"Webhook endpoint to call when the tool is invoked. The system sends a POST request with the tool parameters to this URL and returns the response to the language model.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.headers","typeLabel":"object | null"},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"],"isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.httpMethod","typeLabel":"enum\u003cstring>"},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.queryParams","typeLabel":"object | null"},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"type":{"type":"string","description":"Format type identifier. Always returns Text for this format.","enum":["Text"],"isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.0.type","typeLabel":"enum\u003cstring>"},"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.0.template","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.0","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"type":{"type":"string","description":"Format type identifier. Always returns Json for this format.","enum":["Json"],"isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.type","typeLabel":"enum\u003cstring>"},"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.1","typeLabel":"object"},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"type":{"type":"string","description":"Format type identifier. Always returns Form for this format.","enum":["Form"],"isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.type","typeLabel":"enum\u003cstring>"},"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].jsonPath","typeLabel":"string"},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].argumentJsonPath","typeLabel":"string | null"},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.0","typeLabel":"any"},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX].defaultValue","typeLabel":"any | null"}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name.","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2.template","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.2","typeLabel":"object"},{"type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat.oneOf.3","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0.bodyFormat","typeLabel":"object · object · object · null"}},"additionalProperties":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook.customSettings","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].webhook","typeLabel":"object"},"description":{"minLength":1,"type":"string","description":"Tool description explaining what the tool does and when to use it. The language model uses this description to decide whether this tool is appropriate for the current conversation context.","isRequired":true,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].description","typeLabel":"string"},"fallBackResult":{"oneOf":[{"description":"Fallback result to return if the webhook call fails. When specified, the agent continues the conversation using this result instead of reporting an error to the user.","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].fallBackResult.oneOf.0","typeLabel":"any"},{"description":"Fallback result to return if the webhook call fails. When specified, the agent continues the conversation using this result instead of reporting an error to the user.","default":null,"type":"null","uniqueKey":"config.tools.oneOf.0.items.[INDEX].fallBackResult.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].fallBackResult","typeLabel":"any | null"},"timeoutSeconds":{"oneOf":[{"type":"integer","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the call is considered failed and the fallback result is used if available.","format":"int32","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].timeoutSeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the call is considered failed and the fallback result is used if available.","format":"int32","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].timeoutSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].timeoutSeconds","typeLabel":"integer\u003cint32> | null"},"retryCount":{"oneOf":[{"type":"integer","description":"Number of retry attempts if the webhook call fails. Helps handle transient network errors or temporary service unavailability.","format":"int32","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].retryCount.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Number of retry attempts if the webhook call fails. Helps handle transient network errors or temporary service unavailability.","format":"int32","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].retryCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].retryCount","typeLabel":"integer\u003cint32> | null"},"isLongRunning":{"oneOf":[{"type":"boolean","description":"Whether this tool is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the webhook answers. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].isLongRunning.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether this tool is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the webhook answers. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].isLongRunning.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].isLongRunning","typeLabel":"boolean | null"},"longRunningAdditionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the operation usually takes. Only used when IsLongRunning is enabled and enhanced tooling is disabled.","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].longRunningAdditionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Extra guidance for the agent about this slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the operation usually takes. Only used when IsLongRunning is enabled and enhanced tooling is disabled.","default":null,"uniqueKey":"config.tools.oneOf.0.items.[INDEX].longRunningAdditionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools.oneOf.0.items.[INDEX].longRunningAdditionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"description":"Custom tool definition for language model function calling. Describes a function that the agent can invoke during conversations to perform actions or retrieve information through webhook calls.","uniqueKey":"config.tools.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Custom tools available to the agent during conversations. Each tool defines a function the agent can call with parameters and expected output. The agent will use these tools when needed to accomplish tasks beyond conversation.","default":[],"uniqueKey":"config.tools.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["description","name","schema","webhook"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Tool name identifier. Used by the language model to reference this tool when deciding which function to call."},"schema":{"type":"object","additionalProperties":{"oneOf":[{}]},"description":"JSON Schema defining the tool's input parameters. Describes what arguments the tool accepts, their types, and which parameters are required. The language model uses this schema to generate valid function calls."},"webhook":{"type":"object","description":"Webhook endpoint to call when the tool is invoked. The system sends a POST request with the tool parameters to this URL and returns the response to the language model.","required":["url"],"properties":{"url":{"type":"string","description":"Webhook endpoint URL to send HTTP requests to. The system will POST data to this URL when the webhook is triggered.","format":"uri"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint."},{"type":"null","additionalProperties":{"type":"string"},"description":"Custom HTTP headers to include with webhook requests. Useful for authentication, API keys, or passing additional metadata to the receiving endpoint."}]},"customSettings":{"oneOf":[{"type":"object","description":"Custom webhook request settings including HTTP method, query parameters, and body format configuration. Allows full control over how the webhook request is constructed and sent.","required":["httpMethod"],"properties":{"httpMethod":{"type":"string","description":"HTTP method to use for the webhook request. Determines whether the request uses GET, POST, PUT, PATCH, or DELETE. POST is the most common choice for webhook notifications.","enum":["GET","POST","PUT","PATCH","DELETE"]},"queryParams":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands."},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"Query string parameters to append to the webhook URL. Each parameter can have multiple values. These parameters are URL-encoded and added to the request URL as key=value pairs separated by ampersands."}]},"bodyFormat":{"oneOf":[{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["template","type"],"properties":{"type":{"type":"string","description":"Format type identifier. Always returns Text for this format.","enum":["Text"]},"template":{"minLength":1,"type":"string","description":"Text template defining the structure of the request body. Can include placeholders that are replaced with actual webhook payload values. The template is sent with Content-Type text/plain."}},"additionalProperties":false},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"type":{"type":"string","description":"Format type identifier. Always returns Json for this format.","enum":["Json"]},"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result."},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and where to place them in the output JSON object. Each mapping specifies a JSON path in the payload and where to put the value in the result."}]}},"additionalProperties":false},{"type":"object","description":"Format configuration for the request body. Specifies how the webhook payload is encoded and what Content-Type header is sent. Supports JSON, plain text, and form-encoded formats for compatibility with different endpoint requirements.","required":["type"],"properties":{"type":{"type":"string","description":"Format type identifier. Always returns Form for this format.","enum":["Form"]},"template":{"oneOf":[{"type":"array","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name."},{"type":"null","items":{"required":["jsonPath"],"type":"object","properties":{"jsonPath":{"minLength":1,"type":"string","description":"JSON path in the output where the extracted value should be placed. For JSON format, this defines the structure of the output object. For form format, this is the form field name."},"argumentJsonPath":{"oneOf":[{"type":"string","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."},{"type":"null","description":"JSON path in the webhook payload to extract the value from. When specified, the value at this path in the source payload is copied to the JsonPath location in the output. If not specified, the DefaultValue is used instead."}]},"defaultValue":{"oneOf":[{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated."},{"description":"Default value to use when ArgumentJsonPath is not specified or when the path doesn't exist in the payload. Allows providing fallback values to ensure the output always has required fields populated.","type":"null"}]}},"additionalProperties":false,"description":"Field mapping configuration for extracting values from webhook payloads. Defines how to extract a value from the source payload using JSON path and where to place it in the output, with support for default values when the source path doesn't exist."},"description":"List of field mappings defining which values to extract from the webhook payload and how to encode them as form fields. Each mapping specifies a JSON path in the payload and the corresponding form field name."}]}},"additionalProperties":false},{"type":"null"}]}},"additionalProperties":false},{"type":"null"}]}},"additionalProperties":false},"description":{"minLength":1,"type":"string","description":"Tool description explaining what the tool does and when to use it. The language model uses this description to decide whether this tool is appropriate for the current conversation context."},"fallBackResult":{"oneOf":[{"description":"Fallback result to return if the webhook call fails. When specified, the agent continues the conversation using this result instead of reporting an error to the user.","default":null},{"description":"Fallback result to return if the webhook call fails. When specified, the agent continues the conversation using this result instead of reporting an error to the user.","default":null,"type":"null"}]},"timeoutSeconds":{"oneOf":[{"type":"integer","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the call is considered failed and the fallback result is used if available.","format":"int32","default":null},{"type":"null","description":"Maximum time in seconds to wait for the webhook response. If the webhook doesn't respond within this time, the call is considered failed and the fallback result is used if available.","format":"int32","default":null}]},"retryCount":{"oneOf":[{"type":"integer","description":"Number of retry attempts if the webhook call fails. Helps handle transient network errors or temporary service unavailability.","format":"int32","default":null},{"type":"null","description":"Number of retry attempts if the webhook call fails. Helps handle transient network errors or temporary service unavailability.","format":"int32","default":null}]},"isLongRunning":{"oneOf":[{"type":"boolean","description":"Whether this tool is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the webhook answers. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false},{"type":"null","description":"Whether this tool is potentially slow. A slow tool call does not block the conversation: the agent receives an immediate acknowledgement, keeps talking to the user, and the real result is injected into the conversation history once the webhook answers. Not used when enhanced tooling is enabled in the LLM configuration (LlmConfig.EnhancedTooling).","default":false}]},"longRunningAdditionalInstructions":{"oneOf":[{"type":"string","description":"Extra guidance for the agent about this slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the operation usually takes. Only used when IsLongRunning is enabled and enhanced tooling is disabled.","default":null},{"type":"null","description":"Extra guidance for the agent about this slow tool, delivered to it together with the acknowledgement the moment the tool is called. Use it to tell the agent what to say while the result is pending, for example how long the operation usually takes. Only used when IsLongRunning is enabled and enhanced tooling is disabled.","default":null}]}},"additionalProperties":false,"description":"Custom tool definition for language model function calling. Describes a function that the agent can invoke during conversations to perform actions or retrieve information through webhook calls."},"description":"Custom tools available to the agent during conversations. Each tool defines a function the agent can call with parameters and expected output. The agent will use these tools when needed to accomplish tasks beyond conversation.","default":[],"uniqueKey":"config.tools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.tools","typeLabel":"object[] | null"},"builtInTools":{"oneOf":[{"type":"array","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Built-in tool name. Currently supported tool is \"finishTheConversation\" for ending calls gracefully.","isRequired":true,"uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX].name","typeLabel":"string"},"additionalInstructions":{"oneOf":[{"type":"string","description":"Additional instructions for when and how to use this tool. Guides the agent on the appropriate circumstances to invoke the tool during conversations.","default":null,"uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX].additionalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"Additional instructions for when and how to use this tool. Guides the agent on the appropriate circumstances to invoke the tool during conversations.","default":null,"uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX].additionalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX].additionalInstructions","typeLabel":"string | null"}},"additionalProperties":false,"description":"Configuration for a built-in tool with custom usage instructions. Built-in tools are pre-defined system tools that don't require custom implementation, and this configuration allows you to specify when and how the agent should use them.","uniqueKey":"config.builtInTools.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Built-in tools configuration with additional instructions for when and how to use them. Currently includes \"finishTheConversation\" tool with custom instructions that guide the agent on when to end calls gracefully. These are pre-defined system tools with configurable usage instructions.","default":[],"uniqueKey":"config.builtInTools.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Built-in tool name. Currently supported tool is \"finishTheConversation\" for ending calls gracefully."},"additionalInstructions":{"oneOf":[{"type":"string","description":"Additional instructions for when and how to use this tool. Guides the agent on the appropriate circumstances to invoke the tool during conversations.","default":null},{"type":"null","description":"Additional instructions for when and how to use this tool. Guides the agent on the appropriate circumstances to invoke the tool during conversations.","default":null}]}},"additionalProperties":false,"description":"Configuration for a built-in tool with custom usage instructions. Built-in tools are pre-defined system tools that don't require custom implementation, and this configuration allows you to specify when and how the agent should use them."},"description":"Built-in tools configuration with additional instructions for when and how to use them. Currently includes \"finishTheConversation\" tool with custom instructions that guide the agent on when to end calls gracefully. These are pre-defined system tools with configurable usage instructions.","default":[],"uniqueKey":"config.builtInTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.builtInTools","typeLabel":"object[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"config","typeLabel":"object"},"agentId":{"minLength":1,"type":"string","description":"Unique identifier for the agent. Use this ID to reference the agent in API calls, call enqueueing, and WebSocket connections.","isRequired":true,"uniqueKey":"agentId","typeLabel":"string"},"orgId":{"minLength":1,"type":"string","description":"Organization identifier that owns this agent. All resources and calls for this agent are scoped to this organization.","isRequired":true,"uniqueKey":"orgId","typeLabel":"string"},"createdTime":{"type":"string","description":"Timestamp when the agent was created. Recorded in UTC.","format":"date-time","isRequired":true,"uniqueKey":"createdTime","typeLabel":"string\u003cdate-time>"},"lastUpdateTime":{"type":"string","description":"Timestamp when the agent was last updated. Recorded in UTC and updated whenever any agent configuration changes.","format":"date-time","isRequired":true,"uniqueKey":"lastUpdateTime","typeLabel":"string\u003cdate-time>"},"version":{"type":"integer","description":"Optimistic concurrency version number. Increases with each update. Use this value as expectedVersion when updating to detect concurrent modifications.","format":"int32","isRequired":true,"uniqueKey":"version","typeLabel":"integer\u003cint32>"},"inboundSipConfig":{"type":"object","description":"Inbound call routing configuration showing which phone number routes incoming calls to this agent. Includes the unique configuration ID, assigned phone number, SIP URI for routing, and trunk URI. To modify phone number routing, use the SIP phone numbers API.","required":["id"],"properties":{"id":{"minLength":1,"type":"string","description":"Unique identifier for this inbound SIP configuration.","isRequired":true,"uniqueKey":"inboundSipConfig.id","typeLabel":"string"},"phoneNumber":{"oneOf":[{"type":"string","description":"Phone number assigned to this agent for receiving inbound calls. When incoming calls arrive at this number, they are routed to this agent. Configured via the SIP phone numbers API.","default":null,"uniqueKey":"inboundSipConfig.phoneNumber.oneOf.0","typeLabel":"string"},{"type":"null","description":"Phone number assigned to this agent for receiving inbound calls. When incoming calls arrive at this number, they are routed to this agent. Configured via the SIP phone numbers API.","default":null,"uniqueKey":"inboundSipConfig.phoneNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"inboundSipConfig.phoneNumber","typeLabel":"string | null"},"sipUri":{"oneOf":[{"type":"string","description":"SIP URI for routing incoming calls to this agent. Used internally for call routing and establishing the SIP session.","default":null,"uniqueKey":"inboundSipConfig.sipUri.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP URI for routing incoming calls to this agent. Used internally for call routing and establishing the SIP session.","default":null,"uniqueKey":"inboundSipConfig.sipUri.oneOf.1","typeLabel":"null"}],"uniqueKey":"inboundSipConfig.sipUri","typeLabel":"string | null"},"sipTrunkUri":{"oneOf":[{"type":"string","description":"SIP trunk URI for the provider handling inbound calls. Identifies the SIP trunk configuration used for receiving calls on this phone number.","default":null,"uniqueKey":"inboundSipConfig.sipTrunkUri.oneOf.0","typeLabel":"string"},{"type":"null","description":"SIP trunk URI for the provider handling inbound calls. Identifies the SIP trunk configuration used for receiving calls on this phone number.","default":null,"uniqueKey":"inboundSipConfig.sipTrunkUri.oneOf.1","typeLabel":"null"}],"uniqueKey":"inboundSipConfig.sipTrunkUri","typeLabel":"string | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"inboundSipConfig","typeLabel":"object"},"schedule":{"type":"object","description":"Time-based schedule defining when the agent can make outbound calls. Specifies available time slots for each day of the week and the timezone for schedule interpretation. Scheduled calls will only be placed during these time windows.","required":["timezone"],"properties":{"timezone":{"minLength":1,"type":"string","description":"Timezone identifier for interpreting the schedule times. Uses IANA timezone database names like \"America/New_York\", \"Europe/London\", or \"UTC\". All time slots are interpreted in this timezone.","isRequired":true,"uniqueKey":"schedule.timezone","typeLabel":"string"},"mon":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.mon.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.mon.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.mon.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.mon.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.mon.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.mon.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.mon.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Monday. Each slot defines a start and end time when outbound calls can be made. Multiple non-overlapping slots can be specified for the same day.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.mon.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Monday. Each slot defines a start and end time when outbound calls can be made. Multiple non-overlapping slots can be specified for the same day.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.mon.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.mon","typeLabel":"object[] | null"},"tue":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.tue.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.tue.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.tue.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.tue.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.tue.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.tue.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.tue.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Tuesday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.tue.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Tuesday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.tue.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.tue","typeLabel":"object[] | null"},"wed":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.wed.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.wed.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.wed.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.wed.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.wed.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.wed.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.wed.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Wednesday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.wed.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Wednesday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.wed.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.wed","typeLabel":"object[] | null"},"thu":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.thu.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.thu.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.thu.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.thu.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.thu.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.thu.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.thu.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Thursday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.thu.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Thursday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.thu.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.thu","typeLabel":"object[] | null"},"fri":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.fri.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.fri.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.fri.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.fri.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.fri.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.fri.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.fri.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Friday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.fri.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Friday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.fri.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.fri","typeLabel":"object[] | null"},"sat":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.sat.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.sat.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.sat.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.sat.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.sat.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.sat.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.sat.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Saturday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.sat.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Saturday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.sat.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.sat","typeLabel":"object[] | null"},"sun":{"oneOf":[{"type":"array","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.sun.oneOf.0.items.[INDEX].start.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.sun.oneOf.0.items.[INDEX].start.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.sun.oneOf.0.items.[INDEX].start","typeLabel":"object"},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32","isRequired":true,"uniqueKey":"schedule.sun.oneOf.0.items.[INDEX].end.hour","typeLabel":"integer\u003cint32>"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32","isRequired":true,"uniqueKey":"schedule.sun.oneOf.0.items.[INDEX].end.minute","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule.sun.oneOf.0.items.[INDEX].end","typeLabel":"object"}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week.","uniqueKey":"schedule.sun.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Available time slots for Sunday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.sun.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"required":["end","start"],"type":"object","properties":{"start":{"type":"object","description":"Start time of this available period in 24-hour format. Calls can begin at or after this time.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false},"end":{"type":"object","description":"End time of this available period in 24-hour format. Calls must start before this time. For all-day availability, use Hour=23 and Minute=59.","required":["hour","minute"],"properties":{"hour":{"type":"integer","description":"Hour in 24-hour format. Valid range is 0-23 where 0 represents midnight and 23 represents 11 PM.","format":"int32"},"minute":{"type":"integer","description":"Minute of the hour. Valid range is 0-59.","format":"int32"}},"additionalProperties":false}},"additionalProperties":false,"description":"Time range defining a period during the day when the agent can make outbound calls. Used within agent schedules to specify available calling windows for each day of the week."},"description":"Available time slots for Sunday. Each slot defines a start and end time when outbound calls can be made.","default":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"uniqueKey":"schedule.sun.oneOf.1","typeLabel":"null"}],"uniqueKey":"schedule.sun","typeLabel":"object[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"schedule","typeLabel":"object"},"isEnabled":{"oneOf":[{"type":"boolean","description":"Whether the agent is enabled and can handle calls. When disabled, the agent cannot make outbound calls or handle inbound routing.","default":true,"uniqueKey":"isEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether the agent is enabled and can handle calls. When disabled, the agent cannot make outbound calls or handle inbound routing.","default":true,"uniqueKey":"isEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"isEnabled","typeLabel":"boolean | null"},"description":{"oneOf":[{"type":"string","description":"Optional description explaining the agent's purpose, behavior, or use case. Useful for documentation and team collaboration to understand what this agent is designed to do.","default":null,"uniqueKey":"description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional description explaining the agent's purpose, behavior, or use case. Useful for documentation and team collaboration to understand what this agent is designed to do.","default":null,"uniqueKey":"description.oneOf.1","typeLabel":"null"}],"uniqueKey":"description","typeLabel":"string | null"},"additionalData":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalData.oneOf.0.additionalProperties","typeLabel":"any"},"description":"Default data for variable interpolation in agent prompts. Values can be referenced in prompts using {{variableName}} syntax. These serve as default values for the agent and can be overridden on a per-call basis when enqueueing calls.","uniqueKey":"additionalData.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalData.oneOf.1.additionalProperties","typeLabel":"any"},"description":"Default data for variable interpolation in agent prompts. Values can be referenced in prompts using {{variableName}} syntax. These serve as default values for the agent and can be overridden on a per-call basis when enqueueing calls.","uniqueKey":"additionalData.oneOf.1","typeLabel":"null"}],"uniqueKey":"additionalData","typeLabel":"object | null"}},"additionalProperties":false,"description":"Complete agent details including all configuration, identifiers, timestamps, schedule, and inbound routing. Contains the full agent state including enabled status, display name, optional description, complete agent configuration (TTS, LLM, STT, outbound SIP for making calls, webhooks, features, MCP connections, tools), default prompt variables in AdditionalData, unique identifiers, creation and update timestamps, call schedule for outbound calls, and inbound call routing configuration.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","config":{"primaryLanguage":"\u003cstring>","ttsConfig":{"voiceId":"\u003cstring>","vendor":"\u003cstring>","version":"v1","model":null,"speed":1,"speedAdjustment":{"version":"v1","strategy":"OnRequest"},"vendorSpecificOptions":{},"responsiveness":null,"interruptionSensitivity":null,"pronunciationDictionary":{"id":"\u003cstring>","hash":"\u003cstring>"}},"llmConfig":{"model":"\u003cstring>","vendor":"\u003cstring>","prompt":"\u003cstring>","version":"v1","apiKey":null,"endpoint":null,"options":{"temperature":null,"maxTokens":null,"topP":null,"frequencyPenalty":null,"presencePenalty":null,"stop":null,"trailingPrompt":null,"reasoningMode":null,"maxRetries":null,"reasoningEffort":null},"vendorSpecificOptions":{},"toolScopes":null,"validateToolArguments":null,"enhancedTooling":{"isEnabled":false,"model":null}},"version":"v1","sttConfig":{"version":"v1","vendor":"Auto","vendorSpecificOptions":{}},"outboundSipConfig":{"server":"\u003cstring>","authUser":"\u003cstring>","type":"v1","domain":null,"password":null,"fromUser":null,"transport":"udp","cpsLimit":null,"cpsKey":null,"displayName":null},"resultWebhook":{"url":"\u003cstring>","headers":{},"customSettings":{"httpMethod":"GET","queryParams":{},"bodyFormat":{"type":"Text","template":"\u003cstring>"}}},"features":{"version":"v1","postCallAnalysis":[],"talkFirst":{"version":"v1","delay":1,"isEnabled":false,"interruptible":true},"maxDuration":{"version":"v1","maxDurationSeconds":3600,"maxDurationInTransferSeconds":7200,"isEnabled":true},"ivrDetection":{"version":"v1","isEnabled":true,"enabledForChat":false,"enabledForInbound":false,"enabledForOutbound":true,"enabledForWebCall":false,"ivrNavigation":false},"ambientNoise":{"version":"v1","isEnabled":false,"ambientNoiseLevel":0.1},"languageSwitching":{"version":"v1","isEnabled":true},"fillers":{"version":"v1","isEnabled":true,"strategy":{"type":"static","texts":["um"]}},"backchannel":{"version":"v1","isEnabled":false},"turnTaking":{"version":"v1","vad":"asap_v2","vadFallback":"asap_v2"},"silenceManagement":{"version":"v1","isEnabled":true,"maxReminderAttempts":2,"reminderSilenceThresholdSeconds":5,"endWhenReminderLimitExceeded":true},"preConversationMedia":{"version":"v1","isEnabled":false,"enabledForInbound":false,"enabledForOutbound":false,"enabledForWebCall":false},"noiseSuppression":{"version":"v1","isEnabled":false,"type":"none","noiseSuppressionLevel":75,"recordWriteStrategy":"raw"}},"mcpConnections":[],"startWebhook":{"webhook":{"url":"\u003cstring>","headers":{},"customSettings":{"httpMethod":"GET","queryParams":{},"bodyFormat":{"type":"Text","template":"\u003cstring>"}}},"version":"v1","fallbackResponse":{"accept":false,"reasonMessage":"Webhook for started webhook failed"},"isEnabledForInbound":false,"isEnabledForOutbound":false,"isEnabledForWidget":false,"timeout":10},"tools":[],"builtInTools":[]},"agentId":"\u003cstring>","orgId":"\u003cstring>","createdTime":"2023-11-07T05:31:56Z","lastUpdateTime":"2023-11-07T05:31:56Z","version":123,"inboundSipConfig":{"id":"\u003cstring>","phoneNumber":null,"sipUri":null,"sipTrunkUri":null},"schedule":{"timezone":"\u003cstring>","mon":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"tue":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"wed":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"thu":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"fri":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"sat":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}],"sun":[{"start":{"hour":0,"minute":0},"end":{"hour":23,"minute":59}}]},"isEnabled":true,"description":null,"additionalData":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"0b75638b-dbc3-4e0d-b9b4-6d1e18da8cb8":{"description":"Invalid configuration or validation errors","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"oneOf":[{"type":"string","uniqueKey":"type.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"type.oneOf.1","typeLabel":"null"}],"uniqueKey":"type","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"status":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"status.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"integer\u003cint32> | null"},"detail":{"oneOf":[{"type":"string","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"detail","typeLabel":"string | null"},"instance":{"oneOf":[{"type":"string","uniqueKey":"instance.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"instance.oneOf.1","typeLabel":"null"}],"uniqueKey":"instance","typeLabel":"string | null"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"\u003cstring>","title":"\u003cstring>","status":123,"detail":"\u003cstring>","instance":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"9bce123e-fecd-4c93-b506-ed5ff9037bc7":{"description":"Authentication failed or API key is missing","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"oneOf":[{"type":"string","uniqueKey":"type.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"type.oneOf.1","typeLabel":"null"}],"uniqueKey":"type","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"status":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"status.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"integer\u003cint32> | null"},"detail":{"oneOf":[{"type":"string","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"detail","typeLabel":"string | null"},"instance":{"oneOf":[{"type":"string","uniqueKey":"instance.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"instance.oneOf.1","typeLabel":"null"}],"uniqueKey":"instance","typeLabel":"string | null"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"\u003cstring>","title":"\u003cstring>","status":123,"detail":"\u003cstring>","instance":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"8ef4357e-9acf-4bbe-be0c-ef26b1608ad9":{"description":"Access denied or agent not in organization","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"oneOf":[{"type":"string","uniqueKey":"type.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"type.oneOf.1","typeLabel":"null"}],"uniqueKey":"type","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"status":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"status.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"integer\u003cint32> | null"},"detail":{"oneOf":[{"type":"string","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"detail","typeLabel":"string | null"},"instance":{"oneOf":[{"type":"string","uniqueKey":"instance.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"instance.oneOf.1","typeLabel":"null"}],"uniqueKey":"instance","typeLabel":"string | null"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"\u003cstring>","title":"\u003cstring>","status":123,"detail":"\u003cstring>","instance":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"628e5eb4-97b0-473c-8ad8-6edcb38ca65b":{"description":"Agent with specified ID does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"oneOf":[{"type":"string","uniqueKey":"type.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"type.oneOf.1","typeLabel":"null"}],"uniqueKey":"type","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"status":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"status.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"integer\u003cint32> | null"},"detail":{"oneOf":[{"type":"string","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"detail","typeLabel":"string | null"},"instance":{"oneOf":[{"type":"string","uniqueKey":"instance.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"instance.oneOf.1","typeLabel":"null"}],"uniqueKey":"instance","typeLabel":"string | null"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"\u003cstring>","title":"\u003cstring>","status":123,"detail":"\u003cstring>","instance":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"f3a34d26-70ca-4027-91f4-71f63f5bb7bf":{"description":"Agent name conflicts with existing agent","content":{"application/json":{"schema":{"required":["message","type"],"type":"object","properties":{"type":{"minLength":1,"enum":["error"],"type":"string","readOnly":true,"isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"message":{"minLength":1,"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"error","message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"0bc6cc84-5488-4914-998b-b28b3c6ecf3e":{"description":"Server error occurred during agent update","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{"438e7f68-a155-42fd-8675-9d1199ae2693":{"ApiKey":{"type":"http","description":"API Key Authentication (Bearer {key})","scheme":"Bearer","scopes":[],"schemeName":"ApiKey"}},"bcfc7084-0b9a-4851-80ea-de419eddc013":{"OAuth":{"type":"oauth2","flows":{"implicit":{"authorizationUrl":"https://auth.dasha.ai/connect/authorize","scopes":{"platform_api":"Platform API"}}},"scopes":[],"schemeName":"OAuth"}}},"servers":{"5fb0835c-a4f0-4503-aebe-00595f89e21f":{"url":"https://blackbox.dasha.ai","description":"Dasha BlackBox Agent API"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","description":"API Key Authentication (Bearer {key})","scheme":"Bearer","scopes":[],"schemeName":"ApiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API Key Authentication (Bearer {key})","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"ApiKey","name":"Authorization"}],"title":"ApiKey"},{"schemes":[{"scheme":{"type":"oauth2","flows":{"implicit":{"authorizationUrl":"https://auth.dasha.ai/connect/authorize","scopes":{"platform_api":"Platform API"}}},"scopes":[],"schemeName":"OAuth"},"schema":{"title":"OAuth2 Auth","type":"string","isRequired":true,"description":"The access token received from the authorization server in the OAuth 2.0 flow.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"OAuth","name":"Authorization"}],"title":"OAuth"}]},"originalFileLocation":"https://blackbox.dasha.ai/swagger/v1/swagger.json"},"subdomain":"dasha-628f9d33","siteName":"Dasha BlackBox Documentation","title":"Update agent - Dasha BlackBox Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-04T09:27:34.150Z","originalFileLocation":"docs/api-reference/agents/update-agent.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Updates an existing AI voice agent with a new configuration. This is a full replacement operation where all fields in the request body replace the existing configuration. ElevenLabs, Cartesia, Inworld and xAI voice IDs are checked with the provider. A confirmed missing voice returns 400; unavailable checks do not prevent saving. Other providers are not checked.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Dasha BlackBox Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dasha-628f9d33/fTvoboiNZnitZ8gw/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/dasha-628f9d33/fTvoboiNZnitZ8gw/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dasha-628f9d33/fTvoboiNZnitZ8gw/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dasha-628f9d33/fTvoboiNZnitZ8gw/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dasha-628f9d33/fTvoboiNZnitZ8gw/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dasha-628f9d33/fTvoboiNZnitZ8gw/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dasha-628f9d33/fTvoboiNZnitZ8gw/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dasha-628f9d33/fTvoboiNZnitZ8gw/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dasha-628f9d33/fTvoboiNZnitZ8gw/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Update agent - Dasha BlackBox Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Updates an existing AI voice agent with a new configuration. This is a full replacement operation where all fields in the request body replace the existing configuration. ElevenLabs, Cartesia, Inworld and xAI voice IDs are checked with the provider. A confirmed missing voice returns 400; unavailable checks do not prevent saving. Other providers are not checked.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Dasha BlackBox Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://blackbox.dasha.ai/docs/api-reference/agents/update-agent\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://dasha-628f9d33.mintlify.site/_mintlify/api/og/v2?division=Agents\u0026amp;title=Update+agent\u0026amp;description=Updates+an+existing+AI+voice+agent+with+a+new+configuration.+This+is+a+full+replacement+operation%0Awhere+all+fields+in+the+request+body+replace+the+existing+conf\u0026amp;theme=8f648b54f3a39a57bca8af12\u0026amp;signature=a31d736ad1ec7249b9e5c19375f6a360f0f5a7631a8c9e184e711aa10f2f79a5\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Update agent - Dasha BlackBox Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Updates an existing AI voice agent with a new configuration. This is a full replacement operation where all fields in the request body replace the existing configuration. ElevenLabs, Cartesia, Inworld and xAI voice IDs are checked with the provider. A confirmed missing voice returns 400; unavailable checks do not prevent saving. Other providers are not checked.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dasha-628f9d33.mintlify.site/_mintlify/api/og/v2?division=Agents\u0026amp;title=Update+agent\u0026amp;description=Updates+an+existing+AI+voice+agent+with+a+new+configuration.+This+is+a+full+replacement+operation%0Awhere+all+fields+in+the+request+body+replace+the+existing+conf\u0026amp;theme=8f648b54f3a39a57bca8af12\u0026amp;signature=a31d736ad1ec7249b9e5c19375f6a360f0f5a7631a8c9e184e711aa10f2f79a5\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/dasha-628f9d33/fTvoboiNZnitZ8gw/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Dasha BlackBox Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4F46E5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://blackbox.dasha.ai/docs/api-reference/agents/update-agent\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-reference/agents/update-agent.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://blackbox.dasha.ai/#organization\",\"name\":\"Dasha BlackBox Documentation\",\"url\":\"https://blackbox.dasha.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/dasha-628f9d33/OIOU150RbPNcpw0P/docs/logo-wordmark-light.svg?fit=max\u0026auto=format\u0026n=OIOU150RbPNcpw0P\u0026q=85\u0026s=d09a8bf9e3455eda1fccc003884b3cdf\"}},{\"@type\":\"WebSite\",\"@id\":\"https://blackbox.dasha.ai#website\",\"name\":\"Dasha BlackBox Documentation\",\"url\":\"https://blackbox.dasha.ai\",\"publisher\":{\"@id\":\"https://blackbox.dasha.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://blackbox.dasha.ai/docs/api-reference/agents/update-agent#webpage\",\"url\":\"https://blackbox.dasha.ai/docs/api-reference/agents/update-agent\",\"name\":\"Update agent\",\"description\":\"Updates an existing AI voice agent with a new configuration. This is a full replacement operation where all fields in the request body replace the existing configuration. ElevenLabs, Cartesia, Inworld and xAI voice IDs are checked with the provider. A confirmed missing voice returns 400; unavailable checks do not prevent saving. Other providers are not checked.\",\"dateModified\":\"2026-11-04T09:27:34.150Z\",\"isPartOf\":{\"@id\":\"https://blackbox.dasha.ai#website\"},\"breadcrumb\":{\"@id\":\"https://blackbox.dasha.ai/docs/api-reference/agents/update-agent#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://blackbox.dasha.ai/docs/api-reference/agents/update-agent#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Agents\",\"item\":\"https://blackbox.dasha.ai/docs/api-reference/agents/list-agents\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Update agent\",\"item\":\"https://blackbox.dasha.ai/docs/api-reference/agents/update-agent\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://blackbox.dasha.ai/docs/api-reference/agents/update-agent#apireference\",\"headline\":\"Update agent\",\"name\":\"Update agent\",\"description\":\"Updates an existing AI voice agent with a new configuration. This is a full replacement operation where all fields in the request body replace the existing configuration. ElevenLabs, Cartesia, Inworld and xAI voice IDs are checked with the provider. A confirmed missing voice returns 400; unavailable checks do not prevent saving. Other providers are not checked.\",\"url\":\"https://blackbox.dasha.ai/docs/api-reference/agents/update-agent\",\"mainEntityOfPage\":{\"@id\":\"https://blackbox.dasha.ai/docs/api-reference/agents/update-agent#webpage\"},\"dateModified\":\"2026-11-04T09:27:34.150Z\",\"publisher\":{\"@id\":\"https://blackbox.dasha.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://blackbox.dasha.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Dasha BlackBox Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Dasha BlackBox Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/api-reference/agents/update-agent.md","siteName":"Dasha BlackBox Documentation","nav":{"global":{"anchors":[{"anchor":"Status","icon":"chart-line","href":"https://status.dasha.ai"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/docs/introduction/what-is-blackbox"}]},{"tab":"API Reference","groups":[{"group":"ActivityLogs","pages":[{"title":"Search activity log","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/activity-logs/search","href":"/docs/api-reference/activitylogs/search-activity-log"}]},{"group":"Agents","pages":[{"title":"List agents","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/agents","href":"/docs/api-reference/agents/list-agents"},{"title":"Create agent","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/agents","href":"/docs/api-reference/agents/create-agent"},{"title":"Get agent","description":"Retrieves detailed configuration for a specific AI voice agent using its unique identifier (UUID).\nThe response includes all agent settings: voice configuration, TTS settings, enabled features\n(call transfer, recording, ambient noise), SIP configuration, webhook URLs, and infrastructure assignments.\n \n**Agent Identifier Format:** UUID (e.g., \"123e4567-e89b-12d3-a456-426614174000\")\n \n**Response Includes:**\n- Agent name and description\n- Voice and TTS configuration\n- Feature flags (transfer, recording, etc.)\n- Inbound and outbound SIP configuration\n- Webhook configuration\n- Infrastructure assignments (server regions)","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/agents/{agentId}","href":"/docs/api-reference/agents/get-agent"},{"title":"Update agent","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json put /api/v1/agents/{agentId}","href":"/docs/api-reference/agents/update-agent"},{"title":"Delete agent","description":"Permanently deletes an AI voice agent from your organization. This operation removes the agent\nconfiguration and infrastructure assignments but preserves historical call records.","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json delete /api/v1/agents/{agentId}","href":"/docs/api-reference/agents/delete-agent"},{"title":"Clone agent","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/agents/{agentId}/clone","href":"/docs/api-reference/agents/clone-agent"},{"title":"Get agents linked to knowledge base","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/agents/knowledge-base/list","href":"/docs/api-reference/agents/get-agents-linked-to-knowledge-base"}]},{"group":"AgentTestCases","pages":[]},{"group":"AgentToolTestResults","pages":[]},{"group":"CallResults","pages":[{"title":"Search call results","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/callresults/search","href":"/docs/api-reference/callresults/search-call-results"}]},{"group":"Calls","pages":[{"title":"Create call","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/calls","href":"/docs/api-reference/calls/create-call"},{"title":"Register inbound call","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/calls/register","href":"/docs/api-reference/calls/register-inbound-call"},{"title":"Create bulk calls","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/calls/bulk","href":"/docs/api-reference/calls/create-bulk-calls"},{"title":"Get call","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/calls/{callId}","href":"/docs/api-reference/calls/get-call"},{"title":"Cancel call","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json delete /api/v1/calls/{callId}","href":"/docs/api-reference/calls/cancel-call"},{"title":"Get call queue","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/calls/queue/list","href":"/docs/api-reference/calls/get-call-queue"},{"title":"Get call statistics","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/calls/statistics/statuses","href":"/docs/api-reference/calls/get-call-statistics"},{"title":"Get call recording","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/calls/media/{recordId}","href":"/docs/api-reference/calls/get-call-recording"},{"title":"Get SIP traces","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/calls/{callId}/sip-traces","href":"/docs/api-reference/calls/get-sip-traces"}]},{"group":"Chats","pages":[{"title":"List chat sessions matching the supplied filters.","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/chats","href":"/docs/api-reference/chats/list-chat-sessions-matching-the-supplied-filters"},{"title":"Open a new chat session.","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/chats","href":"/docs/api-reference/chats/open-a-new-chat-session"},{"title":"Submit one user turn to an existing chat session.","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/chats/{id}/messages","href":"/docs/api-reference/chats/submit-one-user-turn-to-an-existing-chat-session"},{"title":"Retrieve a chat session — full transcript and lifecycle status.","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/chats/{id}","href":"/docs/api-reference/chats/retrieve-a-chat-session-—-full-transcript-and-lifecycle-status"},{"title":"End a chat session under the `user_end` reason.","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/chats/{id}/end","href":"/docs/api-reference/chats/end-a-chat-session-under-the-`user_end`-reason"}]},{"group":"Copilot","pages":[]},{"group":"CustomerData","pages":[]},{"group":"Mcp","pages":[{"title":"Verify MCP connection","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/mcp/verify","href":"/docs/api-reference/mcp/verify-mcp-connection"}]},{"group":"Media","pages":[{"title":"List media files","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/media","href":"/docs/api-reference/media/list-media-files"},{"title":"Upload media file","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/media","href":"/docs/api-reference/media/upload-media-file"},{"title":"Get media file","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/media/{id}","href":"/docs/api-reference/media/get-media-file"},{"title":"Delete media file","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json delete /api/v1/media/{id}","href":"/docs/api-reference/media/delete-media-file"},{"title":"Update media file","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json patch /api/v1/media/{id}","href":"/docs/api-reference/media/update-media-file"},{"title":"Download media file","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/media/{id}/download","href":"/docs/api-reference/media/download-media-file"},{"title":"Get agents using media","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/media/{id}/affected-agents","href":"/docs/api-reference/media/get-agents-using-media"}]},{"group":"Misc","pages":[{"title":"Get server configuration","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/misc","href":"/docs/api-reference/misc/get-server-configuration"},{"title":"Get current organization","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/misc/me","href":"/docs/api-reference/misc/get-current-organization"},{"title":"Get concurrency limits","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/misc/concurrency","href":"/docs/api-reference/misc/get-concurrency-limits"},{"title":"Get agent template","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/misc/agent-initial-data","href":"/docs/api-reference/misc/get-agent-template"},{"title":"List predefined background sounds","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/misc/background-sounds","href":"/docs/api-reference/misc/list-predefined-background-sounds"},{"title":"List predefined builtin media","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/misc/builtin-media","href":"/docs/api-reference/misc/list-predefined-builtin-media"},{"title":"List predefined built-in tools","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/misc/builtin-tools","href":"/docs/api-reference/misc/list-predefined-built-in-tools"},{"title":"Get platform capabilities","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/misc/capabilities","href":"/docs/api-reference/misc/get-platform-capabilities"},{"title":"Get capabilities of available models","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/rag/misc/capabilities","href":"/docs/api-reference/misc/get-capabilities-of-available-models"}]},{"group":"OpsDashboard","pages":[]},{"group":"PronunciationDictionaries","pages":[{"title":"List pronunciation dictionaries","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/pronunciation-dictionaries","href":"/docs/api-reference/pronunciationdictionaries/list-pronunciation-dictionaries"},{"title":"Create pronunciation dictionary","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/pronunciation-dictionaries","href":"/docs/api-reference/pronunciationdictionaries/create-pronunciation-dictionary"},{"title":"Get pronunciation dictionary","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/pronunciation-dictionaries/{providerId}","href":"/docs/api-reference/pronunciationdictionaries/get-pronunciation-dictionary"},{"title":"Delete pronunciation dictionary","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json delete /api/v1/pronunciation-dictionaries/{providerId}","href":"/docs/api-reference/pronunciationdictionaries/delete-pronunciation-dictionary"},{"title":"Add pronunciation rules","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/pronunciation-dictionaries/{providerId}/add-rules","href":"/docs/api-reference/pronunciationdictionaries/add-pronunciation-rules"},{"title":"Remove pronunciation rules","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/pronunciation-dictionaries/{providerId}/remove-rules","href":"/docs/api-reference/pronunciationdictionaries/remove-pronunciation-rules"},{"title":"Get agents using pronunciation dictionary","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/pronunciation-dictionaries/{providerId}/affected-agents","href":"/docs/api-reference/pronunciationdictionaries/get-agents-using-pronunciation-dictionary"}]},{"group":"Providers","pages":[{"title":"List providers","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/providers","href":"/docs/api-reference/providers/list-providers"},{"title":"Get provider","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/providers/{id}","href":"/docs/api-reference/providers/get-provider"},{"title":"Delete provider","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json delete /api/v1/providers/{id}","href":"/docs/api-reference/providers/delete-provider"},{"title":"Verify provider","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/providers/{id}/verify","href":"/docs/api-reference/providers/verify-provider"}]},{"group":"SipAliases","pages":[]},{"group":"SipCredentials","pages":[{"title":"List SIP credentials","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/sip-credentials","href":"/docs/api-reference/sipcredentials/list-sip-credentials"},{"title":"Create SIP credential","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/sip-credentials","href":"/docs/api-reference/sipcredentials/create-sip-credential"},{"title":"Get SIP credential","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/sip-credentials/{id}","href":"/docs/api-reference/sipcredentials/get-sip-credential"},{"title":"Update SIP credential","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json put /api/v1/sip-credentials/{id}","href":"/docs/api-reference/sipcredentials/update-sip-credential"},{"title":"Delete SIP credential","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json delete /api/v1/sip-credentials/{id}","href":"/docs/api-reference/sipcredentials/delete-sip-credential"},{"title":"Get agents using SIP credential","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/sip-credentials/{id}/affected-agents","href":"/docs/api-reference/sipcredentials/get-agents-using-sip-credential"}]},{"group":"SipDomains","pages":[{"title":"List custom SIP domains","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/sip-domains","href":"/docs/api-reference/sipdomains/list-custom-sip-domains"},{"title":"Add custom SIP domain","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/sip-domains","href":"/docs/api-reference/sipdomains/add-custom-sip-domain"},{"title":"Get custom SIP domain","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/sip-domains/{id}","href":"/docs/api-reference/sipdomains/get-custom-sip-domain"},{"title":"Delete custom SIP domain","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json delete /api/v1/sip-domains/{id}","href":"/docs/api-reference/sipdomains/delete-custom-sip-domain"},{"title":"Update inbound routing of a custom SIP domain","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json patch /api/v1/sip-domains/{id}","href":"/docs/api-reference/sipdomains/update-inbound-routing-of-a-custom-sip-domain"},{"title":"Verify custom SIP domain","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/sip-domains/{id}/verify","href":"/docs/api-reference/sipdomains/verify-custom-sip-domain"}]},{"group":"SipPhoneNumbers","pages":[{"title":"List phone numbers","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/sip-phone-numbers","href":"/docs/api-reference/sipphonenumbers/list-phone-numbers"},{"title":"Create phone number","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/sip-phone-numbers","href":"/docs/api-reference/sipphonenumbers/create-phone-number"},{"title":"Get phone number","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/sip-phone-numbers/{id}","href":"/docs/api-reference/sipphonenumbers/get-phone-number"},{"title":"Update phone number","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json put /api/v1/sip-phone-numbers/{id}","href":"/docs/api-reference/sipphonenumbers/update-phone-number"},{"title":"Delete phone number","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json delete /api/v1/sip-phone-numbers/{id}","href":"/docs/api-reference/sipphonenumbers/delete-phone-number"},{"title":"Link phone number to agent","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json put /api/v1/sip-phone-numbers/{id}/agent-link","href":"/docs/api-reference/sipphonenumbers/link-phone-number-to-agent"},{"title":"Unlink phone number from agent","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json delete /api/v1/sip-phone-numbers/{id}/agent-link","href":"/docs/api-reference/sipphonenumbers/unlink-phone-number-from-agent"},{"title":"Get agents using phone number","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/sip-phone-numbers/{id}/affected-agents","href":"/docs/api-reference/sipphonenumbers/get-agents-using-phone-number"}]},{"group":"SipRegisterCallWebhook","pages":[]},{"group":"TextChat","pages":[{"title":"Run one stateless text-chat completion turn.","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/text-chat/completion","href":"/docs/api-reference/textchat/run-one-stateless-text-chat-completion-turn"}]},{"group":"TwilioProvider","pages":[{"title":"Get Twilio provider","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/providers/twilio/{id}","href":"/docs/api-reference/twilioprovider/get-twilio-provider"},{"title":"Update Twilio provider","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json put /api/v1/providers/twilio/{id}","href":"/docs/api-reference/twilioprovider/update-twilio-provider"},{"title":"Create Twilio provider","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/providers/twilio","href":"/docs/api-reference/twilioprovider/create-twilio-provider"},{"title":"Update Auth Token","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json patch /api/v1/providers/twilio/{id}/auth-token","href":"/docs/api-reference/twilioprovider/update-auth-token"},{"title":"List available phone numbers","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/providers/twilio/{id}/available-numbers","href":"/docs/api-reference/twilioprovider/list-available-phone-numbers"},{"title":"Import phone numbers","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/providers/twilio/{id}/import-numbers","href":"/docs/api-reference/twilioprovider/import-phone-numbers"},{"title":"Remove phone number","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json delete /api/v1/providers/twilio/{id}/phone-numbers/{phoneNumberId}","href":"/docs/api-reference/twilioprovider/remove-phone-number"}]},{"group":"Voice","pages":[{"title":"List available voices","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/voice","href":"/docs/api-reference/voice/list-available-voices"},{"title":"Synthesize text to speech","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/voice/synthesize","href":"/docs/api-reference/voice/synthesize-text-to-speech"},{"title":"Get built-in sound audio","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/voice/builtin-media","href":"/docs/api-reference/voice/get-built-in-sound-audio"},{"title":"Clone voice from audio","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/voice/clone","href":"/docs/api-reference/voice/clone-voice-from-audio"},{"title":"Delete cloned voice","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json delete /api/v1/voice/clone/{voiceId}","href":"/docs/api-reference/voice/delete-cloned-voice"},{"title":"Update cloned voice","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json patch /api/v1/voice/clone/{voiceId}","href":"/docs/api-reference/voice/update-cloned-voice"}]},{"group":"WebhookTest","pages":[{"title":"Test webhook endpoint","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/webhooks/test","href":"/docs/api-reference/webhooktest/test-webhook-endpoint"}]},{"group":"WebIntegrations","pages":[{"title":"List web integrations","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/web-integrations","href":"/docs/api-reference/webintegrations/list-web-integrations"},{"title":"Update web integration","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json put /api/v1/web-integrations","href":"/docs/api-reference/webintegrations/update-web-integration"},{"title":"Create web integration","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/web-integrations","href":"/docs/api-reference/webintegrations/create-web-integration"},{"title":"Get web integrations by agent","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/web-integrations/agent","href":"/docs/api-reference/webintegrations/get-web-integrations-by-agent"},{"title":"Get web integration","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/web-integrations/integration","href":"/docs/api-reference/webintegrations/get-web-integration"},{"title":"Delete web integration","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json delete /api/v1/web-integrations/{integrationId}","href":"/docs/api-reference/webintegrations/delete-web-integration"},{"title":"Create integration token","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/web-integrations/{integrationId}/tokens","href":"/docs/api-reference/webintegrations/create-integration-token"},{"title":"Delete integration token","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json delete /api/v1/web-integrations/{integrationId}/tokens/{tokenId}","href":"/docs/api-reference/webintegrations/delete-integration-token"},{"title":"Validate integration token","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/web-integrations/discover","href":"/docs/api-reference/webintegrations/validate-integration-token"}]},{"group":"WebSocket","pages":[{"title":"WebSocket endpoint for web calls","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/ws/webCall","href":"/docs/api-reference/websocket/websocket-endpoint-for-web-calls"},{"title":"Get WebSocket endpoint information","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/ws/info","href":"/docs/api-reference/websocket/get-websocket-endpoint-information"}]},{"group":"Document","pages":[{"title":"List documents in a knowledge base","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/rag/document","href":"/docs/api-reference/document/list-documents-in-a-knowledge-base"},{"title":"Upload a document to a knowledge base","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/rag/document","href":"/docs/api-reference/document/upload-a-document-to-a-knowledge-base"},{"title":"Get document details with status","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/rag/document/{id}","href":"/docs/api-reference/document/get-document-details-with-status"},{"title":"Update a document content in KB","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/rag/document/{id}","href":"/docs/api-reference/document/update-a-document-content-in-kb"},{"title":"Delete a document","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json delete /api/v1/rag/document/{id}","href":"/docs/api-reference/document/delete-a-document"},{"title":"Get document chunks","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/rag/document/{id}/chunks","href":"/docs/api-reference/document/get-document-chunks"},{"title":"Get document chunk information","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/rag/document/chunks/{chunkId}","href":"/docs/api-reference/document/get-document-chunk-information"},{"title":"Download document content","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/rag/document/{id}/download","href":"/docs/api-reference/document/download-document-content"}]},{"group":"KnowledgeBase","pages":[{"title":"Get all knowledge","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/rag/kb","href":"/docs/api-reference/knowledgebase/get-all-knowledge"},{"title":"Create a new knowledge base","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/rag/kb","href":"/docs/api-reference/knowledgebase/create-a-new-knowledge-base"},{"title":"Get knowledge base details with statistics","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/rag/kb/{id}","href":"/docs/api-reference/knowledgebase/get-knowledge-base-details-with-statistics"},{"title":"Update knowledge base settings","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json put /api/v1/rag/kb/{id}","href":"/docs/api-reference/knowledgebase/update-knowledge-base-settings"},{"title":"Delete a knowledge base and all its content","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json delete /api/v1/rag/kb/{id}","href":"/docs/api-reference/knowledgebase/delete-a-knowledge-base-and-all-its-content"}]},{"group":"KnowledgeBaseSource","pages":[{"title":"List the URL sources of a knowledge base","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/rag/kb/{kbId}/sources","href":"/docs/api-reference/knowledgebasesource/list-the-url-sources-of-a-knowledge-base"},{"title":"Add a URL source to a knowledge base","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/rag/kb/{kbId}/sources","href":"/docs/api-reference/knowledgebasesource/add-a-url-source-to-a-knowledge-base"},{"title":"Get a URL source","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/rag/kb/{kbId}/sources/{sourceId}","href":"/docs/api-reference/knowledgebasesource/get-a-url-source"},{"title":"Update the settings of a URL source","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json put /api/v1/rag/kb/{kbId}/sources/{sourceId}","href":"/docs/api-reference/knowledgebasesource/update-the-settings-of-a-url-source"},{"title":"Remove a URL source","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json delete /api/v1/rag/kb/{kbId}/sources/{sourceId}","href":"/docs/api-reference/knowledgebasesource/remove-a-url-source"},{"title":"Crawl a URL source now","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/rag/kb/{kbId}/sources/{sourceId}/crawl","href":"/docs/api-reference/knowledgebasesource/crawl-a-url-source-now"},{"title":"List the pages of a URL source","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/rag/kb/{kbId}/sources/{sourceId}/pages","href":"/docs/api-reference/knowledgebasesource/list-the-pages-of-a-url-source"},{"title":"Get the page usage of all URL sources","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json get /api/v1/rag/sources/usage","href":"/docs/api-reference/knowledgebasesource/get-the-page-usage-of-all-url-sources"}]},{"group":"Search","pages":[{"title":"Search within a multi knowledge bases","deprecated":null,"version":null,"openapi":"https://blackbox.dasha.ai/swagger/v1/swagger.json post /api/v1/rag/search","href":"/docs/api-reference/search/search-within-a-multi-knowledge-bases"}]}]}]},"basePath":"","title":"Update agent - Dasha BlackBox Documentation","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CybtLBIt.js","utils-BMLj2fvV.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-B6In562Y.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dr8Mfhp9.js","snippetPresets-2rmQvMVl.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-WMqJYdZj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CJ-MlPHu.js","shallow-dY3TMRCk.js","getApiPlaygroundDisplay-v-1B2bKm.js","CodeSnippet-BDhiTB7U.js","CodeSnippets-D9hnzQcS.js","Page-C4GwDT3_.js","getPastedJson-Th2V45jI.js","icon-BQXch1W9.js","MethodPill-BCqUneP3.js","DuplicateIcon-Q_-bhurZ.js","createIcon-DUjLHRqp.js","DynamicMarkdown-B-f2cqXQ.js","SectionHeading-Da5NsV4v.js","axios-vUo_bRtp.js","Markdown-D13FWkIM.js","clsx-D3Isdib3.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-C-XZBk9h.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink--qIqmmVG.js"]}