Level 1: Twilio Doer

Mastery Project: Doer Badge Capstone Project

Task 1: Your Mastery Project


In this mastery project you will demonstrate level one concepts by building a Twilio application which integrates Twilio voice, messaging and Client. Acme Adventures, a fictional travel company, has asked you to develop a new call center application. Acme has provided the list of requirements below.

Build your mastery app

Requirements from Acme Adventures

  1. Acme would like to provide a dial in number local to our offices in area code 323
  2. When callers dial the number, they should hear a text to speech message "Welcome to Acme Adventures, we're connecting you now"
  3. The call should then be forwarded to a web browser in the Acme offices, where it can ring for up to 20 seconds before timing out
  4. The agent must be able to disconnect the caller by pressing a hangup button
  5. After the agent disconnects a call, a text to speech message 'Thank you for calling. Goodbye.' is spoken to the caller
  6. If no agent answers the call within 20 seconds, a text to speech message 'No agents are available at this time. Goodbye.' is spoken to the caller
  7. In all cases, a text message reading "For all your adventure needs, call Acme Adventures" is sent to the caller after the call disconnects.

Resources and Refreshers

Test your app

Go through the following steps to test your app. At the end of this project when you submit your app for automatic validation, we will test against these same criteria.

Test StepCheck the Logs
1) Call your Twilio number and hear the 'Welcome to Acme Adventures' greeting.
  • Your Twilio phone number for this app should be in area code 323.
  • Check that you the Voice Request URL is configured correctly for your Twilio number.
  • Your app should use the <Say> tag to speak this text.
  • Check for any errors in the request inspector.
2) The caller should then hear ringing. A browser application should then receive an inbound call.
  • Your TwiML app should use the <Dial> and <Client> tags.
  • You should specify both the 'action' and 'timeout' attributes in the <Dial> tag
  • Your client app's capability token should grant the inbound permission.
  • The client identifier specified in the capability token should match the value passed in the <Client> tag.
  • The Twilio.js functions Twilio.Device.setup and Twilio.Device.incoming must be implemented correctly.
  • Check the javascript console for any errors
3) The caller and agent can talk until the agent presses the hangup button.
  • Check that connection.accept() is called to establish the connection
  • The hangup button should call Twilio.Device.disconnectAll() or connection.disconncet()
  • Check the javascript console for any errors
4) After the client call leg is disconnected, the caller should hear the proper closing message, depending on if the Client answered the call
  • Ensure you've created an endpoint to handle the action attribute of the <Dial> tag.
  • Check the 'DialCallStatus ' parameter to determine if the Client call was answered (it will have 'completed' status)
  • Use the <Say> tag to speak text, conditionally based on the DialCallStatus
5) The caller should receive a SMS message after the call is disconnected
  • Use the <Message> TwiML tag or REST API to send an SMS to the caller's number. This is sent in the TwiML request as the 'From' parameter
Submit your app


Please grant Twilio <Skills> read-only access to your Twilio account using the Twilio Connect API. We will use this to validate account configuration and log data related to the project you are submitting. You should only use a dedicated developer account for submitting projects and should not grant access to any production accounts.

You can revoke access to your account at any time from your Twilio billing page

You are authorized with Twilio Connect for read-only access to your account and logs.

You can revoke access to your account at any time from your Twilio billing page

Now that you have a working app, submit it for automatic validation. Enter following values:

Call SID (incoming call):  
Call SID (outbound call leg to client):  
Message SID:  

 I verify that the work I am submitting is my own and that I comply with the Code of Ethics.


Status: {{validationC.currentAttempt.status}}

Status: {{validationC.currentAttempt.status}}

Status: {{validationC.currentAttempt.status}}

Status: {{test.status}}

Next Task: Project Review


Powered by