Phone Number Management

This page gives details and background information on how Proxy handles phone numbers. If you just want to get started working with Proxy, head over to the quickstart.

Behind the scenes, Proxy intelligently manages phone number selection from your number pool.

Proxy Overview Graphic

For masked communications between two participants, Proxy relies on the concept of Sessions.

Sessions are our pairings of two individuals. A Session doesn't just wrap up a single voice call or SMS message, it contains all the calls and messages for the given pairing of numbers.  The following diagram shows a Session with two numbers wrapping up two SMS conversations and a Voice call.



Let's walk through the example of a simple delivery service to understand how Proxy handles proxied numbers.

Different numbers in different countries will vary by capabilities; numbers which support multiple capabilities can have different conversation types in the same session.

Fill the Proxy Phone Number Pool

We first create our Proxy service, and add two Twilio phone numbers to it:

  • #1-415-555-1212
  • #1-415-555-3434

Both of these numbers are voice and messaging capable. 

Make Our First Delivery

A new delivery is created in our system, so we create a Proxy session.  Here are the steps Proxy runs through:

  • We receive the customer's phone number and the driver's phone number so that they can communicate over SMS and Voice channels.
  • Proxy realises a Twilio number is needed to proxy communications, so it retrieves one from the phone number pool associated with Proxy.
  • Both the driver and passenger are now paired and both receive a Proxy number to communicate.
  • Customer A and Driver X are matched via Twilio Proxy number #1-415-555-1212.

Proxy phone numbers example 1


Make Our Second Delivery

A second delivery is created in our system and we create a second Proxy session. It's a different customer and different driver, so Proxy can re-use the number used in the first delivery.

From our first delivery session which is still ongoing:

  • Customer A is matched to Session 1 as [Customer A's phone number, Twilio Proxy number #1-415-555-1212]
  • Driver X is matched to Session 1 as [Driver X's phone number, Twilio Proxy number #1-415-555-1212]

For our second delivery session, the following happens:

  • Customer B is matched to Session 2 as [Customer B's phone number, Twilio Proxy number #1-415-555-1212]
  • Driver Y is matched to Session 2 as [Driver Y's phone number, Twilio Proxy number #1-415-555-1212]

Proxy phone numbers example 2

Proxy can re-use the same Twilio number for this masked communication because it is still able to identify both participants uniquely.

Make Our Third Delivery

A third delivery is created in our system, and now it is Customer C being paired with Driver X. Proxy knows that Driver X already has a session ongoing (Session 1) so it needs to be careful about number allocation.

Here's how Proxy manages this complexity:

  • Customer C is added as a participant. They have no other deliveries, so can be allocated #1-415-555-1212.
  • Driver X already has an ongoing delivery (Session 1) so if they were allocated #1-415-555-1212 as their Proxy number, conversations would merge and cause serious confusion.
  • Proxy knows this, so it will allocate a different number (#1-415-555-3434) to Driver X.

Proxy phone numbers example 3

Note how Driver X now has two different numbers assigned internally to the service. This abstraction makes it so that when Driver X makes/receives texts or calls originating from Customer C, they are from a separate number to his other customers (Customer A in this example).

Proxy thus manages the complexity of 3 deliveries across 3 customers with 2 drivers with only 2 phone numbers.

More Complexity: Other Reasons for Multiple Phone Number Allocations

With Proxy, both participants in the session don't have to use the same Proxy number. For example, if customer D is roaming on a UK phone number, and Driver Z is on a US phone number, the pairing may actually be:

  • Customer D is matched to Session 4 as [Customer D's UK phone number, Twilio Proxy UK number #44-87-000-1234]
  • Driver Z is matched to Session 4 as [Driver Z's US phone number, Twilio Proxy US number #1-415-555-3434]

This means that customer D won't have any trouble sending SMS messages to a UK number, but they will still be proxied through to reach Driver Z on a US number.

Intelligent Allocation of Phone Numbers

Proxy intelligently manages phone number allocation.  Algorithmically, it attempts to optimize for many use cases and prioritizes:

  • Using your number pool as efficiently as possible
  • Avoiding any possibility of collision where conversations 'merge' the wrong participants
  • Load balancing across numbers for high-scale use cases
  • Selecting numbers appropriate to end user capabilities and conversation types

Geo match options in Proxy

When presented with an end users phone number, Proxy will only match that number to a Twilio number in the same country. This is to ensure that routing between an end user's number and a Twilio number will always succeed. Beyond that, Proxy allows a number of configuration options on the Service with the paramater GeoMatchLevel.

Country Default. End user numbers will only match with a same-country Twilio number. For example, if you have USA and UK users, the 
AreaCode Require numbers to match exactly to local area codes.
ExtendedAreaCode Require numbers to match to extended area codes. 

Number selection behaviour options in Proxy

Proxy provides two number selection "styles". These are configurable on the Service. The two settings are PreferSticky (default) and AvoidSticky.

PreferSticky means that Proxy will try and select the same number for a given participant if they have previous sessions but will select another number if that number cannot be used. This is useful for ridesharing like use cases, where there is low concurrent sessions, and you want drivers to see the same number when interacting with your service as much as possible. 

AvoidSticky means that we will try to use different phone numbers as long as that is possible within a given pool rather than try and use the same. This is useful where you want users to see a different number when matched with different people as much as possible.

How many phone numbers do I need?

We have a whole page on that question, find that here: How many numbers do I need?

Need some help?

We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd browsing the Twilio tag on Stack Overflow.