Skip to contentSkip to navigationSkip to topbar
Rate this page:

Create Tasks from Phone Calls using TwiML: Create a TaskRouter Task using <Enqueue>


In the previous step we received a call to a Twilio phone number and prompted the caller to select a preferred language. But when the caller selected their language, we weren't ready to handle that input. Let's fix that. Create a new endpoint called 'enqueue_call' and add the following code.

server.rb


_71
require 'rubygems'
_71
require 'twilio-ruby'
_71
require 'sinatra'
_71
require 'json'
_71
_71
set :port, 8080
_71
_71
# Get your Account Sid and Auth Token from twilio.com/user/account
_71
account_sid = 'AC99ba7b61fbdb6c039698505dea5f044c'
_71
auth_token = '{{ auth_token }}'
_71
workspace_sid = '{{ workspace_sid }}'
_71
workflow_sid = '{{ workflow_sid }}'
_71
_71
client = Twilio::REST::Client.new(account_sid, auth_token)
_71
_71
post '/assignment_callback' do
_71
# Respond to assignment callbacks with accept instruction
_71
content_type :json
_71
{"instruction": "accept"}.to_json
_71
end
_71
_71
get '/create-task' do
_71
# Create a task
_71
task = client.taskrouter.workspaces(workspace_sid)
_71
.tasks
_71
.create(
_71
attributes: {
_71
'selected_language' => 'es'
_71
}.to_json,
_71
workflow_sid: workflow_sid
_71
)
_71
task.attributes
_71
end
_71
_71
get '/accept_reservation' do
_71
# Accept a Reservation
_71
task_sid = params[:task_sid]
_71
reservation_sid = params[:reservation_sid]
_71
_71
reservation = client.taskrouter.workspaces(workspace_sid)
_71
.tasks(task_sid)
_71
.reservations(reservation_sid)
_71
.update(reservation_status: 'accepted')
_71
reservation.worker_name
_71
end
_71
_71
get '/incoming_call' do
_71
Twilio::TwiML::VoiceResponse.new do |r|
_71
r.gather(action: '/enqueue_call', method: 'POST', timeout: 5, num_digits: 1) do |gather|
_71
gather.say(message: 'Para Español oprime el uno.', language: 'es')
_71
gather.say(message: 'For English, please hold or press two.', language: 'en')
_71
end
_71
end.to_s
_71
end
_71
_71
post '/enqueue_call' do
_71
digit_pressed = params[:Digits]
_71
if digit_pressed == 1
_71
language = "es"
_71
else
_71
language = "en"
_71
end
_71
_71
attributes = '{"selected_language":"'+language+'"}'
_71
_71
Twilio::TwiML::VoiceResponse.new do |r|
_71
r.enqueue workflowSid: workflow_sid do |e|
_71
e.task attributes
_71
end
_71
end.to_s
_71
end

Now call your Twilio phone number. When prompted, press one for Spanish. You should hear Twilio's default <Queue> hold music. Congratulations! You just added yourself to the 'Customer Care Requests - Spanish' Task Queue based on your selected language. To clarify how exactly this happened, look more closely at what is returned from enqueue_call to Twilio when our caller presses one:

enqueue_call - TwiML Output


_10
<?xml version="1.0" encoding="UTF-8"?>
_10
<Response>
_10
<Enqueue workflowSid="WW0123401234...">
_10
<Task>{"selected_language": "es"}</Task>
_10
</Enqueue>
_10
</Response>

Just like when we created a Task using the TaskRouter REST API (via curl), a Task has been created with an attribute field "selected_language" of value "es". This instructs the Workflow to add the Task to the 'Customer Care Requests - Spanish' TaskQueue based on the Routing Configurations we defined when we set up our Workflow. TaskRouter then starts monitoring for an available Worker to handle the Task.

Looking in the TaskRouter web portal, you will see the newly created Task in the Tasks section, and if you make an eligible Worker available, you should see them assigned to handle the Task. However, we don't yet have a way to bridge the caller to the Worker when the Worker becomes available.

In the next section, we'll use a special Assignment Instruction to easily dequeue the call and route it to an eligible Worker - our good friend Alice. For now, you can hang up the call on hold.

Next: Dequeue a Call to a Worker >>


Rate this page: