Choose a hosted number or your own carrier, route inbound calls to IVR, AI or teammates, and configure the caller number for outbound calls.
Start in Settings → Phone Numbers. A number’s verification, inbound assignment, and outbound route are separate parts of setup. Test each direction you intend to use.Use the search box in Managed Phone Numbers to filter by number, name, type (Hosted, BYOC or WhatsApp), or inbound destination. Results update as you type. Search ignores letter case and phone-number formatting such as spaces, parentheses, hyphens and the leading +. Clear the search to show all numbers again.
Use a verified hosted number in your workspace; choose its inbound destination and outbound caller use.
Your own carrier (BYOC)
Verify your number and configure the required inbound and outbound trunks in Settings → SIP. See SIP setup.
Existing number moving to OpenCX
Contact support to arrange the move before changing your existing service. Verifying a number does not move its inbound traffic.
Use international format, for example +14155551234. A verified number confirms that you can use it; it does not by itself configure your carrier’s routing or permission to place calls to every destination.
Open the agent’s Telephony & Routing settings and assign the inbound number. A number can have only one inbound destination: an AI phone agent or a Classical IVR. Unassign its existing destination before switching between those types.
Check Inbound Agent beside the number in Settings → Phone Numbers.
Call that number from a real phone and verify who answers.
For recorded keypad menus, enable Classical IVR in Settings → Voice & Telephony, then assign the number from Channels → Phone → Classical IVR → Workflows. Settings → Phone Numbers → Inbound destination shows the assigned IVR or agent. See Classical IVR setup.For supported inbound routes, an Unassigned number rings eligible teammates in the dashboard. Keep a teammate online and Available for calls when testing this path. See Human calling for eligibility and missed calls.When Classical IVR is enabled, calls to a number assigned to an IVR run that workflow first. For calls without an active IVR assignment, a valid X-OPENCX-AGENT-ID header for your workspace takes precedence. Otherwise, OpenCX looks up the agent assigned to the dialed number. If no agent is resolved for a recognized workspace, the call can enter the human-answering path. Do not rely on an unspecified workspace default AI agent; assign the number or send the header explicitly.
AI calls: open the agent’s Telephony & Routing settings and select its outbound caller number or outbound SIP trunk. The agent’s inbound number assignment alone is not proof that outbound calling works.Human calls: choose a verified caller number in the dashboard dialer. OpenCX resolves an outbound route for that number, using a matching configured number route, an owning agent’s route, or the workspace’s hosted route where available. External numbers need a valid outbound route. See Human calling.
In Settings → Teams, edit a team and open Outbound numbers.
Select the verified numbers its members may use, then Save. The same number can be selected for several teams. Create a new team first, then edit it to configure its outbound numbers.
In Settings → Roles, disable Use all outbound numbers for the roles that should be restricted. Add agents to the appropriate teams under Settings → Teams.
Restricted agents can select only numbers allowed for at least one of their current teams. A number with no allowed teams is unavailable to them. This also applies when selecting a caller number for an external participant or phone transfer. OpenCX checks access again when starting the call, so removing a team membership also prevents calls from an already-open dialer.Workspace admins retain access to every number. Use all outbound numbers also grants unrestricted number selection to other roles, but does not itself grant permission to place calls. If an agent has several roles, a grant on any role applies.Existing calling roles retain Use all outbound numbers during rollout. Older role editors preserve this grant when saving; refresh the dashboard before intentionally removing it. Configure the number mappings before removing that permission. These settings control human-selected outbound caller numbers; they do not change inbound routing, chat access, or automated workflow caller numbers.Your carrier must accept the caller identity and destination on that route. Test the caller ID on the receiving phone; the same displayed caller number does not prove that an AI call and a human call used the same route.
Number pools group verified BYOC numbers from your own carrier. They choose a regional caller when available and let sequence phone steps retry from different numbers.
Add and verify your BYOC numbers in Settings → Phone Numbers.
Configure your outbound SIP trunk in Settings → SIP. Your carrier must authorize the selected numbers for outbound calls on that trunk.
In Settings → Phone Numbers → Number pools, choose Create pool, enter a Pool name, select the Outbound SIP trunk, and choose your numbers. Each number can belong to only one pool.
Read and accept the responsibility notice, then choose Save pool. You need Voice settings write access to create or change pools.
Each pool uses its selected SIP trunk. If that trunk is unavailable or invalid, the call cannot start. To use a different trunk, create a new pool. Delete the pools using a trunk before editing or deleting it in Settings → SIP.Agents using pools can share a trunk. If another agent uses that trunk directly, set an explicit caller number for that agent first. Each caller number must be listed on only one outbound SIP trunk in your workspace. If a number already uses another trunk, select that trunk for the pool or remove the number from it first.Open your agent in Channels → Phone → Agents → Telephony & Routing. Under Outbound Caller, select the pool and set Maximum calls per step and Retry delay (minutes). In a sequence, select that agent under Settings; phone steps use its outbound setup automatically. A pool can contain numbers from several regions, while each step makes at most three calls per person.Calls first look for a matching US area code, then the same US state, then the destination country, and finally any other available number in the pool. If there is no regional match, the call still uses a pool number. International destinations are supported when your carrier allows them. The region associated with a phone number does not confirm the recipient’s current location.Sequence phone steps default to three calls, with two minutes between an unsuccessful call ending and the next attempt. Each retry uses a different number. No answer, busy, voicemail, machine answers, and failed calls can lead to another attempt. A human answer stops the remaining sequence steps for that person. If the attempt limit is reached or no unused numbers remain, the person advances to the next step. Sequence Step Failed workflows run only after the pool step finishes unsuccessfully. Existing calling windows and contact restrictions still apply.One-time dashboard, API, and workflow calls choose one number from the pool and make one attempt. A sequence step already in progress keeps the pool and retry settings it started with; new steps use the agent’s current settings.The sequence’s People view and phone-step details show Calling, Retry scheduled, Answered, or Attempts exhausted, with the attempt count. After the last unsuccessful attempt, they also show No answer, Busy / declined, or Failed. Scheduled retries show the next eligible time. Pausing the sequence shows Paused until it resumes. If required contact details are missing, the step shows what needs attention.
Automatically replace numbers is off by default. Connect your own primary Twilio account to buy replacement numbers and release old ones on a schedule. Other carriers can be used for BYOC pool calls; the Twilio connection is only needed for automatic replacement.
Enable Automatically replace numbers in the pool editor.
Set Replace numbers after (days) to 1–365 days. The default is three days.
Enter your Account SID, Trunk SID, and Auth Token. Use an active primary account that you own and manage. Subaccounts and OpenCX-managed accounts are not supported. The Twilio trunk must match the SIP trunk selected for the pool, and the numbers must belong to that account and trunk.
Choose Save pool. OpenCX verifies the connection before enabling replacement.
Your Auth Token is encrypted when saved and cannot be viewed in the dashboard. Use Update auth token to save a new token for the same account and trunk. To remove it, turn off automatic replacement, finish any replacements in progress, choose Remove saved token, and save. The pool keeps its account and trunk settings after token removal. Create a new pool to use a different account or trunk.Replacement purchases and configures a number in your connected account before releasing the old one. It preserves the country, known US state, and number type. Teams allowed to use the old outbound number automatically retain access through its replacement. Number availability and registration requirements can delay replacement. Numbers assigned to incoming calls are not automatically replaced. Replacement also waits until your workspace has no active calls.A number being replaced is temporarily unavailable for new calls. Turning replacement off keeps the current number after confirming that your account still owns it and completing setup for any replacement already purchased. If setup fails, the replacement stays reserved until you retry. A purchased replacement remains yours and appears in Phone Numbers after cancellation. You cannot delete a reserved replacement until replacement finishes or is canceled. If release of the old number has already started, let replacement finish before turning it off.Your provider charges your connected account for purchases and usage. Released numbers stop receiving calls and callbacks and may be reassigned. Adding a number to a pool does not change its incoming-call routing. No callback forwarding or retention period is added when a number is released.
You are responsible for permission to use your numbers, obtaining consent, honoring opt-outs, following applicable calling rules, paying provider charges, and the consequences of releasing numbers. Rotation does not guarantee higher answer rates or removal of spam labels. Automatic replacement follows the interval you set; carrier reputation does not trigger it.
Deleting a pool keeps its numbers in your account and workspace. Choose another outbound caller for agents using the pool before deleting it. Replacement errors appear beside the affected number.
Changing phone configuration requires Voice settings write access. Assigning outbound numbers to teams requires Teams write access. API callers need phone:write to start an AI outbound call.Before opening the line to customers, verify:
A real inbound call reaches the intended IVR, AI agent or teammate.
An AI outbound call connects and displays the intended caller ID.
A human outbound call works if your team will use the dialer.
Each transfer destination answers, and the team knows what to do if it cannot.
The session contains the expected call record and, when enabled, recording.
A browser Test Call checks the agent experience. It does not verify a phone number’s carrier route. For failed real calls, use Phone troubleshooting.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Open.cx Docs","description":"Documentation for OpenCX, an AI-powered omnichannel customer support platform. Build AI agents for chat, phone, email, WhatsApp, and SMS with knowledge bases, actions, and human handoff.","colors":{"primary":"#0A0A0A","light":"#FAFAFA","dark":"#0A0A0A"},"logo":{"light":"https://mintcdn.com/openchat/ivWwffb57vEmukK4/logo-light.svg?fit=max\u0026auto=format\u0026n=ivWwffb57vEmukK4\u0026q=85\u0026s=f6a5e94f4909a4d8df45757989c11afe","dark":"https://mintcdn.com/openchat/ivWwffb57vEmukK4/logo.svg?fit=max\u0026auto=format\u0026n=ivWwffb57vEmukK4\u0026q=85\u0026s=84cc8ee0de542d166e76b53651f4f4e8"},"favicon":"https://mintcdn.com/openchat/ivWwffb57vEmukK4/favicon.png?fit=max\u0026auto=format\u0026n=ivWwffb57vEmukK4\u0026q=85\u0026s=68fa269328f9c95d4404b9073ac8aa37","api":{"openapi":"https://api.open.cx/api-json","playground":{"display":"interactive"},"mdx":{"server":"https://api.open.cx"}},"appearance":{"default":"dark","strict":false},"background":{"decoration":"gradient","color":{"light":"#FFFFFF","dark":"#0A0A0A"}},"navbar":{"links":[{"href":"https://platform.open.cx","label":"Dashboard"}],"primary":{"type":"button","label":"Get Started","href":"https://open.cx"}},"seo":{"metatags":{"og:type":"website","og:site_name":"OpenCX Docs"},"indexing":"all"},"fonts":{"heading":{"family":"Inter Tight"},"body":{"family":"Inter"}},"styling":{"eyebrows":"section","codeblocks":"dark","latex":true},"contextual":{"options":["copy","view","claude","chatgpt"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"openchat","hasAudioNarration":false,"actualSubdomain":"openchat","customDomains":["docs.open.cx"],"gitSource":{"type":"github","owner":"opencx-labs","repo":"opencx","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aecacb8dd9d9f5b04d87c62","collectionId":"b0880fb2-8bd6-4fd6-a3e6-2e92613a8f3a","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aecacb8dd9d9f5b04d87c62"},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{},"buildId":"6aecdb340aeeed54ee1fc362","clientVersion":"0.0.4071","searchFilterCounts":[{"language":"default","tag":"API Reference","count":403},{"language":"default","tag":"Integrations","count":123},{"language":"default","tag":"Ticketing Systems","count":110},{"language":"default","tag":"Build Agents","count":67},{"language":"default","tag":"Agent Training","count":53},{"language":"default","tag":"Help Center","count":45},{"language":"default","tag":"Sequences","count":42},{"language":"default","tag":"Setup Integration","count":37},{"language":"default","tag":"Channels","count":37},{"language":"default","tag":"Main Knowledge Sources","count":30}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","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":"vite-origin","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":"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":true},"customCss":[{"filePath":"style.css","content":":root{--radius: 0.375rem;--radius-sm: 0.125rem;--radius-md: 0.25rem;--radius-lg: 0.375rem;--radius-xl: 0.75rem;--radius-2xl: 1.125rem;--radius-3xl: 1.5rem;--radius-full: 9999px}card,.card,card-group card,.card-group card,.card-group .card{border-radius:var(--radius-3xl)}callout,.callout,accordion,accordion-group accordion,.accordion,.accordion-group .accordion,[data-accordion],[data-accordion-item]{border-radius:var(--radius-xl)}pre,pre>code,pre.shiki,figure.shiki,div[class*=\"language-\"],div[class*=\"language-\"] pre{border-radius:var(--radius-xl)}#topbar-cta-button>a,#topbar-cta-button>a>span.absolute{border-radius:var(--radius-xl)}#search-bar-entry{border-radius:var(--radius-xl)}.zendesk-flow .zendesk-flow-frame{border-radius:var(--radius-xl)}.integration-orbit a[href]{touch-action:manipulation}.integration-orbit a[href] img{pointer-events:none}:root{--docs-context-bg: #ffffff;--docs-context-bg-hover: #f5f5f5;--docs-context-border: rgba(10, 10, 10, 0.16);--docs-context-border-strong: rgba(10, 10, 10, 0.32);--docs-context-text: #0a0a0a;--docs-context-muted: rgba(10, 10, 10, 0.6);--docs-context-accent: #0a0a0a;--docs-context-trigger-bg:\n linear-gradient(180deg, rgba(10, 10, 10, 0.04), transparent 48%),\n var(--docs-context-bg);--docs-context-trigger-bg-hover:\n linear-gradient(180deg, rgba(10, 10, 10, 0.07), transparent 52%),\n var(--docs-context-bg-hover);--docs-context-trigger-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 0.9),\n 0 1px 2px rgba(15, 23, 42, 0.04);--docs-context-menu-bg:\n radial-gradient(circle at top right, rgba(10, 10, 10, 0.05), transparent 38%),\n linear-gradient(180deg, #ffffff, #fafafa);--docs-context-menu-border: rgba(10, 10, 10, 0.14);--docs-context-menu-shadow:\n 0 24px 60px rgba(15, 23, 42, 0.16),\n 0 0 0 1px rgba(10, 10, 10, 0.06);--docs-context-hover-text: #0a0a0a;--docs-context-item-hover: rgba(10, 10, 10, 0.06);--docs-context-divider: rgba(10, 10, 10, 0.1)}html.dark{--docs-context-bg: #0a0a0a;--docs-context-bg-hover: #161616;--docs-context-border: rgba(255, 255, 255, 0.2);--docs-context-border-strong: rgba(255, 255, 255, 0.36);--docs-context-text: #fafafa;--docs-context-muted: rgba(250, 250, 250, 0.72);--docs-context-accent: #fafafa;--docs-context-trigger-bg:\n linear-gradient(180deg, rgba(255, 255, 255, 0.06), transparent 42%),\n var(--docs-context-bg);--docs-context-trigger-bg-hover:\n linear-gradient(180deg, rgba(255, 255, 255, 0.1), transparent 48%),\n var(--docs-context-bg-hover);--docs-context-trigger-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 0.05),\n 0 0 0 1px rgba(255, 255, 255, 0.08);--docs-context-menu-bg:\n radial-gradient(circle at top right, rgba(255, 255, 255, 0.08), transparent 34%),\n linear-gradient(180deg, #121212, #050505);--docs-context-menu-border: rgba(255, 255, 255, 0.14);--docs-context-menu-shadow:\n 0 24px 60px rgba(0, 0, 0, 0.42),\n 0 0 0 1px rgba(255, 255, 255, 0.08);--docs-context-hover-text: #ffffff;--docs-context-item-hover: rgba(255, 255, 255, 0.1);--docs-context-divider: rgba(255, 255, 255, 0.12)}#page-context-menu-button,#page-context-menu button[aria-label=\"More actions\"]{color:var(--docs-context-text)!important;background:var(--docs-context-trigger-bg)!important;border-color:var(--docs-context-border)!important;box-shadow:var(--docs-context-trigger-shadow)}#page-context-menu-button{border-right-color:var(--docs-context-divider)!important}#page-context-menu-button svg,#page-context-menu button[aria-label=\"More actions\"] svg{color:var(--docs-context-accent)!important}#page-context-menu-button:hover,#page-context-menu button[aria-label=\"More actions\"]:hover,#page-context-menu button[aria-label=\"More actions\"][data-state=\"open\"]{color:var(--docs-context-hover-text)!important;background:var(--docs-context-trigger-bg-hover)!important;border-color:var(--docs-context-border-strong)!important}body [data-radix-popper-content-wrapper] [role=\"menu\"]{color:var(--docs-context-text)!important;background:var(--docs-context-menu-bg)!important;border:1px solid var(--docs-context-menu-border)!important;border-radius:var(--radius-xl)!important;box-shadow:var(--docs-context-menu-shadow)!important}body [data-radix-popper-content-wrapper] [role=\"menuitem\"]{color:var(--docs-context-text)!important;border-radius:var(--radius-lg)!important}body [data-radix-popper-content-wrapper] [role=\"menuitem\"] *{color:var(--docs-context-text)!important}body [data-radix-popper-content-wrapper] [role=\"menuitem\"] svg{color:var(--docs-context-accent)!important}body [data-radix-popper-content-wrapper] [role=\"menuitem\"] [class*=\"text-gray\"],body [data-radix-popper-content-wrapper] [role=\"menuitem\"] [class*=\"text-slate\"],body [data-radix-popper-content-wrapper] [role=\"menuitem\"] [class*=\"text-zinc\"],body [data-radix-popper-content-wrapper] [role=\"menuitem\"] [class*=\"text-white\"],body [data-radix-popper-content-wrapper] [role=\"menuitem\"] p{color:var(--docs-context-muted)!important}body [data-radix-popper-content-wrapper] [role=\"menuitem\"]:hover,body [data-radix-popper-content-wrapper] [role=\"menuitem\"][data-highlighted]{color:var(--docs-context-hover-text)!important;background:var(--docs-context-item-hover)!important}html:not(.dark) #sidebar{border-right:1px solid #e5e5e5!important}html.dark #sidebar{border-right:1px solid #262626!important}#sidebar,#sidebar-content,#sidebar *,#sidebar-content *{scrollbar-color:rgba(113, 113, 122, 0.4) transparent}#sidebar ::-webkit-scrollbar,#sidebar-content ::-webkit-scrollbar{width:8px;background:transparent}#sidebar ::-webkit-scrollbar-track,#sidebar ::-webkit-scrollbar-corner,#sidebar-content ::-webkit-scrollbar-track,#sidebar-content ::-webkit-scrollbar-corner{background:transparent}#sidebar ::-webkit-scrollbar-thumb,#sidebar-content ::-webkit-scrollbar-thumb{background-color:rgba(113, 113, 122, 0.4);border-radius:9999px!important;border:2px solid transparent;background-clip:content-box}#sidebar ::-webkit-scrollbar-thumb:hover,#sidebar-content ::-webkit-scrollbar-thumb:hover{background-color:rgba(113, 113, 122, 0.7)}html.dark #sidebar,html.dark #sidebar-content,html.dark #sidebar *,html.dark #sidebar-content *{scrollbar-color:rgba(161, 161, 170, 0.35) transparent}html.dark #sidebar ::-webkit-scrollbar-thumb,html.dark #sidebar-content ::-webkit-scrollbar-thumb{background-color:rgba(161, 161, 170, 0.35)}html.dark #sidebar ::-webkit-scrollbar-thumb:hover,html.dark #sidebar-content ::-webkit-scrollbar-thumb:hover{background-color:rgba(161, 161, 170, 0.6)}#sidebar-content>div>div.sticky.top-0.pointer-events-none.bg-gradient-to-b{background-image:none!important}html.dark #sidebar img[src*=\"/images/mcp/cursor.svg\"],html.dark #sidebar img[src*=\"/images/mcp/claude.svg\"],html.dark #sidebar img[src*=\"/images/mcp/windsurf.svg\"],html.dark #sidebar img[src*=\"/images/mcp/zed.svg\"]{filter:invert(1) brightness(0.92)}#navbar{box-shadow:none!important;row-gap:0.25rem!important}html:not(.dark) #navbar{border-bottom:1px solid #e2e8f0!important}html.dark #navbar{border-bottom:1px solid #3f463f!important}#navbar #header,#navbar #navigation-items,#navbar navigation-items{border-bottom:none!important;box-shadow:none!important}#navbar nav-tabs,#navbar .nav-tabs{border-top:none!important;border-top-width:0!important;box-shadow:none!important}#navbar .h-16 .h-full.relative.flex-1.flex.items-center.gap-x-4.min-w-0{border-bottom:none!important;border-bottom-width:0!important;box-shadow:none!important}:not(pre)>code:is(.dark *){color:rgb(var(--primary-light))}:not(pre)>code{color:rgb(var(--primary))}html.dark{--primary: 250 250 250;--primary-light: 245 245 245;--primary-dark: 10 10 10}html:not(.dark) #search-bar-entry{background-color:#ffffff!important;color:#404040}html:not(.dark) #navbar div.backdrop-blur{backdrop-filter:blur(14px) saturate(180%)!important;-webkit-backdrop-filter:blur(14px) saturate(180%)!important;background-color:rgba(255, 255, 255, 0.72)!important}html.dark #navbar div.backdrop-blur{backdrop-filter:blur(6px) saturate(125%)!important;-webkit-backdrop-filter:blur(6px) saturate(125%)!important;background-color:rgba(10, 10, 10, 0.6)!important}html:not(.dark) #topbar-cta-button>a>span.absolute{background-color:#0a0a0a!important}html:not(.dark) #topbar-cta-button>a .text-white{color:#fafafa!important}html.dark #topbar-cta-button>a>span.absolute{background-color:#fafafa!important}html.dark #topbar-cta-button>a .text-white{color:#0a0a0a!important}html.dark #topbar-cta-button>a svg{color:#0a0a0a!important}.nav-tabs-item>svg,.nav-tabs-item>span>svg:first-child{display:none!important}.toc-item{padding-left:12px!important;border-left:2px solid rgba(148, 163, 184, 0.22)!important;transition:border-color 0.18s ease, color 0.18s ease}html.dark .toc-item{border-left-color:rgba(148, 163, 184, 0.2)!important}.toc-item:hover{border-left-color:rgba(10, 10, 10, 0.45)!important}html.dark .toc-item:hover{border-left-color:rgba(250, 250, 250, 0.55)!important}.toc-item:has(>a[class*=\"text-primary\"]),.toc-item:has(>a[style*=\"color\"]){border-left-color:rgb(var(--primary))!important}html.dark .toc-item:has(>a[class*=\"text-primary\"]),html.dark .toc-item:has(>a[style*=\"color\"]){border-left-color:rgb(var(--primary-light))!important}button[data-state][aria-label],button[data-state][aria-label]>*,span.tooltip{cursor:help!important}#navbar .h-16 .h-full.relative.flex-1.flex.items-center.gap-x-4.min-w-0{border-bottom:none!important;border-bottom-width:0!important;box-shadow:none!important}#navbar .h-16 img[src*=\"logo-light\"],#navbar .h-16 img[src*=\"logo.svg\"]{transform:scale(1.1);transform-origin:left center}#navbar .h-16>div>div:has(#search-bar-entry){justify-content:flex-end!important}#navbar .h-16>div>div.ml-auto.justify-end{flex:0 0 auto!important}.integration-orbit-grid-fade{background-image:linear-gradient(to right, rgb(0 0 0 / 0.07) 1px, transparent 1px),\n linear-gradient(to bottom, rgb(0 0 0 / 0.07) 1px, transparent 1px);background-size:16px 16px;background-position:center center;-webkit-mask-image:radial-gradient(\n 72% 72% at 50% 50%,\n #000 0%,\n #000 38%,\n transparent 82%\n );mask-image:radial-gradient(72% 72% at 50% 50%, #000 0%, #000 38%, transparent 82%)}html.dark .integration-orbit-grid-fade{background-image:linear-gradient(to right, rgb(255 255 255 / 0.08) 1px, transparent 1px),\n linear-gradient(to bottom, rgb(255 255 255 / 0.08) 1px, transparent 1px)}.animate-orbit{animation:orbit var(--duration) linear infinite}@keyframes orbit{0%{transform:rotate(calc(var(--angle) * 1deg))\n translateY(calc(var(--orbit-radius) * -1px))\n rotate(calc(var(--angle) * -1deg))}100%{transform:rotate(calc(var(--angle) * 1deg + 360deg))\n translateY(calc(var(--orbit-radius) * -1px))\n rotate(calc(var(--angle) * -1deg - 360deg))}}.zendesk-flow-frame{background-image:radial-gradient(ellipse 80% 50% at 50% 50%, rgb(34 197 94 / 0.04), transparent 70%)}html.dark .zendesk-flow-frame{background-image:radial-gradient(ellipse 80% 50% at 50% 50%, rgb(34 197 94 / 0.06), transparent 70%)}.zendesk-flow-grid{background-image:linear-gradient(to right, rgb(0 0 0 / 0.05) 1px, transparent 1px),\n linear-gradient(to bottom, rgb(0 0 0 / 0.05) 1px, transparent 1px);background-size:24px 24px;background-position:center center;-webkit-mask-image:radial-gradient(80% 70% at 50% 50%, #000 0%, #000 45%, transparent 90%);mask-image:radial-gradient(80% 70% at 50% 50%, #000 0%, #000 45%, transparent 90%)}html.dark .zendesk-flow-grid{background-image:linear-gradient(to right, rgb(255 255 255 / 0.05) 1px, transparent 1px),\n linear-gradient(to bottom, rgb(255 255 255 / 0.05) 1px, transparent 1px)}.chat-assistant-floating-input,[class*=\"chat-assistant-floating\"]{display:none!important}#footer{display:none!important}.docs-footer{margin-top:5rem;padding-top:3rem;padding-bottom:1.5rem;border-top:1px solid rgba(228, 228, 231, 0.7);font-size:0.875rem;color:rgb(82 82 91);line-height:1.5}html.dark .docs-footer{border-top-color:rgba(63, 63, 70, 0.35);color:rgb(161 161 170)}.docs-footer__top{display:flex;flex-direction:column;gap:2.5rem;padding-bottom:2.5rem;border-bottom:1px solid rgba(228, 228, 231, 0.55)}html.dark .docs-footer__top{border-bottom-color:rgba(63, 63, 70, 0.25)}@media (min-width: 768px){.docs-footer__top{flex-direction:row;gap:3rem}}.docs-footer__brand{display:flex;flex-direction:column;gap:0.75rem;max-width:16rem;flex-shrink:0}@media (min-width: 768px){.docs-footer__brand{width:16rem}}.docs-footer__logo-link{display:inline-flex;width:fit-content}.docs-footer__logo{height:1.75rem;width:auto}.docs-footer__logo--dark{display:none}html.dark .docs-footer__logo--light{display:none}html.dark .docs-footer__logo--dark{display:inline-block}.docs-footer__desc{margin:0.25rem 0 0;font-size:0.8125rem;line-height:1.55;color:rgb(63 63 70)}html.dark .docs-footer__desc{color:rgb(212 212 216)}.docs-footer__label{margin:0.75rem 0 0.25rem;font-size:0.6875rem;font-weight:600;letter-spacing:0.1em;text-transform:uppercase;color:rgb(82 82 91)}html.dark .docs-footer__label{color:rgb(161 161 170)}.docs-footer__socials{display:inline-flex;gap:0.875rem;align-items:center}.docs-footer__socials a{display:inline-flex;align-items:center;justify-content:center;color:rgb(24 24 27);transition:opacity 0.15s ease}.docs-footer__socials a:hover{opacity:0.65}html.dark .docs-footer__socials a{color:rgb(244 244 245)}html.dark .docs-footer__socials a:hover{opacity:0.7}.docs-footer__columns{flex:1;display:grid;grid-template-columns:repeat(2, minmax(0, 1fr));gap:2rem}@media (min-width: 640px){.docs-footer__columns{grid-template-columns:repeat(3, minmax(0, 1fr))}}.docs-footer__col{display:flex;flex-direction:column;gap:0.5rem}.docs-footer__col-header{margin:0 0 0.5rem;font-size:0.8125rem;font-weight:700!important;color:rgb(24 24 27)}html.dark .docs-footer__col-header{color:rgb(244 244 245)}.docs-footer__col a{font-size:0.8125rem;color:rgb(63 63 70);text-decoration:none;transition:color 0.15s ease}.docs-footer__col a:hover{color:rgb(24 24 27)}html.dark .docs-footer__col a{color:rgb(212 212 216)}html.dark .docs-footer__col a:hover{color:rgb(244 244 245)}.docs-footer__bottom{display:flex;flex-direction:column;align-items:flex-start;gap:0.75rem;padding-top:1.25rem}@media (min-width: 640px){.docs-footer__bottom{flex-direction:row;align-items:center;justify-content:space-between}}.docs-footer__copy{font-size:0.75rem;color:rgb(82 82 91)}html.dark .docs-footer__copy{color:rgb(161 161 170)}.docs-footer__status{display:inline-flex;align-items:center;gap:0.5rem;font-size:0.6875rem;font-weight:600;letter-spacing:0.1em;text-transform:uppercase;color:rgb(82 82 91);text-decoration:none;transition:color 0.15s ease}.docs-footer__status:hover{color:rgb(24 24 27)}html.dark .docs-footer__status{color:rgb(161 161 170)}html.dark .docs-footer__status:hover{color:rgb(244 244 245)}.docs-footer__status-dot{display:inline-block;flex-shrink:0;width:0.5rem;height:0.5rem;background-color:#10b981;border-radius:var(--radius-full);box-shadow:0 0 0 0 rgba(16, 185, 129, 0.55);animation:docs-footer-status-pulse 2.4s ease-in-out infinite}@keyframes docs-footer-status-pulse{0%,100%{box-shadow:0 0 0 0 rgba(16, 185, 129, 0.55)}50%{box-shadow:0 0 0 5px rgba(16, 185, 129, 0)}}@media (prefers-reduced-motion: reduce){.docs-footer__status-dot{animation:none;box-shadow:0 0 0 3px rgba(16, 185, 129, 0.25)}}#pagination{margin-top:3rem;padding-top:2rem;border-top:1px solid rgba(228, 228, 231, 0.8)}html.dark #pagination{border-top-color:rgba(63, 63, 70, 0.6)}#table-of-contents-layout{flex-direction:column}#table-of-contents-layout .feedback-toolbar{width:100%;margin-top:1.5rem;padding-top:1.5rem;padding-bottom:0;border-top:1px solid rgba(228, 228, 231, 0.8)}html.dark #table-of-contents-layout .feedback-toolbar{border-top-color:rgba(63, 63, 70, 0.6)}#table-of-contents-layout .feedback-toolbar>div{flex-direction:column;align-items:flex-start;gap:0.75rem}#table-of-contents-layout .feedback-toolbar p{white-space:normal}"}],"page":{"pagePath":"phone/numbers-and-routing","slug":"/phone/numbers-and-routing","pageMetadata":{"title":"Phone numbers and routing","sidebarTitle":"Numbers and routing","description":"Choose a hosted number or your own carrier, route inbound calls to IVR, AI or teammates, and configure the caller number for outbound calls.","icon":"phone","keywords":["phone number setup","hosted phone numbers","bring your own carrier","verify caller ID","assign inbound agent","unassigned number","outbound caller number","phone routing priority","number pools","automatic number replacement"],"href":"/phone/numbers-and-routing"},"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: \"Choose a hosted number or your own carrier, route inbound calls to IVR, AI or teammates, and configure the caller number for outbound calls.\"\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={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Table,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Start in `,_jsx(_components.strong,{children:_jsx(_components.a,{href:`https://platform.open.cx/settings/phone-numbers`,children:`Settings → Phone Numbers`})}),`. A number’s verification, inbound assignment, and outbound route are separate parts of setup. Test each direction you intend to use.`]}),`\n`,_jsxs(_components.p,{children:[`Use the search box in `,_jsx(_components.strong,{children:`Managed Phone Numbers`}),` to filter by number, name, type (Hosted, BYOC or WhatsApp), or inbound destination. Results update as you type. Search ignores letter case and phone-number formatting such as spaces, parentheses, hyphens and the leading `,_jsx(_components.code,{children:`+`}),`. Clear the search to show all numbers again.`]}),`\n`,_jsx(Heading,{level:`2`,id:`choose-a-number-setup`,children:`Choose a number setup`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Setup`}),_jsx(_components.th,{children:`What to configure`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Hosted number`}),_jsx(_components.td,{children:`Use a verified hosted number in your workspace; choose its inbound destination and outbound caller use.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Your own carrier (BYOC)`}),_jsxs(_components.td,{children:[`Verify your number and configure the required inbound and outbound trunks in `,_jsx(_components.strong,{children:_jsx(_components.a,{href:`https://platform.open.cx/settings/sip`,children:`Settings → SIP`})}),`. See `,_jsx(_components.a,{href:`/phone/sip-integration`,children:`SIP setup`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Existing number moving to OpenCX`}),_jsxs(_components.td,{children:[`Contact `,_jsx(_components.a,{href:`mailto:[email protected]`,children:`support`}),` to arrange the move before changing your existing service. Verifying a number does not move its inbound traffic.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Use international format, for example `,_jsx(_components.code,{children:`+14155551234`}),`. A verified number confirms that you can use it; it does not by itself configure your carrier’s routing or permission to place calls to every destination.`]}),`\n`,_jsx(Heading,{level:`2`,id:`route-incoming-calls`,children:`Route incoming calls`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Create an agent in `,_jsx(_components.strong,{children:_jsx(_components.a,{href:`https://platform.open.cx/channels/phone/agents`,children:`Channels → Phone → Agents`})}),` if AI should answer.`]}),`\n`,_jsxs(_components.li,{children:[`Open the agent’s `,_jsx(_components.strong,{children:`Telephony \u0026 Routing`}),` settings and assign the inbound number. A number can have only one inbound destination: an AI phone agent or a Classical IVR. Unassign its existing destination before switching between those types.`]}),`\n`,_jsxs(_components.li,{children:[`Check `,_jsx(_components.strong,{children:`Inbound Agent`}),` beside the number in `,_jsx(_components.strong,{children:`Settings → Phone Numbers`}),`.`]}),`\n`,_jsx(_components.li,{children:`Call that number from a real phone and verify who answers.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`For recorded keypad menus, enable `,_jsx(_components.strong,{children:`Classical IVR`}),` in `,_jsx(_components.strong,{children:`Settings → Voice \u0026 Telephony`}),`, then assign the number from `,_jsx(_components.strong,{children:`Channels → Phone → Classical IVR → Workflows`}),`. `,_jsx(_components.strong,{children:`Settings → Phone Numbers → Inbound destination`}),` shows the assigned IVR or agent. See `,_jsx(_components.a,{href:`/phone/call-flows`,children:`Classical IVR setup`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`For supported inbound routes, an `,_jsx(_components.strong,{children:`Unassigned`}),` number rings eligible teammates in the dashboard. Keep a teammate online and `,_jsx(_components.strong,{children:`Available for calls`}),` when testing this path. See `,_jsx(_components.a,{href:`/phone/human-calling`,children:`Human calling`}),` for eligibility and missed calls.`]}),`\n`,_jsxs(_components.p,{children:[`When Classical IVR is enabled, calls to a number assigned to an IVR run that workflow first. For calls without an active IVR assignment, a valid `,_jsx(_components.code,{children:`X-OPENCX-AGENT-ID`}),` header for your workspace takes precedence. Otherwise, OpenCX looks up the agent assigned to the dialed number. If no agent is resolved for a recognized workspace, the call can enter the human-answering path. Do not rely on an unspecified workspace default AI agent; assign the number or send the header explicitly.`]}),`\n`,_jsx(Heading,{level:`2`,id:`configure-outbound-calls`,children:`Configure outbound calls`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`AI calls:`}),` open the agent’s `,_jsx(_components.strong,{children:`Telephony \u0026 Routing`}),` settings and select its outbound caller number or outbound SIP trunk. The agent’s inbound number assignment alone is not proof that outbound calling works.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Human calls:`}),` choose a verified caller number in the dashboard dialer. OpenCX resolves an outbound route for that number, using a matching configured number route, an owning agent’s route, or the workspace’s hosted route where available. External numbers need a valid outbound route. See `,_jsx(_components.a,{href:`/phone/human-calling`,children:`Human calling`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`limit-outbound-numbers-by-team`,children:`Limit outbound numbers by team`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In `,_jsx(_components.strong,{children:`Settings → Teams`}),`, edit a team and open `,_jsx(_components.strong,{children:`Outbound numbers`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select the verified numbers its members may use, then `,_jsx(_components.strong,{children:`Save`}),`. The same number can be selected for several teams. Create a new team first, then edit it to configure its outbound numbers.`]}),`\n`,_jsxs(_components.li,{children:[`In `,_jsx(_components.strong,{children:`Settings → Roles`}),`, disable `,_jsx(_components.strong,{children:`Use all outbound numbers`}),` for the roles that should be restricted. Add agents to the appropriate teams under `,_jsx(_components.strong,{children:`Settings → Teams`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Restricted agents can select only numbers allowed for at least one of their current teams. A number with no allowed teams is unavailable to them. This also applies when selecting a caller number for an external participant or phone transfer. OpenCX checks access again when starting the call, so removing a team membership also prevents calls from an already-open dialer.`}),`\n`,_jsxs(_components.p,{children:[`Workspace admins retain access to every number. `,_jsx(_components.strong,{children:`Use all outbound numbers`}),` also grants unrestricted number selection to other roles, but does not itself grant permission to place calls. If an agent has several roles, a grant on any role applies.`]}),`\n`,_jsxs(_components.p,{children:[`Existing calling roles retain `,_jsx(_components.strong,{children:`Use all outbound numbers`}),` during rollout. Older role editors preserve this grant when saving; refresh the dashboard before intentionally removing it. Configure the number mappings before removing that permission. These settings control human-selected outbound caller numbers; they do not change inbound routing, chat access, or automated workflow caller numbers.`]}),`\n`,_jsx(_components.p,{children:`Your carrier must accept the caller identity and destination on that route. Test the caller ID on the receiving phone; the same displayed caller number does not prove that an AI call and a human call used the same route.`}),`\n`,_jsx(Heading,{level:`2`,id:`outbound-number-pools`,children:`Outbound number pools`}),`\n`,_jsxs(_components.p,{children:[`Number pools group `,_jsx(_components.strong,{children:`verified BYOC numbers from your own carrier`}),`. They choose a regional caller when available and let sequence phone steps retry from different numbers.`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Add and verify your BYOC numbers in `,_jsx(_components.strong,{children:`Settings → Phone Numbers`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Configure your outbound SIP trunk in `,_jsx(_components.strong,{children:_jsx(_components.a,{href:`https://platform.open.cx/settings/sip`,children:`Settings → SIP`})}),`. Your carrier must authorize the selected numbers for outbound calls on that trunk.`]}),`\n`,_jsxs(_components.li,{children:[`In `,_jsx(_components.strong,{children:`Settings → Phone Numbers → Number pools`}),`, choose `,_jsx(_components.strong,{children:`Create pool`}),`, enter a `,_jsx(_components.strong,{children:`Pool name`}),`, select the `,_jsx(_components.strong,{children:`Outbound SIP trunk`}),`, and choose your numbers. Each number can belong to only one pool.`]}),`\n`,_jsxs(_components.li,{children:[`Read and accept the responsibility notice, then choose `,_jsx(_components.strong,{children:`Save pool`}),`. You need `,_jsx(_components.strong,{children:`Voice settings`}),` write access to create or change pools.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Each pool uses its selected SIP trunk. If that trunk is unavailable or invalid, the call cannot start. To use a different trunk, create a new pool. Delete the pools using a trunk before editing or deleting it in `,_jsx(_components.strong,{children:`Settings → SIP`}),`.`]}),`\n`,_jsx(_components.p,{children:`Agents using pools can share a trunk. If another agent uses that trunk directly, set an explicit caller number for that agent first. Each caller number must be listed on only one outbound SIP trunk in your workspace. If a number already uses another trunk, select that trunk for the pool or remove the number from it first.`}),`\n`,_jsxs(_components.p,{children:[`Open your agent in `,_jsx(_components.strong,{children:`Channels → Phone → Agents → Telephony \u0026 Routing`}),`. Under `,_jsx(_components.strong,{children:`Outbound Caller`}),`, select the pool and set `,_jsx(_components.strong,{children:`Maximum calls per step`}),` and `,_jsx(_components.strong,{children:`Retry delay (minutes)`}),`. In a sequence, select that agent under `,_jsx(_components.strong,{children:`Settings`}),`; phone steps use its outbound setup automatically. A pool can contain numbers from several regions, while each step makes at most three calls per person.`]}),`\n`,_jsx(_components.p,{children:`Calls first look for a matching US area code, then the same US state, then the destination country, and finally any other available number in the pool. If there is no regional match, the call still uses a pool number. International destinations are supported when your carrier allows them. The region associated with a phone number does not confirm the recipient’s current location.`}),`\n`,_jsxs(_components.p,{children:[`Sequence phone steps default to `,_jsx(_components.strong,{children:`three calls`}),`, with `,_jsx(_components.strong,{children:`two minutes`}),` between an unsuccessful call ending and the next attempt. Each retry uses a different number. No answer, busy, voicemail, machine answers, and failed calls can lead to another attempt. A human answer stops the remaining sequence steps for that person. If the attempt limit is reached or no unused numbers remain, the person advances to the next step. `,_jsx(_components.strong,{children:`Sequence Step Failed`}),` workflows run only after the pool step finishes unsuccessfully. Existing calling windows and contact restrictions still apply.`]}),`\n`,_jsx(_components.p,{children:`One-time dashboard, API, and workflow calls choose one number from the pool and make one attempt. A sequence step already in progress keeps the pool and retry settings it started with; new steps use the agent’s current settings.`}),`\n`,_jsxs(_components.p,{children:[`The sequence’s `,_jsx(_components.strong,{children:`People`}),` view and phone-step details show `,_jsx(_components.strong,{children:`Calling`}),`, `,_jsx(_components.strong,{children:`Retry scheduled`}),`, `,_jsx(_components.strong,{children:`Answered`}),`, or `,_jsx(_components.strong,{children:`Attempts exhausted`}),`, with the attempt count. After the last unsuccessful attempt, they also show `,_jsx(_components.strong,{children:`No answer`}),`, `,_jsx(_components.strong,{children:`Busy / declined`}),`, or `,_jsx(_components.strong,{children:`Failed`}),`. Scheduled retries show the next eligible time. Pausing the sequence shows `,_jsx(_components.strong,{children:`Paused`}),` until it resumes. If required contact details are missing, the step shows what needs attention.`]}),`\n`,_jsx(Heading,{level:`3`,id:`automatic-replacement`,children:`Automatic replacement`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Automatically replace numbers`}),` is off by default. Connect your own `,_jsx(_components.strong,{children:`primary Twilio account`}),` to buy replacement numbers and release old ones on a schedule. Other carriers can be used for BYOC pool calls; the Twilio connection is only needed for automatic replacement.`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Enable `,_jsx(_components.strong,{children:`Automatically replace numbers`}),` in the pool editor.`]}),`\n`,_jsxs(_components.li,{children:[`Set `,_jsx(_components.strong,{children:`Replace numbers after (days)`}),` to 1–365 days. The default is three days.`]}),`\n`,_jsxs(_components.li,{children:[`Enter your `,_jsx(_components.strong,{children:`Account SID`}),`, `,_jsx(_components.strong,{children:`Trunk SID`}),`, and `,_jsx(_components.strong,{children:`Auth Token`}),`. Use an active primary account that you own and manage. Subaccounts and OpenCX-managed accounts are not supported. The Twilio trunk must match the SIP trunk selected for the pool, and the numbers must belong to that account and trunk.`]}),`\n`,_jsxs(_components.li,{children:[`Choose `,_jsx(_components.strong,{children:`Save pool`}),`. OpenCX verifies the connection before enabling replacement.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Your Auth Token is encrypted when saved and cannot be viewed in the dashboard. Use `,_jsx(_components.strong,{children:`Update auth token`}),` to save a new token for the same account and trunk. To remove it, turn off automatic replacement, finish any replacements in progress, choose `,_jsx(_components.strong,{children:`Remove saved token`}),`, and save. The pool keeps its account and trunk settings after token removal. Create a new pool to use a different account or trunk.`]}),`\n`,_jsx(_components.p,{children:`Replacement purchases and configures a number in your connected account before releasing the old one. It preserves the country, known US state, and number type. Teams allowed to use the old outbound number automatically retain access through its replacement. Number availability and registration requirements can delay replacement. Numbers assigned to incoming calls are not automatically replaced. Replacement also waits until your workspace has no active calls.`}),`\n`,_jsxs(_components.p,{children:[`A number being replaced is temporarily unavailable for new calls. Turning replacement off keeps the current number after confirming that your account still owns it and completing setup for any replacement already purchased. If setup fails, the replacement stays reserved until you retry. A purchased replacement remains yours and appears in `,_jsx(_components.strong,{children:`Phone Numbers`}),` after cancellation. You cannot delete a reserved replacement until replacement finishes or is canceled. If release of the old number has already started, let replacement finish before turning it off.`]}),`\n`,_jsx(_components.p,{children:`Your provider charges your connected account for purchases and usage. Released numbers stop receiving calls and callbacks and may be reassigned. Adding a number to a pool does not change its incoming-call routing. No callback forwarding or retention period is added when a number is released.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`You are responsible for permission to use your numbers, obtaining consent, honoring opt-outs, following applicable calling rules, paying provider charges, and the consequences of releasing numbers. Rotation does not guarantee higher answer rates or removal of spam labels. Automatic replacement follows the interval you set; carrier reputation does not trigger it.`})}),`\n`,_jsx(_components.p,{children:`Deleting a pool keeps its numbers in your account and workspace. Choose another outbound caller for agents using the pool before deleting it. Replacement errors appear beside the affected number.`}),`\n`,_jsx(Heading,{level:`2`,id:`access-and-verification`,children:`Access and verification`}),`\n`,_jsxs(_components.p,{children:[`Changing phone configuration requires `,_jsx(_components.strong,{children:`Voice settings`}),` write access. Assigning outbound numbers to teams requires `,_jsx(_components.strong,{children:`Teams`}),` write access. API callers need `,_jsx(_components.code,{children:`phone:write`}),` to `,_jsx(_components.a,{href:`/api-reference/phone/make_outbound_call`,children:`start an AI outbound call`}),`.`]}),`\n`,_jsx(_components.p,{children:`Before opening the line to customers, verify:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`A real inbound call reaches the intended IVR, AI agent or teammate.`}),`\n`,_jsx(_components.li,{children:`An AI outbound call connects and displays the intended caller ID.`}),`\n`,_jsx(_components.li,{children:`A human outbound call works if your team will use the dialer.`}),`\n`,_jsx(_components.li,{children:`Each transfer destination answers, and the team knows what to do if it cannot.`}),`\n`,_jsx(_components.li,{children:`The session contains the expected call record and, when enabled, recording.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`A browser `,_jsx(_components.strong,{children:`Test Call`}),` checks the agent experience. It does not verify a phone number’s carrier route. For failed real calls, use `,_jsx(_components.a,{href:`/phone/troubleshooting`,children:`Phone troubleshooting`}),`.`]})]})}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":"dark","config":{},"pageMetadata":{"title":"Phone numbers and routing","sidebarTitle":"Numbers and routing","description":"Choose a hosted number or your own carrier, route inbound calls to IVR, AI or teammates, and configure the caller number for outbound calls.","icon":"phone","keywords":["phone number setup","hosted phone numbers","bring your own carrier","verify caller ID","assign inbound agent","unassigned number","outbound caller number","phone routing priority","number pools","automatic number replacement"],"href":"/phone/numbers-and-routing"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Choose a number setup","slug":"choose-a-number-setup","depth":2,"children":[]},{"title":"Route incoming calls","slug":"route-incoming-calls","depth":2,"children":[]},{"title":"Configure outbound calls","slug":"configure-outbound-calls","depth":2,"children":[{"title":"Limit outbound numbers by team","slug":"limit-outbound-numbers-by-team","depth":3,"children":[]}]},{"title":"Outbound number pools","slug":"outbound-number-pools","depth":2,"children":[{"title":"Automatic replacement","slug":"automatic-replacement","depth":3,"children":[]}]},{"title":"Access and verification","slug":"access-and-verification","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/openchat/671ce9e295bc0bed/docs-footer.js","/_mintlify/custom/openchat/5e08dc26b4af039b/opencx-widget.js","/_mintlify/custom/openchat/b138b1492ac22a58/docs-feedback.js"],"subdomain":"openchat","siteName":"Open.cx Docs","title":"Phone numbers and routing - Open.cx Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-02T15:37:59.340Z","originalFileLocation":"phone/numbers-and-routing.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=\"dark\"}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=\"Choose a hosted number or your own carrier, route inbound calls to IVR, AI or teammates, and configure the caller number for outbound calls.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Open.cx Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/openchat/RMvbDkK3gsg3p3OQ/_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/openchat/RMvbDkK3gsg3p3OQ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/openchat/RMvbDkK3gsg3p3OQ/_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/openchat/RMvbDkK3gsg3p3OQ/_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/openchat/RMvbDkK3gsg3p3OQ/_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/openchat/RMvbDkK3gsg3p3OQ/_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/openchat/RMvbDkK3gsg3p3OQ/_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/openchat/RMvbDkK3gsg3p3OQ/_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/openchat/RMvbDkK3gsg3p3OQ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Phone numbers and routing - Open.cx Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Choose a hosted number or your own carrier, route inbound calls to IVR, AI or teammates, and configure the caller number for outbound calls.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OpenCX Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.open.cx/phone/numbers-and-routing\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://openchat.mintlify.app/_mintlify/api/og/v2?division=Setup\u0026amp;title=Phone+numbers+and+routing\u0026amp;description=Choose+a+hosted+number+or+your+own+carrier%2C+route+inbound+calls+to+IVR%2C+AI+or+teammates%2C+and+configure+the+caller+number+for+outbound+calls.\u0026amp;theme=ce95aec8479b2437aa73f5f5\u0026amp;signature=7a2fe91d0af28f4bf632bdac3a400f3dd2925df4ecbfaa8f3a3910686e7dc427\">\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=\"Phone numbers and routing - Open.cx Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Choose a hosted number or your own carrier, route inbound calls to IVR, AI or teammates, and configure the caller number for outbound calls.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://openchat.mintlify.app/_mintlify/api/og/v2?division=Setup\u0026amp;title=Phone+numbers+and+routing\u0026amp;description=Choose+a+hosted+number+or+your+own+carrier%2C+route+inbound+calls+to+IVR%2C+AI+or+teammates%2C+and+configure+the+caller+number+for+outbound+calls.\u0026amp;theme=ce95aec8479b2437aa73f5f5\u0026amp;signature=7a2fe91d0af28f4bf632bdac3a400f3dd2925df4ecbfaa8f3a3910686e7dc427\">\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/openchat/RMvbDkK3gsg3p3OQ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Open.cx Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0A0A0A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.open.cx/phone/numbers-and-routing\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/phone/numbers-and-routing.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.open.cx/#organization\",\"name\":\"Open.cx Docs\",\"url\":\"https://docs.open.cx\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/openchat/ivWwffb57vEmukK4/logo-light.svg?fit=max\u0026auto=format\u0026n=ivWwffb57vEmukK4\u0026q=85\u0026s=f6a5e94f4909a4d8df45757989c11afe\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.open.cx#website\",\"name\":\"Open.cx Docs\",\"url\":\"https://docs.open.cx\",\"publisher\":{\"@id\":\"https://docs.open.cx/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.open.cx/phone/numbers-and-routing#webpage\",\"url\":\"https://docs.open.cx/phone/numbers-and-routing\",\"name\":\"Phone numbers and routing\",\"description\":\"Choose a hosted number or your own carrier, route inbound calls to IVR, AI or teammates, and configure the caller number for outbound calls.\",\"dateModified\":\"2026-11-02T15:37:59.340Z\",\"isPartOf\":{\"@id\":\"https://docs.open.cx#website\"},\"breadcrumb\":{\"@id\":\"https://docs.open.cx/phone/numbers-and-routing#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.open.cx/phone/numbers-and-routing#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Phone \u0026 Telephony\",\"item\":\"https://docs.open.cx/phone/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Phone numbers and routing\",\"item\":\"https://docs.open.cx/phone/numbers-and-routing\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.open.cx/phone/numbers-and-routing#article\",\"headline\":\"Phone numbers and routing\",\"name\":\"Phone numbers and routing\",\"description\":\"Choose a hosted number or your own carrier, route inbound calls to IVR, AI or teammates, and configure the caller number for outbound calls.\",\"url\":\"https://docs.open.cx/phone/numbers-and-routing\",\"mainEntityOfPage\":{\"@id\":\"https://docs.open.cx/phone/numbers-and-routing#webpage\"},\"dateModified\":\"2026-11-02T15:37:59.340Z\",\"keywords\":\"phone number setup, hosted phone numbers, bring your own carrier, verify caller ID, assign inbound agent, unassigned number, outbound caller number, phone routing priority, number pools, automatic number replacement\",\"publisher\":{\"@id\":\"https://docs.open.cx/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.open.cx#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Open.cx Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Open.cx Docs","nav":{"global":null,"tabs":[{"tab":"Get Started","icon":"book-open","pages":[{"title":"Get Started","href":"/welcome"}]},{"tab":"Build Agents","icon":"robot","groups":[{"group":"Overview","pages":[{"title":"Build Agents get started","sidebarTitle":"Get Started","icon":"rocket","href":"/build-agents/get-started"},{"title":"Mini-app editing access","sidebarTitle":"Mini-app access","icon":"lock","href":"/build-agents/mini-apps"}]},{"group":"AI Chat Widget","pages":[{"title":"Widget overview","sidebarTitle":"Overview","icon":"messages","href":"/widget/introduction"},{"title":"Playground","icon":"play","mode":"wide","href":"/widget/playground"},{"group":"Setup Channel","icon":"gear","pages":[{"title":"Install Widget","icon":"plug","href":"/widget/install-widget"},{"title":"Widget v5 Companion mode","sidebarTitle":"Companion mode","icon":"sparkles","href":"/widget/companion-mode"},{"title":"OpenCX widget AI coding skills","sidebarTitle":"AI coding skills","icon":"terminal","href":"/widget/agent-skills"},{"title":"Migrate the widget from v4 to v5","sidebarTitle":"Migrate to v5","icon":"arrow-up","href":"/widget/migrate-to-v5"},{"title":"Mobile Support","icon":"phone","href":"/widget/native-mobile"},{"title":"Widget configuration","sidebarTitle":"Configuration","icon":"gear","href":"/widget/configuration"},{"title":"Authentication","icon":"shield-check","href":"/widget/authentication"},{"title":"Widget connections and approvals","sidebarTitle":"Connections","icon":"plug","href":"/widget/connections"},{"title":"Widget sessions and unread replies","sidebarTitle":"Sessions","icon":"route","href":"/widget/conversation-sessions"},{"title":"Configuration reference","sidebarTitle":"Reference","icon":"code","href":"/widget/configuration-reference"}]},{"group":"Components","icon":"cubes","pages":[{"title":"Widget overview","sidebarTitle":"Overview","icon":"paintbrush","href":"/widget/custom-components"},{"title":"Widget React components and launcher","sidebarTitle":"React components","icon":"react","href":"/widget/custom-components-react"},{"title":"Headless widget setup and hooks","sidebarTitle":"Headless","icon":"code","href":"/widget/custom-components-headless"}]},{"title":"Widget troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/widget/troubleshooting"}]},{"group":"AI X (Twitter) Support","pages":[{"title":"Connect X (Twitter)","icon":"plug","href":"/twitter/connect-twitter"}]},{"group":"AI App Review Support","pages":[{"title":"Connect App Store and Google Play reviews","sidebarTitle":"Connect app reviews","icon":"star","href":"/app-reviews/connect-app-reviews"}]},{"group":"AI WhatsApp Support","pages":[{"title":"Whatsapp overview","sidebarTitle":"Overview","icon":"comment-dots","href":"/whatsapp/introduction"},{"group":"Setup Channel","icon":"gear","pages":[{"title":"Create WhatsApp Agent","icon":"plug","href":"/whatsapp/connect-whatsapp"},{"title":"WhatsApp Flow","icon":"route","href":"/whatsapp/messaging-rules"},{"title":"Messaging Rules","icon":"scale-balanced","href":"/whatsapp/whatsapp-rules"}]},{"title":"Whatsapp troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/whatsapp/troubleshooting"}]},{"group":"AI SMS Support","pages":[{"title":"Sms overview","sidebarTitle":"Overview","icon":"comment-sms","href":"/sms/introduction"},{"group":"Setup Channel","icon":"gear","pages":[{"title":"Connect SMS","icon":"plug","href":"/sms/connect-sms"},{"title":"SMS Flow","icon":"route","href":"/sms/message-routing"},{"title":"US Number Compliance","icon":"flag","href":"/sms/compliance"}]},{"title":"Sms troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/sms/troubleshooting"}]},{"group":"Phone \u0026 Telephony","pages":[{"title":"Phone and telephony overview","sidebarTitle":"Overview","description":"Set up AI and human phone support, route your numbers, review calls, and configure outcome-based follow-ups across WhatsApp and your CRM.","icon":"phone","href":"/phone/introduction"},{"group":"Setup","icon":"gear","pages":[{"title":"Phone numbers and routing","sidebarTitle":"Numbers and routing","icon":"phone","href":"/phone/numbers-and-routing"},{"title":"Create Phone Agent","description":"Set up an AI voice agent — choose a voice, write instructions, assign a phone number, and make your first test call.","icon":"plus","href":"/phone/create-agent"},{"title":"Agent Configuration","icon":"sliders","href":"/phone/agent-config"},{"title":"Classical IVR","href":"/phone/call-flows"},{"title":"SIP Integration","icon":"server","href":"/phone/sip-integration"}]},{"group":"Calling","icon":"phone","pages":[{"title":"Inbound Calls","icon":"phone-arrow-down-left","href":"/phone/inbound-calls"},{"title":"Call answering and ringing settings","sidebarTitle":"Call answering","icon":"phone-volume","href":"/phone/call-answering"},{"title":"Phone answer-time SLA","sidebarTitle":"Answer-time SLA","icon":"stopwatch","href":"/phone/answer-time-sla"},{"title":"Outbound Calls","icon":"phone-arrow-up-right","href":"/phone/outbound-calls"},{"title":"Human phone calling and transfers","sidebarTitle":"Human calling","icon":"phone","href":"/phone/human-calling"},{"title":"Live interpretation for team phone calls","sidebarTitle":"Live interpretation","icon":"language","href":"/phone/live-interpretation"},{"title":"Voice SDK integration","sidebarTitle":"App voice SDK","icon":"microphone","href":"/phone/voice-sdk"},{"title":"Phone Desk agent workspace","sidebarTitle":"Phone Desk","icon":"headset","href":"/phone/phone-desk"},{"title":"Phone recordings, transcripts, and summaries","sidebarTitle":"Recordings and transcripts","icon":"phone","href":"/phone/recordings-and-transcripts"}]},{"group":"Automation","icon":"bolt","pages":[{"title":"Phone call lifecycle and outcomes","sidebarTitle":"Call outcomes","icon":"phone","href":"/phone/call-outcomes"},{"title":"Phone follow-up workflows and callbacks","sidebarTitle":"Follow-up workflows","icon":"phone","href":"/phone/follow-up-workflows"},{"title":"AI phone agent handovers","sidebarTitle":"AI agent handovers","icon":"arrow-right-arrow-left","href":"/phone/ai-agent-handovers"}]},{"title":"Phone calling troubleshooting","sidebarTitle":"Troubleshooting","icon":"phone","href":"/phone/troubleshooting"}]},{"group":"AI Email Support","pages":[{"title":"Email overview","sidebarTitle":"Overview","icon":"envelope","href":"/email/introduction"},{"group":"Setup Channel","icon":"gear","pages":[{"title":"Sending Domains \u0026 DNS","icon":"globe","href":"/email/sending-domains"},{"title":"Sequence email sender settings","sidebarTitle":"Sequence senders","icon":"paper-plane","href":"/email/sequence-senders"},{"title":"Connect Email","icon":"paper-plane","href":"/email/forwarding"},{"title":"Email Flow","icon":"diagram-project","href":"/email/forwarding-rules"},{"title":"Reply Templates","icon":"signature","href":"/email/reply-templates"}]},{"title":"Email troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/email/troubleshooting"}]},{"group":"AI Actions","pages":[{"title":"AI Actions","sidebarTitle":"Overview","icon":"bolt","href":"/actions/introduction"},{"title":"Build An Action","sidebarTitle":"Build an action","icon":"plug","href":"/actions/build-an-action"},{"title":"OpenAPI Import","sidebarTitle":"OpenAPI import","icon":"file-import","href":"/actions/openapi-import"},{"title":"MCP Servers","sidebarTitle":"MCP servers","icon":"plug-circle-bolt","href":"/actions/mcp-servers"},{"title":"Authentication","sidebarTitle":"Authentication","icon":"shield-halved","href":"/actions/authentication"},{"title":"Execution","sidebarTitle":"Execution","icon":"diagram-project","href":"/actions/execution"},{"title":"Actions troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/actions/troubleshooting"}]},{"group":"Resources","pages":[{"title":"Manage Contacts","icon":"user","href":"/contacts/manage-contacts"},{"title":"Guaranteed Message Delivery","icon":"paper-plane","href":"/resources/guaranteed-delivery"},{"title":"Increase Automation","sidebarTitle":"Increase automation","icon":"chart-line","href":"/resources/increase-automation"},{"title":"Collect Customer Satisfaction","sidebarTitle":"CSAT","icon":"star","href":"/resources/csat"}]}]},{"tab":"Ticketing","icon":"ticket","pages":[{"title":"Ticketing","href":"/ticketing/structured-fields"}]},{"tab":"Connect","icon":"arrows-left-right","pages":[{"title":"Connect","href":"/connect/introduction"}]},{"tab":"Integrations","icon":"plug","pages":[{"title":"Integrations","href":"/dashboard/introduction"}]},{"tab":"MCP","icon":"network-wired","pages":[{"title":"MCP","href":"/mcp/introduction"}]},{"tab":"Agent Training","icon":"book","pages":[{"title":"Agent Training","href":"/knowledge/introduction"}]},{"tab":"AI Safety","icon":"shield","pages":[{"title":"AI Safety","href":"/safety/introduction"}]},{"tab":"API Reference","icon":"code","pages":[{"title":"API Reference","href":"/api-reference/authentication"}]},{"tab":"Partners","icon":"handshake","pages":[{"title":"Partners","href":"/partners/introduction"}]}]},"basePath":"","title":"Phone numbers and routing - Open.cx Docs","buildId":"dpl_GZsjphRpnhWkstV12jxWNcMHFyox","deploymentId":"dpl_GZsjphRpnhWkstV12jxWNcMHFyox","dynamics":[],"chunks":[]}