The processor bridge creates a channel destination when a channel is added to a channel group. The destination is used to monitor and control the channel’s CTI state. The generic channel destination is a template for all channel types. Each channel type will have additional messages that can be carried by their respective channel destination types.
Activate/Deactivate channel
Go Ready/Not Ready on channel
Receive notifications of new inbound interactions
As with the processor control destination, the channel destination follows the same lifecycle of setup, initialization, and tear down. The following figure depicts the initialization phase of a channel destination:
It is important to note that with all CTI resource related communication destinations, no event messages should be raised prior to receiving and responding to the initialization query message.
Queries & Responses
This section defines the possible query messages the processor bridge may send to the channel destination and the format of any expected result messages.
channel.query.init
This query retrieves information about the channel’s current state within the CTI. The response to this query carries a JSON payload describing the current state of the channel.
Query Headers
Key | Value | Notes |
---|---|---|
type | cti.query | Query messages will always have this value |
name | channel.query.init | Name of this query type |
target | String | See generating message targets above |
requestId | {GUID} | Unique identifier for the orginal query |
Query Properties
Key | Value | Notes |
---|---|---|
None |
|
|
Response Headers
Key | Value | Notes |
---|---|---|
type | cti.response | Response messages will always have this value |
name | channel.query.init | Name of the original query |
result | SUCCESS | FAILURE | Result of the query |
errorMessage | String | A human readable description of the error that caused this query to fail. This message will be logged and may be displayed to the agent. |
target | String | See generating message targets above |
requestId | {GUID} | Unique identifier for the orginal query |
Response JSON
Below is an example of the JSON returned in the response message:
{
"agent-id" : "CURRENT_AGENT_ID",
"agent-status" : "CURRENT_AGENT_STATUS",
"agent-status-reason-code" : "STATUS_REASON_CODE",
"agent-status-reason-desc" : "STATUS_REASON_DESC"
"interactions" :
[
{
"NATIVE_ID",
…
}
],
"extensions":
{
…
}
}If an agent is logged into the channel, the agent-id attribute should contain the CTI id for that agent. Otherwise, the agent-id attribute should be blank. The agent id returned may be different than that of the agent associated with this session. This indicates that some other agent is occupying the channel; making it unavailable to the session’s agent. The agent-status attribute should contain one of the standard status values: READY, NOT READY, BUSY READY, or BUSY NOT READY.
The interactions array should always be present even if it is empty. The interactions array should contain the identifiers used by the CTI to reference any interaction associated with the channel. This id will be used to create an interaction destination for the interaction.
The contents of the extensions property is platform specific. If no platform extensions exists, this property can be omitted.
UCCE/UCCX Extension:
The device list will be used in a needs info response to an activate request if there is more than one device listed for the agent. The mediabar will display a selection box for device and send that information along in a subsequent activate call.
"extensions":
{
"devices":
[
{
"deviceId": "DEVICE_ID",
"deviceType": "DEVICE_TYPE",
"deviceTypeName": "DEVICE_TYPE_NAME"
},
…
]
}Special Considerations
The processor bridge will use the information provided in the response message to create objects and communication destination for each interaction identified. Any channel related events sent to the destination remain in queue until these objects are initialized themselves. Once this is complete, any waiting events are processed in the order they arrived.
Requests
This section defines the possible requests the processor bridge may make to the channel destination. The client will always generate a response message as a result of these requests. Some requests require the client to perform actions in a particular order. These constraints will be detailed in the description of the request.
channel.request.createinteraction
Instructs the client to prepare a new interaction and register with the interaction destination described in the request message. The request can occur any time between the initialization and tear down phase of the channel destination.
Request Headers
Key | Value | Notes |
---|---|---|
type | cti.request | Request messages will always have this value |
name | channel.request.createinteraction | Name of this request type |
target | String | See generating message targets above |
requestId | {GUID} | Unique identifier for the orginal query |
Request Properties
Key | Value | Notes |
---|---|---|
id | String | Bridge id of the interaction |
nativeid | String | CTI id of the interaction |
Response Headers
Key | Value | Notes |
---|---|---|
type | cti.response | Response messages will always have this value |
name | channel.request.createinteraction | Name of the original request |
result | SUCCESS | FAILURE | Result of the request |
errorMessage | String | A human readable description of the error that caused this request to fail. This message will be logged and may be displayed to an agent. |
target | String | See generating message targets above |
requestId | {GUID} | Unique identifier for the orginal query |
channel.request.activate
Requests the client log the session’s agent into this channel. If a different agent is already logged into this channel, a failure response should be generated, and the channel left in its current state. Unlike most request messages, channel.request.activate provides additional information in a JSON payload. Not all telecom vendors support channel activation.
Request Headers
Key | Value | Notes |
---|---|---|
type | cti.request | Request messages will always have this value |
name | channel.request.activate | Name of this request type |
target | String | See generating message targets above |
requestId | {GUID} | Unique identifier for the orginal query |
Request JSON
{
"queue" : "QUEUE_LIST",
"switch-login" : "AGENT_SWITCH_LOGIN_ID",
"switch-password" : "AGENT_SWITCH_PASSWORD",
"extensions":
{
…
}
}The queues property will contain a comma delimited list of queue names that should be activated for this channel. If the underlying CTI does not use or support queue-based routing, this property will be empty. The switch-login property contains the login id that should be used to authenticate with the switch if different than the agent's CTI login. The switch-password will contain the switch password associated with the login if required.
The extensions property is platform specific and might be omitted if the platform doesn't require any extensions.
UCCE/UCCX Extensions
UCCE/UCCX requires a device id to activate the telephony channel when the agent has multiple devices registered. The set of possible devices is returned during channel.query.init and selected by the agent.
"extensions":
{
"deviceId": "DEVICE_ID"
}Response Headers
Key | Value | Notes |
---|---|---|
type | cti.response | Response messages will always have this value |
name | channel.request.activate | Name of the original request |
result | SUCCESS | FAILURE | Result of the request |
errorMessage | String | A human readable description of the error that caused this request to fail. This message will be logged and may be displayed to an agent. |
target | String | See generating message targets above |
requestId | {GUID} | Unique identifier for the orginal query |
channel.request.deactivate
Requests the client log the session’s agent out of this channel. If a different agent is logged into the channel, a failure response should be generated, and the channel left in its current state. Also, if any interactions are active (not in the ended state) a failure message should be generated, and the active interactions should be left in their current state. Any interactions that are ended but not complete should be marked complete as part of this request even if the request fails.
Request Headers
Key | Value | Notes |
---|---|---|
type | cti.request | Request messages will always have this value |
name | channel.request.ready | Name of this request type |
target | String | See generating message targets above |
requestId | {GUID} | Unique identifier for the orginal query |
Request Properties
Key | Value | Notes |
---|---|---|
None |
|
|
Response Headers
Key | Value | Notes |
---|---|---|
type | cti.response | Response messages will always have this value |
name | channel.request.ready | Name of the original request |
result | SUCCESS | FAILURE | Result of the request |
errorMessage | String | A human readable description of the error that caused this request to fail. This message will be logged and may be displayed to an agent. |
target | String | See generating message targets above |
requestId | {GUID} | Unique identifier for the orginal query |
channel.request.ready
Requests the client place this channel into the ready state.
Request Headers
Key | Value | Notes |
---|---|---|
type | cti.request | Request messages will always have this value |
name | channel.request.ready | Name of this request type |
target | String | See generating message targets above |
requestId | {GUID} | Unique identifier for the orginal query |
Request Properties
Key | Value | Notes |
---|---|---|
None |
|
|
Response Headers
Key | Value | Notes |
---|---|---|
type | cti.response | Response messages will always have this value |
name | channel.request.ready | Name of the original request |
result | SUCCESS | FAILURE | Result of the request |
errorMessage | String | A human readable description of the error that caused this request to fail. This message will be logged and may be displayed to an agent. |
target | String | See generating message targets above |
requestId | {GUID} | Unique identifier for the orginal query |
channel.request.notready
Requests the client place this channel into the not ready state.
Request Headers
Key | Value | Notes |
---|---|---|
type | cti.request | Request messages will always have this value |
name | channel.request.notready | Name of this request type |
target | String | See generating message targets above |
requestId | {GUID} | Unique identifier for the orginal query |
Request Properties
Key | Value | Notes |
---|---|---|
reason | String | Reason code for going not ready |
Response Headers
Key | Value | Notes |
---|---|---|
type | cti.response | Response messages will always have this value |
name | channel.request.notready | Name of the original request |
result | SUCCESS | FAILURE | Result of the request |
errorMessage | String | A human readable description of the error that caused this request to fail. This message will be logged and may be displayed to an agent. |
target | String | See generating message targets above |
requestId | {GUID} | Unique identifier for the orginal query |
channel.request.dispose
Notifies the client that the processor bridge is ready to dispose of the channel and that any underlying CTI resources should be released. The actual disposal of resources should be performed after a response is returned.
Request Headers
Key | Value | Notes |
---|---|---|
type | cti.request | Request messages will always have this value |
name | channel.request.dispose | Name of this request type |
target | String | See generating message targets above |
requestId | {GUID} | Unique identifier for the orginal query |
Request Properties
Key | Value | Notes |
---|---|---|
None |
|
|
Response Headers
Key | Value | Notes |
---|---|---|
type | cti.response | Response messages will always have this value |
name | channel.request.dispose | Name of the original request |
result | SUCCESS | FAILURE | Result of the request |
errorMessage | String | A human readable description of the error that caused this request to fail. This message will be logged and may be displayed to an agent. |
target | String | See generating message targets above |
requestId | {GUID} | Unique identifier for the orginal query |
channel.request.externaldispositions
Requests the client provide a list of appropriate interaction dispositions for this channel. These dispositions can be specific to the interaction type of the channel. Note: This request produces the "channel.externaldispositions.updated" event in response.
Request Headers
Key | Value | Notes |
---|---|---|
type | cti.request | Request messages will always have this value |
name | channel.request.externaldispositions | Name of this request type |
target | String | See generating message targets above |
requestId | {GUID} | Unique identifier for the orginal query |
Request Properties
Key | Value | Notes |
---|---|---|
None |
|
|
Response Headers
Key | Value | Notes |
---|---|---|
type | cti.response | Response messages will always have this value |
name | channel.request.externaldispositions | Name of the original request |
result | SUCCESS | FAILURE | Result of the request |
errorMessage | String | A human readable description of the error that caused this request to fail. This message will be logged and may be displayed to an agent. |
target | String | See generating message targets above |
requestId | {GUID} | Unique identifier for the orginal query |
Client Events
This section describes the possible events the client can send the processor bridge to the channel destination. In most cases, these events are unsolicited though may be the indirect result of executing a previously received request message.
channel.interaction.available
This event indicates that a new interaction is available on this channel.
Event Headers
Key | Value | Notes |
---|---|---|
type | cti.event | Event messages will always have this value |
name | channel.interaction.available | Name of this event type |
target | String | See generating message targets above |
Event Properties
Key | Value | Notes |
---|---|---|
nativeid | String | CTI id of the new interaction |
channel.activated
This event indicates that the session’s agent has been logged into this channel.
Event Headers
Key | Value | Notes |
---|---|---|
type | cti.event | Event messages will always have this value |
name | channel.activated | Name of this event type |
target | String | See generating message targets above |
Event Properties
Key | Value | Notes |
---|---|---|
None |
|
|
channel.deactivated
This event indicates that the session’s agent has been logged out of this channel.
Event Headers
Key | Value | Notes |
---|---|---|
type | cti.event | Event messages will always have this value |
name | channel.deactivated | Name of this event type |
target | String | See generating message targets above |
Event Properties
Key | Value | Notes |
---|---|---|
None |
|
|
channel.unavailable
This event indicates that an agent other than the session’s agent has been logged into this channel.
Event Headers
Key | Value | Notes |
---|---|---|
type | cti.event | Event messages will always have this value |
name | channel.unavailable | Name of this event type |
target | String | See generating message targets above |
Event Properties
Key | Value | Notes |
---|---|---|
id | String | CTI id for the agent occupying this channel |
channel.available
This event indicates that some other agent has been logged out of this channel.
Event Headers
Key | Value | Notes |
---|---|---|
type | cti.event | Event messages will always have this value |
name | channel.available | Name of this event type |
target | String | See generating message targets above |
Event Properties
Key | Value | Notes |
---|---|---|
None |
|
|
channel.agentstatuschanged
This event indicates that the status for the logged in agent has changed. This event only needs to be raised if the agent associated with this session is logged into the channel. The processor bridge does not track the status of the channel when another agent is logged in.
Event Headers
Key | Value | Notes |
---|---|---|
type | cti.event | Event messages will always have this value |
name | channel.agentstatuschanged | Name of this event type |
target | String | See generating message targets above |
Event Properties
Key | Value | Notes |
---|---|---|
status | String | READY | BUSY READY | NOT READY | BUSY NOT READY |
reason | String | The reason code if the status is NOT READY or BUSY NOT READY |
description | String | The text description for this reason code. |
channel.externaldispositions.updated
This event indicates that the appropriate interaction dispositions for this channel have changed. This event contains a body of JSON that describes the dispositions.
Event Headers
Key | Value | Notes |
---|---|---|
type | cti.event | Event messages will always have this value |
name | channel.externaldispositions.updated | Name of this event type |
target | String | See generating message targets above |
Event JSON
Below is an example of the JSON contained in the event message:
{
"dispositions" :
[
{
"interactionDispositionId" : "<unique-id-of-disposition>",
"value" : "<code-or-value-of-disposition>",
"extensions" : [],
"labels" :
[
{
"language" : "en",
"country" : "US",
"name" : "<name-in-language>",
"description" : "<description>"
},
…
]
},
…
]
}