Menu

Expand
Rate this page:

Thanks for rating this page!

We are always striving to improve our documentation quality, and your feedback is valuable to us. How could this documentation serve you better?

IVR: Screening & Recording with Java and Servlets

IVR Screening and Recording in Java and Servlets

This Java Servlets sample application is modeled after a typical call center experience, but with more Reese's Pieces.

Stranded aliens can call an agent and receive instructions on how to get off of Earth safely. In this tutorial, we'll show you the key bits of code that allow an agent to send a caller to voicemail, and later read transcripts and listen to voicemails.

To run this sample app yourself, download the code and follow the instructions on GitHub.

Read how Hulu and IVR with scheduled callbacks on Twilio's platform. Also, find more examples and sample IVR code for many web languages on our IVR application page.

Click here to start the tutorial!

Route the Call to an Agent

When our alien caller reaches our call center, we need to figure out where to route the call. Depending on their input we will route this call to an extension. Extensions are used to look up an agent. Any string can be used to define an extension.

Once we look up the agent, we can use the <Dial> verb to dial the agent's phone number and try to connect the call.

        
        
        
        
        src/main/java/com/twilio/ivrrecording/servlet/extension/ConnectServlet.java

        Route the call to an agent

        src/main/java/com/twilio/ivrrecording/servlet/extension/ConnectServlet.java

        With this information, we present aliens with a list of available agents so they can pick one. Let's see how we look up an agent.

        Look up an agent

        Look up an agent

        When we receive a call from an alien we give them a set of options. In this case the options are:

        • For Brodo, press 2
        • For Dagobah, press 3
        • For Oober, press 4

        When our alien caller has made their choice we use the key-press to lookup an Agent.

              
              
              
              
              src/main/java/com/twilio/ivrrecording/servlet/extension/ConnectServlet.java

              Find an agent by extension

              src/main/java/com/twilio/ivrrecording/servlet/extension/ConnectServlet.java

              Now that our user has chosen their agent, our next step is to connect the call to that agent.

              Transfer the call to an agent

              Call the agent

              This code begins the process of transferring the call to our agent.

              By passing a url to the <Number> noun, we are telling Twilio to make a POST request to the agents/screen-call route after the agent has picked up but before connecting the two parties.

              Essentially, we are telling Twilio to execute some TwiML that only the agent will hear.

                    
                    
                    
                    
                    src/main/java/com/twilio/ivrrecording/servlet/extension/ConnectServlet.java

                    Connect the call to an Agent

                    src/main/java/com/twilio/ivrrecording/servlet/extension/ConnectServlet.java

                    Our agent can now be called, but how does our agent interact with this feature? Let's dig into what is happening in the agent's screening call.

                    See how the agent screens our call

                    The agent screens the call

                    When our agent picks up the phone, we use a <Gather> verb to ask them if they want to accept the call.

                    If the agent responds by entering any digit, the response will be processed by our agents/message route. This will <Say> a quick message and continue with the original <Dial> command to connect the two parties.

                          
                          
                          
                          
                          src/main/java/com/twilio/ivrrecording/servlet/agent/ScreenCallServlet.java

                          Allow agent to screen a call, accept, and connect to the caller

                          src/main/java/com/twilio/ivrrecording/servlet/agent/ScreenCallServlet.java

                          Now our agent can interact with the call, but what if our agent is currently out? In these cases it's helpful to have voicemail set up.

                          Set up the agent's voicemail

                          Send the caller to voicemail

                          When Twilio makes a request to our Call action method, it will pass a DialCallStatus argument to tell us the call status. If the status is "completed", we hang up. Otherwise, we need to <Say> a quick prompt and then <Record> a voicemail from the alien caller.

                          We also specify an action for <Record>. This route will be called after the call and recording have finished. The route will say "Goodbye" and then <Hangup>.

                                
                                
                                
                                
                                src/main/java/com/twilio/ivrrecording/servlet/agent/CallServlet.java

                                Redirect a call to voicemail and end the call

                                src/main/java/com/twilio/ivrrecording/servlet/agent/CallServlet.java

                                Now let's take a step back to see how to actually record the call.

                                Record the caller

                                Record the caller

                                When we tell Twilio to record, we have a few options we can pass to the <Record> verb.

                                Here we instruct <Record> to stop the recording at 20 seconds, to transcribe the call, and to send the transcription to the agent when it's complete.

                                Notice that we redirect to a URL that is specific to this agent. This is a convenient way to specify which agent was called to produce the voice message. This way we can also save the associated agent together with the voicemail.

                                      
                                      
                                      
                                      
                                      src/main/java/com/twilio/ivrrecording/servlet/agent/CallServlet.java

                                      Record a call

                                      src/main/java/com/twilio/ivrrecording/servlet/agent/CallServlet.java

                                      Legal implications of call recording

                                      If you choose to record voice or video calls, you need to comply with certain laws and regulations, including those regarding obtaining consent to record (such as California’s Invasion of Privacy Act and similar laws in other jurisdictions). Additional information on the legal implications of call recording can be found here.



                                      Notice: Twilio recommends that you consult with your legal counsel to make sure that you are complying with all applicable laws in connection with communications you record or store using Twilio.

                                      Finally, we will see how to view an agent's voicemail.

                                      View an agent's voicemail

                                      Viewing an agent's voicemail

                                      Once we look up the Agent, all we need to do is display their recordings. We bind the agent, along with their recordings, to a View.

                                      It is possible to look up recordings via the Twilio REST API, but since we have all of the data we need in the transcribeCallback request, we can easily store it ourselves and save a roundtrip.

                                            
                                            
                                            
                                            
                                            src/main/java/com/twilio/ivrrecording/servlet/agent/AgentsServlet.java

                                            Get the agent index page

                                            src/main/java/com/twilio/ivrrecording/servlet/agent/AgentsServlet.java

                                            That's it! We've just implemented an IVR with real Agents, call screening and voicemail.

                                            What's next?

                                            Where to Next?

                                            If you're a Java developer working with Twilio, you might want to check out these other tutorials.

                                            Part 1 of this Tutorial: ET Phone Home Service - IVR Phone Trees

                                            Increase your rate of response by automating the workflows that are key to your business.

                                            SMS and MMS Notifications

                                            Send out SMS (and MMS) notifications to a list of server administrators.

                                            Did this Help?

                                            Thanks for checking out this tutorial! If you have any feedback to share with us, we'd love to hear it. Connect with us on Twitter and let us know what you build!

                                            Mario Celi Agustin Camino Andrew Baker Paul Kamp Kat King
                                            Rate this page:

                                            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.