Initial Setup Properties |
||
Runtime Properties |
||
Greetings |
||
Methods |
||
Events |
||
Overview
The CallQueue control implements call routing and queuing functionality and is used to provide custom ACD capability to an application. The function of the control is broken into two sections which operate in tandem:
-
The queuing function provides a facility to hold a call until an agent becomes free
-
The routing function provides the means to transfer an inbound call to an available agent.
CallQueue supports automatic transfer of calls on analog, T1-Robbed Bit, and TAPI lines. Other digital line protocols including ISDN and SIP may not be used because of lack of the single channel transfer capability.
The CallQueue control can also be used for manual transfer mode (AutoTransfer = false and CallMonitorMode = false). In manual mode, when an available Agent is matched to a call, it will exit the CallQueue control and go to the next VBVoice control. In this situation, a separate Dial Control could be used to complete the call.
Call Routing
The routing component provides three built-in routing algorithms to select the next available agent to which to attempt the call transfer. This feature uses TAPI line monitoring in conjunction with a TAPI enabled PBX (if available) to determine the availability of agent telephone extensions. This line monitoring is an optimization to ensure that transfers are not attempted to busy agents, thus speeding the routing process.
If TAPI line monitoring is not available, transfers are attempted to each agent in turn until the transfer succeeds. CallQueue also supports the MSI Station Set card from Dialogic which allows agents to use standard analog sets connected directly to the VBVoice PC, without a PBX.
Modes of Operation
While a call is waiting in the queue, the CallQueue control offers three modes of operation:
-
Play music during wait: VBVoice plays a greeting music to the caller during the waiting period.
-
Silence during wait: VBVoice remains silent during wait.
-
Do not wait: VBVoice exits through the Timeout node.
During the playback of the onhold music, The CallQueue control will play a short reminder to a caller and will repeat this procedure until WaitTimeout is reached or until the call is transferred to an agent successfully.
When the caller presses the terminate key, the call will be forced out of the control but the call will stay in the same position in the queue. However, the call will not be reconnected to an AgentX until it re-enters the control through the second input. The terminate key is set through the property page.
The default music and reminder greetings are configurable using the built-in greeting properties MusicGreeting and ReminderGreeting.
Output Nodes
Xfer
A call is transferred to an agent successfully. The channel becomes available for the next call.
Timeout
A call times out while waiting for an available agent. A call will not be in queue when it exits the control at this node.
Digits
If a termination digit is entered in the main property page, this node will appear in the control. When a caller presses the specified key, the call will exit the control from this node, but the call will still be in queue.
RemoveCallFromQueueOnDTMF
If this setting is enabled, when a call exits the CallQueue from the Digits control, it will lose its position in the queue when it re-enters the control and go to the end of the queue, otherwise, it will retain it when it returns.
If the call is transferred, or the caller hangs up while it is out of the control, it is removed from the queue.
Regardless of whether this setting is enabled, a call that is out of the CallQueue control cannot be automatically transferred; if it reaches the top priority while outside of the control, the next call with highest priority will be transferred. Manual transfers are still available in this scenario.
When a call re-enters the CallQueue control with this setting enabled, it is handled as if it had never been there before. Therefore, it is suggested that the callflow connects the call from the Enter node, instead of the Re-queue node, to make this idea clear visually.
Routing Methods
The active routing method is defined by the RouteMethod property, which can be one of the following routing types:
0. None |
When none is selected in
the routing method, all call routing is under program control. |
1. Sequential |
The CallQueue maintains a
list of agent addresses to which calls may be routed. |
2. Least-Recent |
The Least-Recent algorithm
maintains a simple queue of agents. |
3. Balanced |
The Balanced algorithm
maintains a priority queue of agents, with the priority based on
number of calls completed. |
Initial Setup Properties
AgentTimeout
(Long)
The number of seconds that an agent is given to answer a transferred call. If the call has not been transferred at this time, the call exits the CallQueue control via the Timeout node.
Agent Timeout with Station Set Support: An AgentTimeout occurs when agents are available but do not answer.
AutoTransferMode
(Boolean)
True (default): The call will be transferred to the agent before exiting the CallQueue control.
False: The queued calls will not be transferred when an agent becomes available, but instead the call will exit the CallQueue and the application can perform the transfer (Dial control) or do whatever custom behavior is needed. (This requires that the CallMonitorMode = False.)
CallInterval
(Integer)
The number of seconds to wait to answer a next call after an agent completes a call before that agent can be scheduled for another call.
CallMonitorMode
(Boolean)
Indicates the work mode of call monitoring.
True (default): automatic call monitoring
False: manual call monitoring - allows users to set an agent to be available by using:
AgentAvailable(Address as String) = True/False.
Also, the list of Agents can be maintained using methods:
AddAddress(Address as String)
RemoveAddress(Address as String)
ClearDigits
(Boolean)
If set to true, any DTMF digits in the buffer will bee discarded before entering the control. This setting should be True for normal operation.
Conditions
(Object)
Not used in this control.
DisconnectControl
(String)
See Responding to Caller Hangup.
GlobalToneControl
(String)
See Global Tone Handling.
HelpDigitControl
(String)
See Help Digit Control.
InvalidErrorControl
(String)
See Invalid Digit, No Digits, and Silence Timeout.
NoDigitsErrorControl
See Invalid Digit, No Digits, and Silence Timeout.
ReminderInterval
(Long)
Set how often the reminder greeting is played (in seconds). After the silence or music greeting terminates, the ReminderInterval is checked. If the time period is greater than this time, the ReminderGreeting is played.
ReminderInterval with Station Set Support: ReminderInterval happens when an AgentTimeout (no agents available) occurs. The ReminderInterval is followed by the Reminder Greeting.
RouteMethod
(Integer)
The selected routing algorithm. The default value is 3 for Balanced.
0: None
1: Sequential
2: Least-Recent
3: Balanced
See Routing Methods.
TermDtmf
(Integer)
The digit that will be used to allow exit of the control while maintaining position in the queue.
WaitTimeout
(Long)
The maximum time (in seconds) that a call will spend in the queue. After the timeout, the call will exit from the Timeout node.
WaitType
(Long)
Treatment of a call while it is queued:
-
Put on hold during wait (0)
-
Play music during wait (1) - default
-
Silence during wait (2)
-
Do not wait, exit from Timeout node (3)
WaitType with Station Set Support: Setting WaitType to Music may not be heard if agents are available since the call may be transferred before music is played. Music will be heard for the ReminderInterval period of time if no agents are available, followed by the Reminder Greeting. This scenario is repeated until Wait timeout is reached, an agent answers or the user exits.
Note: Put on hold during wait only works with some TAPI drivers.
Runtime Properties
AddressActive
(Address As String) (Boolean)
Returns true if the agent at the specified address is unavailable (active).
AddressActiveCount
(Long)
Gives the number of addresses (agents) that are currently busy.
AddressCount
(Integer)
Gives the number of addresses currently being watched.
AddressIdleCount
(Long)
Gives the number of addresses currently not in use.
AddressIndex (read-only)
(Address As String) (Long)
The numerical index of the address in the agent list.
AddressName (read-only)
(Index As Long) (String)
The address string (i.e. phone number) of an address added to the agent list referenced by the index of the address in the agent list). The index starts at 0.
AgentAvailable
(Address As String) (Boolean)
The property can set or get status of an agent with the specified address in manual mode of call monitor.
If true, the agent is free; if false, the agent is busy.
CallPosition
(Channel As Integer) (Integer)
Returns the position of the call within the queue. Can be used for greetings such as: You are number X in queue. Returns -1 if there is no call in the channel.
NOTE: When the call is in the Enter or the EnterB events, the call does not have a call position yet. When the CallQueued event is fired, this property has a valid value.
CallTime
(Channel As Integer) (Long)
Returns the time (in seconds) since the call entered the CallQueue control.
ChannelPriority
(Channel As Integer) (Integer)
Set or get the channel priority. A call will be routed to an available agent first if it is in a channel with the high priority. The default is 5. A lower number means high priority.
GotoNode
(Integer)
This property will transfer a call to another control. See Routing Methods.
IsTransferring
(Channel As Integer) (Boolean)
If true, indicates that a call in the channel is in being transferred state.
QueueCount
(Integer)
Returns the total number of channels queued for routing.
NOTE: When Enter event is fired, the call is not yet in the queue. When the CallQueued event is fired, the call is already queued and this property includes the current call.
QueuedChannel
(pos As Integer) (Integer)
The channel number of the call at position pos in the queue. If the number is negative, it indicates that the associated channel is not in the control. pos is from 0 to QueueCount - 1.
Methods
AddAddress
AddAddress (Address As String)
Adds the specified agent address to the list of agent addresses being monitored.
RemoveAddress
RemoveAddress (Address As String)
Remove the specified agent address from the available list and stop monitoring.
SelectFreeAgent
SelectFreeAgent (ByVal IdleTime) (String)
This method is used to check if there is a free agent to answer a call when a call enters a queue, if you choose not to use the built-in routing algorithms. If the operation succeeds it returns an agent address which has been idle for more than the specified time. Otherwise a trappable error occurs.
TakeCall
This method allows the programmer to override the graphical connections and transfer a call to any other control. See TakeCall.
Transfer
Transfer (Channel As Integer, Address As String, Timeout As Long)
Transfer the call on the specified channel to the agent address. After the specified timeout, the transfer will fail and the call will remain queued. This method is used by an application when built in routing algorithms are not used and custom routing is implemented.
Greetings
EntryGreeting
The greeting that is played when the call enters the control.
MusicGreeting
Greeting that is played when Music during wait is selected. Default greeting is MUSIC.WAV.
ReminderGreeting
Greeting that is played to callers waiting in queue at intervals defined by ReminderInterval. Default greeting is MUSIC.WAV.
Events
AddressActive
AddressActive(Address As String, CallerID As String)
Fires when an agent becomes unavailable: i.e. picked up, or ringing.
AddressConnected
AddressConnected (Address As String, callerID As String)
Fires when an agent answers a call. CallerID is the extension number. A calls route can be traced by using CallComplete and AddressConnected events when an agent transfers a call to another agent. This event happens before TransferSuccess.
AddressIdle
AddressIdle (address As String)
Fires when an AgentX is no longer in use and is ready to accept a call.
CallComplete
CallComplete (Address As String, callerID as String
Fires when an agent hangs up his/her phone. CallerID is an extension number where a call is transferred to the address.
CallQueued
CallQueued (Channel As Integer)
Fires when a call is successfully put into the queue.
CallRouted
CallRouted (Channel As Integer)
Fires when a call has been transferred to an agent. At this point it is not known if the agent has answered the call. This event can be used to display or track agent activity. Completion of transfer is signalled by the TransferSuccess event.
CallTimeout
CallTimeout (Channel As Integer)
Fires when the maximum time for call has elapsed, as defined by the WaitTimeout property, if the call has not yet been transferred to an agent. The event will fire even if the call has exited the control using the terminate digit.
Disconnect
Disconnect (Channel As Integer, Reason As Integer)
Fires when disconnect notification received.
Enter
Enter (Channel As Integer, Greeting As Object)
Fires upon entering the control, but before playing the Entry greeting.
Exit
Exit (Channel As Integer, Node As Integer)
Fires as the call-flow exits the control.
PhraseError
See PhraseError Event.
PlayRequest
See PlayRequest Event.
TransferFail
TransferFail (Channel As Integer, address As String, Reason As Integer)
Received when an error is encountered transferring. The reason code can be one of the following:
1: Indicates that an agent is BUSY
2: Indicates that there is NORING in an address
0: Other reason
TransferSuccess
TransferSuccess (Channel As Integer, Address As String)
Fires when an attempt to transfer the caller from the queue to the agent succeeds.
TransferTimeout
TransferTimeout (Channel As Integer, Address As String)
Fires when an attempt to transfer the caller from the queue to the agent does not complete due to time out (like ring no answer).
VoiceError
See VoiceError Event.
Sequence of Events During a Call's Life
Event Name |
Description |
Enter |
A call enters CallQueue Control. |
CallQueued |
A call is queued. |
CallRouted |
An available agent has been found for a call, it is ready to be transferred. |
AddressActive |
An agent is ringing. |
AddressConnected |
A call has been answered. |
TransferSuccess |
TransferSuccess means a call is answered by an agent. Exit the control after this event. |
TransferTimeout |
A transferred call is not answered in the specified time, the call is still in queue. |
TransferFail |
Transferring failed, the call is still in queue. |
CallComplete |
A call is complete. A call is terminated by the caller or agent. |
AddressIdle |
An agent becomes free again after CallInterval seconds. |
Setup Property Page
Wait Type
(WaitType property)
-
Play music during wait: CallQueue plays a greeting music to the caller during the waiting period.
-
Silence during wait: CallQueue remains silent during the waiting period.
-
Do not wait: CallQueue exits Timeout node.
Reminder Interval
(ReminderInterval property)
The time (in seconds) between playing of the Reminder greeting to callers in queue.
Wait Timeout
The maximum time (in seconds) that a call can be in queue.
Always Terminate On...
TermDtmf property
The digit that can be used to exit the control.
Monitor Type
Sets the monitor type selection. The CallQueue control can monitor TAPI lines and locally attached Station sets (see Station Set Support).
-
TAPI monitor
-
Dialogic MSI Monitor
You can select the monitor type at design time. One application can have more than one CallQueue control and different CallQueue controls can select different call monitors. VBVoice will launch associated call monitors at run time depending on the selection.
Routing Property Page
Routing Method
(RouteMethod property)
Specifies how agents are selected. See Routing Methods.
Agent Timeout
(AgentTimeout property)
The seconds to wait while attempting to connect to an agent.
Call Interval
(CallInterval property)
The seconds to wait to answer a next call after an agent has completed a call.
Agent Property Page
On a TAPI enabled PBX, this page can be used to pre-select the agent extensions (represented by TAPI lines) to be monitored and transferred to by the callqueue. If the switch configuration is now known at design time, agent extension can also be added to the queue programmatically using the AddAddress and RemoveAddress methods. This feature allows you to build custom user interfaces for the system administrator to re-configure CallQueue at runtime (i.e. after the system has been deployed).
CallQueue Examples
See the Examples sub-directory, under CallQueue. Each CallQueue example has a readme.txt file.