Skip to contentSkip to navigationSkip to topbar
Rate this page:
On this page

Creating Tasks and Accepting Reservations: Create a Task using the REST API


Recall the TaskRouter Task lifecycle:

Task Created → eligible Worker becomes available → Worker reserved → Reservation accepted → Task assigned to Worker.

Before we create our first Task, make sure that our Worker Alice is in a non-available Activity state. Bob's Activity state won't matter right now, as we will create a Spanish language Task that he is not eligible to handle.

With your Workspace open in the TaskRouter web portal(link takes you to an external page), click 'Workers' then click to edit Alice and set her Activity to 'Offline'. Your Workers should look like this:

Ensure Alice is Offline.

To simulate reality, we'll create a Task using the REST API rather than the web portal. We'll add on to our TwilioTaskRouterServlet to create a task with our web server. Replace the {} with your Twilio AccountSid, Twilio AuthToken, WorkspaceSid, and WorkflowSid in your web.xml.

Download and extract Twilio's Java helper library(link takes you to an external page). Install the latest jar with dependencies into your web application library directory (for Tomcat this is taskrouter/WEB-INF/lib).


TwilioTaskRouterServlet.java

twiliotaskrouterservletjava page anchor

_55
import java.io.IOException;
_55
_55
import javax.servlet.http.HttpServlet;
_55
import javax.servlet.http.HttpServletRequest;
_55
import javax.servlet.http.HttpServletResponse;
_55
_55
import com.twilio.Twilio;
_55
import com.twilio.rest.taskrouter.v1.workspace.Task;
_55
_55
_55
public class TwilioTaskRouterServlet extends HttpServlet {
_55
private String accountSid;
_55
private String authToken;
_55
private String workspaceSid;
_55
private String workflowSid;
_55
_55
@Override
_55
public void init() {
_55
accountSid = this.getServletConfig().getInitParameter("AccountSid");
_55
authToken = this.getServletConfig().getInitParameter("AuthToken");
_55
workspaceSid = this.getServletConfig().getInitParameter("WorkspaceSid");
_55
workflowSid = this.getServletConfig().getInitParameter("WorkflowSid");
_55
_55
Twilio.init(accountSid, authToken);
_55
}
_55
_55
// service() responds to both GET and POST requests.
_55
// You can also use doGet() or doPost()
_55
@Override
_55
public void service(final HttpServletRequest request, final HttpServletResponse response)
_55
throws IOException {
_55
if (request.getPathInfo() == null || request.getPathInfo().isEmpty()) {
_55
return;
_55
}
_55
_55
if (request.getPathInfo().equals("/assignment_callback")) {
_55
response.setContentType("application/json");
_55
response.getWriter().print("{}");
_55
} else if (request.getPathInfo().equals("/create_task")) {
_55
response.setContentType("application/json");
_55
response.getWriter().print(createTask());
_55
}
_55
}
_55
_55
public String createTask() {
_55
String attributes = "{\"selected_language\":\"es\"}";
_55
_55
Task task = Task.creator("WSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
_55
.setAttributes("{\"type\":\"support\"}")
_55
.setWorkflowSid("WWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
_55
.create();
_55
_55
return "{\"task_sid\":\"" + task.getSid() + "\"}";
_55
}
_55
}


taskrouter/WEB-INF/web.xml

taskrouterweb-infwebxml page anchor

_35
<?xml version="1.0" encoding="ISO-8859-1"?>
_35
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
_35
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
_35
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
_35
version="2.4">
_35
_35
<display-name>Twilio TaskRouter App</display-name>
_35
_35
<servlet>
_35
<servlet-name>TwilioTaskRouterServlet</servlet-name>
_35
<servlet-class>com.twilio.TwilioTaskRouterServlet</servlet-class>
_35
<init-param>
_35
<param-name>AccountSid</param-name>
_35
<param-value>{{ account_sid }}</param-value>
_35
</init-param>
_35
<init-param>
_35
<param-name>AuthToken</param-name>
_35
<param-value>{{ auth_token }}</param-value>
_35
</init-param>
_35
<init-param>
_35
<param-name>WorkspaceSid</param-name>
_35
<param-value>{{ workspace_sid }}</param-value>
_35
</init-param>
_35
<init-param>
_35
<param-name>WorkflowSid</param-name>
_35
<param-value>{{ workflow_sid }}</param-value>
_35
</init-param>
_35
</servlet>
_35
_35
<servlet-mapping>
_35
<servlet-name>TwilioTaskRouterServlet</servlet-name>
_35
<url-pattern>/taskrouter/*</url-pattern>
_35
</servlet-mapping>
_35
_35
</web-app>

Alternatively, we can also create a Task using the command line utility curl, which should exist on any Mac or Linux workstation. Again, remember to replace the {} with your matching credentials and Sids, then execute the following command at your terminal:


_10
curl https://taskrouter.twilio.com/v1/Workspaces/{WorkspaceSid}/Tasks \
_10
--data-urlencode Attributes='{"selected_language": "es"}' \
_10
-d WorkflowSid={WorkflowSid} \
_10
-u {AccountSid}:{AuthToken}

You can find your Twilio AccountSid and AuthToken on the TaskRouter Getting Started page(link takes you to an external page) by clicking 'show API credentials'.

If you don't have curl, you can run this request using an HTTP test tool or using the Task creation dialog in the TaskRouter web portal: with your Workspace open, click 'Tasks' then 'Create Task'.

To see our newly created Task in the TaskRouter web portal, with your Workspace open, click 'Tasks' in the main navigation. Notice that the Task has been added to the "Customer Care Requests - Spanish" Task Queue based on the Attributes we provided in the curl request. The Assignment Status is 'pending' because there is no available Worker that matches the Task Queue:

Task in the TaskRouter web portal.

Make an Eligible Worker Available

make-an-eligible-worker-available page anchor

Look again at the TaskRouter Task lifecycle:

Task Created → eligible Worker becomes available → Worker reserved → Reservation accepted → Task assigned to Worker.

The first stage - 'Task Created' - is complete. To trigger an automatic Task Reservation, the next step is to bring en eligible Worker (in this case Alice) online.

With your Workspace open in the TaskRouter web portal, click 'Workers', then click to edit Alice and set her Activity to 'Idle':

Set Alice to Idle.

When you hit save, Twilio will create a Reservation between Alice and our Task and you will receive a Webhook request at the Assignment Callback URL that we set up in the previous step. If you're using ngrok, open http://localhost:4040 in your web browser to see a detailed log of the request that Twilio made to your server, including all the parameters that your server might use to determine whether to accept a Reservation:

ngrok Request Log.

We're now one step further along the Task Reservation lifecycle:

Task Created → eligible Worker becomes available → Worker reserved → Reservation accepted → Task assigned to Worker.

Time to accept the Reservation.

Next: Accept a Reservation with the REST API »


Rate this page: