Skip to main content

Number Masking Setup

Number masking (also called number privacy or number anonymization) hides the real phone numbers of both parties during a call. Instead of seeing each other's actual numbers, both the customer and agent see a virtual number (ExoPhone). This protects privacy and prevents unauthorized direct contact.

tip

Number masking is available on Growth and Enterprise plans. It is commonly used by marketplaces, ride-sharing apps, delivery platforms, and healthcare services.

How Number Masking Works​

Customer (real: +919876543210)        Agent (real: +919876543211)
│ │
│ Sees: +914412345678 │ Sees: +914412345678
│ (ExoPhone) │ (ExoPhone)
│ │
└───────── Exotel (bridges call) ───────┘
via ExoPhone
  1. Customer calls the ExoPhone (virtual number)
  2. Exotel identifies the customer-agent mapping
  3. Exotel connects the call to the assigned agent
  4. Both parties see the ExoPhone number, not each other's real number
  5. After the engagement ends, the mapping can be deactivated

Use Cases​

IndustryScenarioPrivacy Need
E-commerce / DeliveryDelivery person calls customerPrevent post-delivery harassment
Ride-sharingDriver calls passengerProtect both parties' numbers
HealthcareDoctor calls patientMaintain patient privacy
Real estateAgent calls property ownerPrevent direct dealing without platform
RecruitmentRecruiter calls candidateProtect candidate contact info
Service marketplacePlumber calls homeownerPrevent platform bypass

Setup Methods​

The Lead Assist API provides a managed number masking solution:

  1. Create an allocation -- Map a customer number to an agent number via an ExoPhone
  2. Calls are masked -- When either party calls the ExoPhone, they are connected with masked numbers
  3. Deactivate when done -- Remove the allocation when the engagement is complete

Creating a Number Mask Allocation​

curl -X POST \
https://api.exotel.com/v1/Accounts/{account_sid}/CustomerNumbers/allocate \
-u {api_key}:{api_token} \
-d "VirtualNumber=+914412345678" \
-d "CustomerNumber=+919876543210" \
-d "AgentNumber=+919876543211"

Allocation Lifecycle​

StepActionAPI
1. CreateMap customer to agent via ExoPhoneCreate Allocation
2. ActiveBoth parties can call each other via the ExoPhoneAutomatic
3. UpdateChange the agent number if reassignedUpdate Allocation
4. DeactivateRemove the mapping when the engagement endsDelete Allocation

Method 2: Click-to-Call with Masked CallerID​

Use the Voice API to initiate calls where both parties see the ExoPhone:

curl -X POST \
https://api.exotel.com/v1/Accounts/{account_sid}/Calls/connect.json \
-u {api_key}:{api_token} \
-d "From=+919876543210" \
-d "To=+919876543211" \
-d "CallerId=+914412345678"

Both the customer and agent see +914412345678 (the ExoPhone) as the caller ID.

Configuration Options​

Allocation Settings​

SettingDescriptionDefault
Virtual NumberThe ExoPhone used for maskingRequired
Customer NumberCustomer's real phone numberRequired
Agent NumberAgent's real phone numberRequired
ExpiryWhen the allocation automatically deactivatesNo expiry (manual deactivation)
Call RecordingWhether masked calls are recordedInherit from ExoPhone settings

ExoPhone Pool Management​

For high-volume number masking, maintain a pool of ExoPhones:

StrategyDescriptionBest For
Dedicated per pairOne ExoPhone per customer-agent pairLow volume, long engagements
Shared poolRotate ExoPhones across multiple pairsHigh volume, short engagements
RegionalUse ExoPhones from the customer's regionRegional businesses, local presence
warning

Each ExoPhone can only have one active allocation at a time. If you need to mask calls for 1,000 concurrent customer-agent pairs, you need at least 1,000 ExoPhones in your pool. Plan your ExoPhone inventory accordingly.

Allocation Expiry​

Set automatic expiry to ensure privacy allocations do not remain active indefinitely:

Engagement TypeRecommended Expiry
Food delivery2 hours after order placement
Ride-sharing1 hour after trip completion
Service appointment24 hours after appointment
Property viewing7 days after lead creation

Call Flow with Number Masking​

Inbound Masked Call​

Customer dials ExoPhone (+914412345678)
│
â–¼
Exotel looks up allocation
│
├── Allocation found ──► Connect to agent (+919876543211)
│ Agent sees: +914412345678 (masked)
│
└── No allocation found ──► Play message ("This number is not active") ──► Hangup

Outbound Masked Call (API-Initiated)​

Your application triggers a call via API
│
â–¼
Exotel calls Customer (+919876543210)
Customer sees: +914412345678 (ExoPhone)
│
â–¼ (Customer answers)
│
Exotel calls Agent (+919876543211)
Agent sees: +914412345678 (ExoPhone)
│
â–¼ (Agent answers)
│
Both parties connected (masked)

Monitoring Masked Calls​

Call Logs​

Masked calls appear in your call logs with the actual phone numbers (not masked). This allows you to:

  • Track which customer-agent pairs communicated
  • Review call duration and status
  • Access call recordings (if enabled)

Reporting​

Use CDR Reports to analyze number masking usage:

  • Total masked calls per period
  • Average call duration for masked calls
  • Allocation utilization (active allocations vs. ExoPhone pool size)

Best Practices​

  1. Set allocation expiry -- Do not leave allocations active indefinitely; set expiry based on your engagement lifecycle
  2. Monitor ExoPhone pool -- Track pool utilization and add ExoPhones before you run out
  3. Handle "no allocation" calls -- Configure a greeting for calls to ExoPhones without an active allocation
  4. Deactivate promptly -- Remove allocations as soon as the engagement is complete
  5. Use regional numbers -- Customers are more likely to answer calls from local numbers
  6. Enable call recording -- Record masked calls for quality and dispute resolution (with consent)
  7. Audit allocations regularly -- Clean up stale allocations that were not properly deactivated

Troubleshooting​

IssuePossible CauseResolution
Call not connectingNo active allocation for the ExoPhoneVerify allocation exists via the API
Wrong agent connectedAllocation mapped to incorrect agentUpdate the allocation with the correct agent number
Customer sees real numberCallerID not set to ExoPhone in API callEnsure CallerId parameter is set to the ExoPhone
ExoPhone busyExoPhone already in use for another callUse a larger ExoPhone pool or shared pool strategy
Allocation not deactivatingExpiry not set; manual deactivation missedImplement automated cleanup using the API