Voice contact center setup
This article will help you to create a simple voice contact center with SmartQueue (ACDv2) technology.
Set up agents
Agents are Voximplant users who process calls and IM chats. To create your agents, first create an application, and then create users according to this guide.
You need at least one agent to process a queue.
Set up agents' skills
You can specify skills for different agents and distribute tasks only to agents who posess a certain skill.
For example, you have a skill called "Knows Italian", and attach this skill to all the agents that know the Italian language, and set up skill levels for each agent according to their language level.
To read more about skills and learn how to use them, see this article.
Set up queues
You can create one or more queues with different settings and bind specific agents to specific queues.
You can customize a queue's name and description (up to 200 characters), agent selection strategy (distribute the task to the most/least qualified agent or to an agent who waited the most), task selection strategy (first goes an task with maximum priority or waiting time), maximum queue size and maximum waiting time.
Create a queue and bind agents
To create a queue, use the SQAddQueue method. Refer to the method's description to learn about the input arguments. Here is a simple code on example how to create a queue:
As a result of the request, you get the new queue's ID. You need it later.
Here and below you can specify the application's ID or the application's name. You do not need to provide both application_id and application_name parameters.
To bind an agent to a queue, use the SQBindAgent method. You need to specify the queue's ID or name and the agent(s) ID or name. You can bind several agents divided by semicolon:
Here and below you can specify the queue's ID or the queue's name. You do not need to provide both sq_queue_id and sq_queue_name parameters.
You can bind up to 5 different queues to an agent. To bind multiple queues to an agent, pass them to the sq_queue_id or sq_queue_name parameter of the SQBindAgent method divided by semicolon (;), or pass the all
keyword to bind all the queues to the agent.
If you want to bind more than 5 queues to an agent, please contact support.
Modify or delete an existing queue
You can modify all the queue's settings via the SQSetQueueInfo method. Refer to the method's description to learn about the input arguments. Here is a code example on how to change a queue's name:
To delete a queue, use the SQDelQueue method. Here is a code example on how to delete a queue:
Set up an agent's workspace
An agent's workspace is a software environment in which an agent makes or receives calls. You can use any SDK to create an agent's workplace. Read more about different SDKs and their initialization here.
In this article there is an example on how to use Web SDK.
When you initialize the SDK, pass the queueType
parameter with SmartQueue type.
Then you need to implement all the necessary instruments for your agent to use. This depends on your case.
As a minimum setup for an audio calls agent, you need:
A tool to accept or decline a call
A tool to change the agent's status
To learn how to process an inbound call, see this guide. As a minimum, you need to implement buttons to answer a call and decline a call.
The most important part here is the agent's status. To make and accept calls, the agent should have the tool to change the status to "Ready".
What is a SmartQueue status
SmartQueue distributes the calls according to the agents' statuses. Here are all possible statuses:
Online — the agent is logged into the system. Yet the agent cannot receive inbound tasks.
Offline — the agent is not logged into the system.
Ready — the agent can receive inbound tasks, such as calls and IMs. You need to set this status manually.
Dialing — the agent has an inbound call, which he has not yet answered or declined.
InService — the agent has an active call.
AfterService — the agent has finished an task but has not switched to the Ready status.
Banned — the agent has intentionally declined or ignored an inbound call from a queue within the specified timeout. You may implement your own logic how to return to the Online status.
DND — Do not disturb. Technically this status is identical to Online, but you may need to track the time spent by an agent in this status to know how much time the agent spends on breaks/lunches and so on.
Custom — You can set up up to 10 custom statuses and give them customized names. The custom statuses work in the DND mode. You can use custom statuses to provide more detailed agent statistics and time tracking.
The statuses change in a special order that cannot be changed. For example, you cannot skip AfterService status after the call or skip Ready status to accept a call.
On the following chart, you can find all the status transitions possible. Red lines mean that status change happens automatically and you cannot choose the status manually.

How to set an agent's status
To set a status, use the setOperatorACDStatus method. You can make a function that accepts one of the possible statuses and changes it. Here is an example for Web SDK:
For example, you can create a dropdown list on your webpage, and bind the setStatus function from the code above to a button.
Custom statuses
You can set up up to 10 custom statuses and give them customized names. The custom statuses work in the DND mode. You can use custom statuses to provide more detailed agent statistics and time tracking.
You can appoint a custom name to the following statuses: CUSTOM_1
, CUSTOM_2
, CUSTOM_3
, CUSTOM_4
, CUSTOM_5
, CUSTOM_6
, CUSTOM_7
, CUSTOM_8
, CUSTOM_9
, CUSTOM_10
.
To appoint a name to a custom status, use the SQ_SetAgentCustomStatusMapping method. Specify the custom status in the sq_status_name field and the customized name in the custom_status_name field. You need to specify your account ID in the account_id field, your API key in the api_key field, and your application ID in the application_id field.
To check the currently appointed names, use the SQ_GetAgentCustomStatusMapping method. You need to specify your account ID in the account_id field, your API key in the api_key field, and your application ID in the application_id field.
To delete a currently appointed custom status name, use the SQ_DeleteAgentCustomStatusMapping method. You need to specify your account ID in the account_id field, your API key in the api_key field, and your application ID in the application_id field.
To assign a custom status to an agent, pass the custom status number to the setOperatorACDStatus method. Do not pass the customized name to this method.
Set up a VoxEngine scenario
To find more information about VoxEngine scenarios and how to create them, see this guide.
For a contact center, the main goal in the VoxEngine scenario is to process inbound or outbound tasks and put them in a SmartQueue. You can set up different routing rules to put different calls or implement your own logic how you want to distribute tasks between queues.
If you want to process inbound calls, you need to buy a phone number and attach it to your application. You can find more information on how to do this in this guide.
To put an task in a queue, use the enqueueTask event.
If you process inbound calls, implement your logic in the CallAlerting event and put the call in the queue in this event.
If you process outbound calls, implement your call in the Started event and put the call in the queue after the recipient answers the call.
In this scenario example, you can see how to enqueue an inbound/outbound call into a SmartQueue:
After you implement all of the above, you should have a fully working queue for processing inbound and outbound tasks and an agent's workspace where your agent can change the status and accept calls.