Designing Number Porting Cutover Procedures with Zero-Downtime Migration Strategies
What This Guide Covers
This guide details the architectural and operational procedures required to execute a Local Number Portability (LNP) cutover from a legacy PBX or SIP trunk provider to Genesys Cloud CX or NICE CXone without service interruption. You will learn how to configure dual-homing, implement DNS failover logic, and manage the critical “active-active” window where calls route through both providers simultaneously. The result is a deterministic cutover plan that eliminates the risk of dropped calls during the FCC-mandated porting window.
Prerequisites, Roles & Licensing
- Licensing: Genesys Cloud CX (CX 2 or higher for advanced routing) or NICE CXone (Standard or higher). Voice Add-on licenses are required for all ported numbers.
- Permissions:
- Genesys:
Telephony > Trunk > Edit,Telephony > Routing > Edit,Admin > Organization > Edit. - CXone:
Telephony > Trunks > Manage,IVR Studio > Edit,Admin > Users > Manage Roles.
- Genesys:
- External Dependencies:
- A secondary SIP Trunk provider (e.g., Bandwidth, Twilio, Telnyx) capable of supporting inbound and outbound traffic.
- Access to the LoA (Letter of Authorization) and LoA-C forms for FCC-compliant porting.
- Control over the domain DNS records (for SIP registration or HTTP-based routing if applicable).
The Implementation Deep-Dive
1. Establishing the Active-Active Dual-Homing Architecture
The fundamental error in most porting projects is treating the migration as a “switch” event. In reality, it is an overlap event. To achieve zero downtime, you must design a topology where the new cloud contact center (Genesys/CXone) and the legacy system are both active and receiving traffic simultaneously during the cutover window.
The Architectural Pattern:
You will configure the new platform as the primary destination for new DID numbers, while the legacy trunk remains active for existing numbers. However, for the numbers being ported, you must ensure that the new platform can accept traffic before the port completes. This requires provisioning the numbers on the new carrier before submitting the port request, or using a “port-out” strategy where the new provider acts as the destination carrier immediately upon approval.
Configuration Steps:
-
Provision New Trunks:
In Genesys Cloud, navigate to Admin > Telephony > Trunks. Create a new SIP trunk for the incoming carrier. Ensure theSIP Trunkprofile allows inbound calls from the carrier’s IP ranges.{ "name": "Primary_Carrier_Trunk", "description": "Inbound traffic from new LNP provider", "sip_profile_id": "sip-profile-inbound-id", "domains": ["example.com"], "call_leg_mode": "INBOUND", "codec_preferences": ["G722", "PCMU", "PCMA"] }Note: In CXone, this occurs in Telephony > Trunks > Add Trunk. Ensure the
Trunk Typeis set toSIPand theProtocolmatches the carrier requirements. -
Configure Inbound Routing Rules:
You must create a routing rule that captures calls from the new carrier and directs them to the appropriate queue or IVR. Do not rely on default routing.- In Genesys, create an Inbound Routing Rule matching the
Fromheader or theTrunkID. - Set the
Destinationto the primary IVR or Queue. - Critical: Enable
Call RecordingandSpeech Analyticson this rule to monitor quality during the transition.
- In Genesys, create an Inbound Routing Rule matching the
-
The Trap: Codec Mismatch and NAT Traversal
The most common failure point in dual-homing is not the routing logic, but the media path. If your legacy provider uses G.711u and your new provider defaults to G.722, and your firewall does not handle ALG (Application Layer Gateway) correctly, you will experience one-way audio or silent calls.- Solution: Force codec negotiation at the trunk level. In Genesys, edit the SIP Profile and explicitly order
PCMUfirst if the legacy system is rigid. In CXone, use theCodecsetting in the Trunk configuration to prioritizeG711u. - NAT Trap: Ensure your carrier IP ranges are whitelisted in your firewall. If you are using a cloud provider like Genesys, you do not control the egress IP. You must whitelist the carrier’s IP ranges in your firewall if you have any on-premise components (like a legacy PBX) still in the path. If you are fully cloud-to-cloud, ensure the carrier supports
Connection: closeand properViaheader handling to prevent loopback issues.
- Solution: Force codec negotiation at the trunk level. In Genesys, edit the SIP Profile and explicitly order
2. Designing the DNS and SIP Failover Logic
For advanced zero-downtime strategies, especially when porting large blocks of numbers, you may leverage DNS-based failover or SIP registration persistence. This section assumes you are using a SIP trunking provider that supports dynamic DNS updates or that you are managing SIP registrations directly.
The Strategy:
Instead of waiting for the port to complete, you configure the new platform to “listen” for the numbers. When the port activates, the carrier updates the routing in the SS7 network to point to your new trunk. If the port fails or is delayed, calls continue to route to the legacy provider.
Implementation:
-
Configure SIP Registration Persistence (If Applicable):
If your carrier requires SIP registration (common in E.164 Short Number Routing or certain SIP trunking models), you must register the new trunk with the carrier before the port goes live.- In Genesys, go to Telephony > Trunks > [Your Trunk] > SIP Registration. Enter the credentials provided by the carrier.
- Monitor the
Statusfield. It must showRegisteredbefore the porting date. - The Trap: If the registration fails, the carrier will drop calls to the porting numbers immediately upon activation. Test the registration 48 hours in advance. If it fails, check for
403 Forbidden(auth error) or408 Timeout(firewall/NAT issue).
-
Implement DNS Failover (For HTTP/SIP over TLS):
If your architecture uses a DNS-based load balancer (e.g., AWS Route 53, Azure Traffic Manager) to route SIP traffic to your cloud provider, you can configure a low-TTL DNS record._sip._tcp.example.com. 300 IN SRV 10 60 5060 sip-new-provider.example.com. _sip._tcp.example.com. 300 IN SRV 20 60 5060 sip-legacy-provider.example.com.- Set the TTL (Time To Live) to 300 seconds (5 minutes).
- During the cutover, if the new provider fails to register, you can manually swap the priority in DNS to route all traffic back to the legacy provider.
- The Trap: DNS propagation delays. Even with a low TTL, recursive resolvers may cache the record for longer. To mitigate this, use
digornslookupto verify the DNS record resolves correctly from multiple global locations before the cutover window.
-
Architectural Reasoning:
Why use DNS failover? Because it provides a “break glass” mechanism. If the porting process encounters an FCC hold or a carrier dispute, you can instantly revert traffic to the legacy system without reconfiguring IVR flows. This is superior to relying solely on the carrier’s routing updates, which are often opaque and delayed.
3. Orchestrating the Porting Window and Cutover Execution
The cutover window is typically 24-48 hours, depending on the carrier and the number of digits. You must execute a precise sequence of actions to ensure no calls are dropped.
Phase 1: Pre-Porting Validation (T-48 Hours)
- Verify Number Availability: Use the carrier’s API to confirm the numbers are eligible for porting.
GET https://api.carrier.com/v2/porting/eligibility?phone_numbers=+1234567890- If the API returns
NOT_ELIGIBLE, investigate the account status with the losing carrier. Common issues include unpaid bills or pending disputes.
- If the API returns
- Test Inbound Routing: Place test calls to the numbers while they are still on the legacy provider. This will not work for the porting numbers themselves, but you can test the trunk connectivity using a spare DID.
- Validate Outbound Routing: Ensure that outbound calls from the new platform are using the correct
Fromheader. If you port numbers, you must update the outbound trunk configuration to use the new carrier for those numbers.- In Genesys, create an Outbound Routing Rule matching the
Fromnumber range. - Set the
Trunkto the new carrier. - The Trap: If you do not update outbound routing, calls originating from the ported numbers will still route through the legacy trunk, causing billing discrepancies and potential CLID (Caller ID) spoofing alerts.
- In Genesys, create an Outbound Routing Rule matching the
Phase 2: The Porting Submission (T-24 Hours)
- Submit LoA/LoA-C: Use the carrier’s portal to submit the porting request. Ensure the
Effective Dateis set to a date that allows for a 24-hour buffer. - Monitor Porting Status: Use the carrier’s API to poll the porting status.
GET https://api.carrier.com/v2/porting/status?request_id=123456- Watch for status changes:
PENDING,APPROVED,IN_PROGRESS,COMPLETED. - If the status is
DENIED, you must resolve the dispute immediately. Common denials include mismatched account numbers or service addresses.
- Watch for status changes:
Phase 3: The Cutover Execution (T-0)
- Activate New Routing: At the moment the porting status changes to
COMPLETED, the carrier will update the SS7 routing. Calls to the ported numbers will now arrive at your new trunk. - Monitor Call Volume: Use Genesys Cloud Admin > Telephony > Call Volume or CXone Real-Time Dashboard to monitor inbound call volume.
- If call volume drops to zero, check the trunk status.
- If calls are being dropped, check the SIP logs for
488 Not Acceptable Here(codec mismatch) or487 Request Terminated(timeout).
- The Trap: The “Zombie” Call Scenario
During the porting window, some calls may be routed to the legacy provider while others are routed to the new provider. This is normal. However, if you have configuredCall ForwardingorVoicemailon the legacy system, callers may hear a “Number Disconnected” tone if the legacy system does not recognize the number as active.- Solution: Ensure the legacy system is configured to accept calls for the porting numbers until the port is fully complete. If possible, disable call forwarding on the legacy system for these numbers to prevent routing loops.
Validation, Edge Cases & Troubleshooting
Edge Case 1: The “Split-Brain” Routing Conflict
The Failure Condition:
Calls to ported numbers are answered by the new IVR, but outbound calls from agents using those numbers are routed to the legacy trunk, causing Caller ID mismatch and regulatory violations (TCPA/STIR/SHAKEN).
The Root Cause:
The outbound routing rules were not updated to match the new trunk for the ported number ranges. The system defaults to the primary outbound trunk, which is the legacy provider.
The Solution:
- Create a specific Outbound Routing Rule in Genesys Cloud that matches the
Fromnumber range of the ported numbers. - Set the
Trunkto the new carrier. - In CXone, use the Routing > Outbound Routing menu to create a rule based on
Dialed NumberorFrom Number. - Validate by placing a test call from an agent using a ported number and checking the
Fromheader in the SIP logs. It must match the ported number and route through the new trunk.
Edge Case 2: SS7 Routing Latency and Call Drops
The Failure Condition:
During the first 1-2 hours after the port completes, callers experience long ring times or immediate disconnects.
The Root Cause:
The SS7 network has not fully propagated the new routing information. Some switches are still routing calls to the legacy provider, which may reject them if the number is no longer active on that trunk.
The Solution:
- Implement a
Retrylogic in your IVR. If a call is disconnected within 2 seconds, retry the call once. - Use
Call Center Analyticsto monitorAbandon RateandDrop Rateduring the cutover window. - If drops persist, contact the carrier to force a routing refresh. Some carriers offer a “Push” feature to update the SS7 database immediately.
- The Trap: Do not rely solely on the carrier’s “Port Complete” notification. The SS7 propagation can take up to 24 hours. Monitor call quality metrics for the full 48 hours.
Edge Case 3: STIR/SHAKEN Attestation Failure
The Failure Condition:
Outbound calls from ported numbers are flagged as “Spam Likely” by carriers like AT&T or Verizon.
The Root Cause:
The new carrier has not been provisioned with the correct STIR/SHAKEN attestation level for the ported numbers. The losing carrier may have had A attestation, but the new carrier only has B or C until the port is fully verified.
The Solution:
- Verify with your new carrier that the ported numbers are enrolled in their STIR/SHAKEN program.
- If the carrier cannot provide
Aattestation immediately, consider using aBattestation with a clear disclaimer in your IVR. - Monitor
Call Blockingreports in Genesys Cloud Admin > Telephony > Call Blocking to identify which carriers are flagging your calls. - The Trap: If you do not address STIR/SHAKEN, your deliverability will drop significantly, leading to customer complaints and potential regulatory fines.