Twilio's APIs consistently use the E.164 standard for phone numbers. This format is fine within your code, but it presents a couple of user-facing issues:
+15095550100
will be read literally as a large number, instead of digit-by-digit. (ex. "Plus fifteen billion, ninety-five million, five hundred fifty thousand, one hundred")
Fortunately, Twilio Lookup enables you to convert a given E.164 phone number into the national format used by that country, which Twilio will read aloud as one would normally say it in their region.
To get started, use the following instructions to create a Function to host your code.
In order to run any of the following examples, you will first need to create a Function into which you can paste the example code. You can create a Function using the Twilio Console or the Serverless Toolkit as explained below:
If you prefer a UI-driven approach, creating and deploying a Function can be done entirely using the Twilio Console and the following steps:
https://<service-name>-<random-characters>-<optional-domain-suffix>.twil.io/<function-path>
test-function-3548.twil.io/hello-world
.
Your Function is now ready to be invoked by HTTP requests, set as the webhook of a Twilio phone number, invoked by a Twilio Studio Run Function Widget, and more!
The following Function is one which will tell the user their phone number, in the format that they would expect in normal conversation. This will also work for international phone numbers!
To verify this for yourself, paste the code into the Function that you just made, and set it as the A Call Comes In webhook handler for the Twilio phone number you wish to test. The following instructions will show you how to do so.
_18exports.handler = async (context, event, callback) => {_18 // The pre-initialized Twilio client is available from the `context` object_18 const client = context.getTwilioClient();_18 // Create a new voice response object_18 const twiml = new Twilio.twiml.VoiceResponse();_18_18 // The From value is provided by Twilio to this webhook Function, and contains the caller's_18 // phone number in E.164 format, ex. '+15095550100'_18 const from = event.From;_18_18 // Call Twilio Lookup to get information about the number, including its national format_18 const result = await client.lookups.phoneNumbers(from).fetch();_18_18 // Read back the caller's phone number in the way it would normally spoken, not as a_18 // massive integer!_18 twiml.say(`Your phone number is ${result.nationalFormat}`);_18 return callback(null, twiml);_18};
In order for your Function to react to incoming SMS and/or voice calls, it must be set as a webhook for your Twilio number. There are a variety of methods to set a Function as a webhook, as detailed below:
You can use the Twilio Console UI as a straightforward way of connecting your Function as a webhook:
ui
unless you have created
custom domains
), and finally
Function Path
of your Function from the respective dropdown menus.