CallQueue

This control has no features applicable to VisualConnect application development

Initial Setup Properties

AgentTimeout

AutoTransfer

CallInterval

CallMonitorMode

ClearDigits

Conditions

DisconnectControl

GlobalToneControl

HelpDigitControl

InvalidErrorControl

NoDigitsErrorControl

ReminderInterval

RouteMethod

TermDtmf

WaitTimeout

WaitType

Runtime Properties

AddressActiveCount

AddressCount

AddressIdleCount

AddressIndex

AddressName

CallPosition

CallTime

ChannelPriority

GotoNode

IsTransferring

QueuedChannel

QueueCount

Greetings

EntryGreeting

MusicGreeting

ReminderGreeting

Methods

AddAddress

RemoveAddress

TakeCall

Transfer

Events

AddressActive

AddressConnected

AddressIdle

CallComplete

CallQueued

CallRouted

CallTimeout

Disconnect

Enter, EnterB

Exit

PhraseError

PlayRequest

TransferFail

TransferSuccess

TransferTimeout

VoiceError

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:

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:

  1. Play music during wait: VBVoice plays a greeting music to the caller during the waiting period.

  2. Silence during wait: VBVoice remains silent during wait.

  3. 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.
Queue statistics and agent availability are provided to the program via methods and properties of the CallQueue control.
The Transfer method is used to initiate a transfer attempt to the selected agent.
Users should add the processing of call transfer in AddressIdle or CallQueued event.

1. Sequential

The CallQueue maintains a list of agent addresses to which calls may be routed.
The Sequential algorithm maintains a single pointer into a circular list.
Each routing attempt moves the pointer to the next agent in sequence.

2. Least-Recent

The Least-Recent algorithm maintains a simple queue of agents.
When a call is successfully transferred to an agent, the agent is moved to the back of the queue.
During a routing attempt, the queue is traversed from front to back. Agents who have completed calls most recently will be selected last.

3. Balanced

The Balanced algorithm maintains a priority queue of agents, with the priority based on number of calls completed.
The agent with the least number of calls completed is selected for routing first.
During any given routing attempt, the priority queue will be traversed from least number of calls to most calls until the call is successfully routed. The objective is to give lowest priority to the agent who has completed the most calls in an attempt to balance the workload between agents.

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:

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)

  1. Play music during wait: CallQueue plays a greeting music to the caller during the waiting period.

  2. Silence during wait: CallQueue remains silent during the waiting period.

  3. 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

WaitTimeout

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).

  1. TAPI monitor

  2. 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.