...
Indicates that the channel has been fully initialized after being added to a session or channel group. Channels are always added in the INACTIVE state. One or more channel.infochanged events may be raised prior to channel.initialized to reflect the actual state of the channel and the agent's current availability.
{
Code Block | ||
---|---|---|
| ||
{ "messageType": "objectEvent", |
...
"target": "<session-id>.<channel-id>" | |
...
"<session-id>.<channel-group-id>.<channel-id>", |
...
"name": "channel.initialized", |
...
"data": {} |
...
} |
channel.disposed
Indicates that the channel has been removed from the session or channel group and disposed of. The client should release any resources related to the channel. No further requests can be submitted to this channel and the channel will produce no further events.
{
Code Block | ||
---|---|---|
| ||
{ "messageType": "objectEvent", |
...
"target": "<session-id>.<channel-id>" | |
...
"<session-id>.<channel-group-id>.<channel-id>", |
...
"name": "channel.disposed", |
...
"data": {} |
...
} |
channelgroup.created
Indicates a new channel group has been created and added to the session. This event will appear during session initialization if the agent is already logged into the channel group (recovering an active session or through some other mechanism). It will also be raised in response to a successful session.addchannelgroup request.
{
Code Block | ||
---|---|---|
| ||
{ "messageType": "objectEvent", |
...
"target": "<session_id>", |
...
"name": "channelgroup.created", |
...
"data": |
...
{
{ "channelgroup": |
...
{
{ "id": "<channelgroup_id>", |
...
"name": "<channelgroup_name>", |
...
}
}
} } } |
channelgroup.initialized
Indicates that the channel group has been fully initialized after being added to the session. All member channels will have been added to this group and initialized prior to this event being raised.
Code Block | ||
---|---|---|
| ||
{ |
...
"messageType": "objectEvent", |
...
"target": "<session-id>.<channel-group-id>", |
...
"name": "channelgroup.initialized", |
...
"data": {} |
...
} |
channelgroup.disposed
Indicates that the channel group has been removed from this session and disposed of. The client should release any resources associated with the channel group. No further requests can be submitted to this channel group and the channel group will produce no further events.
Code Block | ||
---|---|---|
| ||
{ |
...
"messageType": "objectEvent", |
...
"target": "<session-id>.<channel-group-id>", |
...
"name": "channelgroup.disposed", |
...
"data": {} |
...
} |
directory.updated
Indicates that the directory listing has been updated. This event is triggered by making a request to session.request.getdirectory.
Code Block | ||
---|---|---|
| ||
{ |
...
"messageType": "objectEvent", |
...
"target": "<session-id>", |
...
"name": "directory.updated", |
...
"data": |
...
{
{ "categories": |
...
[
{
...
[ { "name": "<category_name>", |
...
"entries": |
...
[
{
...
[ { "name": "<entry_name>", |
...
"number": "<entry_number>" |
...
}
…
]
}
…
]
}
} … ] } … ] } } |
Telephony and Multimedia Requests and Responses
...
Attempts to place an outbound call using the given telephony channel. The "destination" property of the "data" request property contains the number to be dialed. A failure is generated if the channel is not already in the active state or if the outbound call cannot be initiated for some reason. The extensions object can be empty or missing if not applicable to the current request.
Request
Code Block | ||
---|---|---|
| ||
{ |
...
"command": "channel.dial", |
...
"target": "<session-id>.<channel-id>" | |
...
"<session-id>.<channel-group-id>.<channel-id>", |
...
"data": |
...
{
{ "destination": "<number-to-dial>", |
...
"extensions": |
...
{
{ <platform-specific-extensions> |
...
}
}
} } } |
Success Response
{
Code Block | ||
---|---|---|
| ||
{ "command": "channel.dial", |
...
"target": "<session-id>.<channel-id>" | |
...
"<session-id>.<channel-group-id>.<channel-id>", |
...
"result": "success", |
...
"data": |
...
{
<Same data contents as original request>
}
{ <Same data contents as original request> } } |
Failure Response
Code Block |
---|
{
| ||
{ "command": "channel.dial", |
...
"target": "<session-id>.<channel-id>" | |
...
"<session-id>.<channel-group-id>.<channel-id>", |
...
"result": "failure", |
...
"failure": |
...
{
{ "code": "<error-code-for-failure>", |
...
"message": "<error-message>", |
...
"context": "<stack-trace-if-applicable>" |
...
}
}, "original": |
...
<Contains the original request JSON structure>
{ <Contains the original request JSON structure> } } |
Secondary Events
Placing an outbound call on a channel will generate the following secondary events:·
channel.infochanged
...
state.updated (channel state event)
...
interaction.created
...
state.updated (interaction state event)
...
conversation.created
...
state.updated (conversation state event)
...
conversation.member.added
...
conversation.initialized
...
interaction.datachanged
...
interaction.preview
...
interaction.initialized
Incontact Extensions
Incontact has two extensions for making an outbound call: type of call destination and outbound skill to use. The type of destination is provided in the "type" property of the extensions object and can have a value of "external", "agent", or "skill. This extension is required. The outbound skill to use is provided by the "skill" property of the extensions object. This extension is only required when the agent has more than one outbound skill configured and the destination type is external. The media bar should attempt to make the call without the outbound skill extension populated. If a skill needs to be selected, the media bar will receive a NeedsMoreInfo error that contains the available outbound skills to choose from:
Code Block | ||
---|---|---|
| ||
{ |
...
"command": "channel.dial", |
...
"target": "<session-id>.<channel-id>" | |
...
"<session-id>.<channel-group-id>.<channel-id>", |
...
"result": "needinfo", |
...
"uiExtension": |
...
{
{ "id": "inContact.outboundskill", |
...
"skills": |
...
[
{
...
[ { "id": "<skill_id>", |
...
"skillName": "<skill_name>" |
...
}
]
}
} ] }, "original": |
...
<Contains the original request JSON structure>
{ <Contains the original request JSON structure> } } |
channel.request.externaldispositions
Requests a list of dynamic interaction dispositions appropriate for the channel. After a successful request the list of interaction dispositions is delivered in a channel.externaldispositions.updated event.
Request
Code Block | ||
---|---|---|
| ||
{ |
...
"command": "channel.request.externaldispositions", |
...
"target": "<session-id>.<channel-id>" | |
...
"<session-id>.<channel-group-id>.<channel-id>", |
...
"data": |
...
{
}
{ } } |
Success Response
Code Block |
---|
{
| ||
{ "command": "channel.request.externaldispositions", |
...
"target": "<session-id>.<channel-id>" | |
...
"<session-id>.<channel-group-id>.<channel-id>", |
...
"result": "success", |
...
"data": |
...
{
<Same data contents as original request>
}
{ <Same data contents as original request> } } |
Failure Response
Code Block |
---|
{
| ||
{ "command": "channel.request.externaldispositions", |
...
"target": "<session-id>.<channel-id>" | |
...
"<session-id>.<channel-group-id>.<channel-id>", |
...
"result": "failure", |
...
"failure": |
...
{
{ "code": "<error-code-for-failure>", |
...
"message": "<error-message>", |
...
"context": "<stack-trace-if-applicable>" |
...
}
}, "original": |
...
<Contains the original request JSON structure>
{ <Contains the original request JSON structure> } } |
Secondary Events
Placing an outbound call on a channel will generate the following secondary events:·
channel.externaldispositions.updated
interaction.accept (Telephony and Multimedia)
Accepts an alerting interaction. A new interaction, whether from an inbound call or multimedia contact, will generate an "interaction.preview" event. However, the interaction is still not officially assigned to the agent. The agent must accept the interaction before it is assigned. Although this request can be used to accept in inbound phone call, it is recommended for clients to use the telephony specific "conversation.answer" request instead. A failure is generated if the interaction cannot be assigned to the agent.
...
Request
Code Block | ||
---|---|---|
| ||
{ |
...
"command": "interaction.accept", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"data": {} |
...
} |
Success Response
Code Block | ||
---|---|---|
| ||
{ |
...
"command": "interaction.accept", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"result": "success", |
...
"data": |
...
{
<Same data contents as original request>
}
{ <Same data contents as original request> } } |
Failure Response
{
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.accept", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"result": "failure", |
...
"failure": |
...
{
{ "code": "<error-code-for-failure>", |
...
"message": "<error-message>", |
...
"context": "<stack-trace-if-applicable>" |
...
}
}, "original": |
...
<Contains the original request JSON structure>
{ <Contains the original request JSON structure> } } |
Secondary Events
Accepting an interaction will generate the following secondary events:·
interaction.screenpop
...
state.updated (interaction state event)
interaction.reject (Telephony and Multimedia)
Rejects an alerting interaction. A new interaction, whether from an inbound call or multimedia contact, will generate an "interaction.preview" event. However, the interaction is still not officially assigned to the agent. The agent reject the interaction before it is assigned allowing another agent to handle the interaction. Although this request can be used to reject in inbound phone call, it is recommended for clients to use the telephony specific "conversation.release" request instead. A failure is generated if the agent cannot reject the interaction.
Request
Code Block | ||
---|---|---|
| ||
{ |
...
"command": "interaction.reject", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"data": {} |
...
} |
Success Response
Code Block |
---|
{
| ||
{ "command": "interaction.reject", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"result": "success", |
...
"data": |
...
{
<Same data contents as original request>
}
{ <Same data contents as original request> } } |
Failure Response
{
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.reject", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"result": "failure", |
...
"failure": |
...
{
{ "code": "<error-code-for-failure>", |
...
"message": "<error-message>", |
...
"context": "<stack-trace-if-applicable>" |
...
}
}, "original": |
...
<Contains the original request JSON structure>
{ <Contains the original request JSON structure> } } |
Secondary Events
Rejecting an interaction will generate the following secondary events:·
interaction.ended
...
state.updated (interaction state event)
interaction.setinteractiondata (Telephony and Multimedia)
Attempts to add or modify the call data of an interaction. The "key" and "value" properties of the "data" request property hold the name of the data item and its value. If the key already exists, the current value is overwritten with the new value. If the key does not exist, it is added to the call data. A failure is generated if the interaction call data cannot be updated for some reason.
Request
Code Block | ||
---|---|---|
| ||
{ |
...
"command": "interaction.setinteractiondata", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"data": |
...
{
{ "key": "[name-of-data-item]", |
...
"value": "[value-of-data-item]" |
...
} |
...
} |
Success Response
{
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.setinteractiondata", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"result": "success", |
...
"data": |
...
{
<Same data contents as original request>
}
{ <Same data contents as original request> } } |
Failure Response
Code Block | ||
---|---|---|
| ||
{ |
...
"command": "interaction.setinteractiondata", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"result": "failure", |
...
"failure": |
...
{
{ "code": "<error-code-for-failure>", |
...
"message": "<error-message>", |
...
"context": "<stack-trace-if-applicable> |
...
}
" }, "original": |
...
<Contains the original request JSON structure>
{ <Contains the original request JSON structure> } } |
Secondary Events
Modifying the interaction call data will generate the following secondary events:·
interaction.datachanged
interaction.request.setdisposition (Telephony and Multimedia)
Attempts to add or modify the disposition of an interaction. The "disposition" properties of the "data" request property holds the value. A failure is generated if the interaction disposition cannot be updated for some reason.
Request
{
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.setdisposition", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"data": |
...
{
{ "disposition": "[disposition-text]" |
...
} |
...
} |
Success Response
{
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.setdisposition", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"result": "success", |
...
"data": |
...
{
<Same data contents as original request>
}
{ <Same data contents as original request> } } |
Failure Response
Code Block | ||
---|---|---|
| ||
{ |
...
"command": "interaction.setdisposition", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"result": "failure", |
...
"failure": |
...
{
{ "code": "<error-code-for-failure>", |
...
"message": "<error-message>", |
...
"context": "<stack-trace-if-applicable>" |
...
}
}, "original": |
...
<Contains the original request JSON structure>
{ <Contains the original request JSON structure> } } |
Secondary Events
Modifying the interaction disposition does not generate any secondary events.
...
Marks the interaction complete indicating no additional work is required by the agent. A failure is generated if the agent cannot reject the interaction. Multimedia interactions can be completed at any time after being accepted. All conversations of a telephony interaction must have ended before the interaction can be completed.
Request
{
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.complete", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"data": {} |
...
} |
Success Response
{
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.complete", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"result": "success", |
...
"data": |
...
{
<Same data contents as original request>
}
{ <Same data contents as original request> } } |
Failure Response
Code Block |
---|
{
| ||
{ "command": "interaction.complete", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"result": "failure", |
...
"failure": |
...
{
{ "code": "<error-code-for-failure>", |
...
"message": "<error-message>", |
...
"context": "<stack-trace-if-applicable>" |
...
}
}, "original": |
...
<Contains the original request JSON structure>
{ <Contains the original request JSON structure> } } |
Incontact Extensions
Incontact has two extensions for completing an interaction: ACW and Interaction Disposition. The current implementation of Interaction Disposition isn't compatible with InContact as each skill can have this turned on and have a different set of available dispositions to choose from. The media bar should attempt to complete the interaction without additional information to see either the ACW or Interaction Disposition behavior is required.
If a skill has ACW enabled, the interaction is actually completed by changing the agent state back to ready. The media bar will receive a NeedsInfo response:
{
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.request.complete", |
...
"target": "<session-id>.<channel-id>" | |
...
"<session-id>.<channel-group-id>.<channel-id>", |
...
"result": "needinfo", |
...
"uiExtension": |
...
{
{ "type": "agentstate" |
...
}
}, "original": |
...
<Contains the original request JSON structure>
{ <Contains the original request JSON structure> } } |
This indicates that the media bar should simulate a click on the agent state drop-down so the agent can select a new state. This automatically complete the current interaction.
If a skill has Interaction Disposition enabled, the media bar will receive a NeedsInfo response:
{
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.request.complete", |
...
"target": "<session-id>.<channel-id>" | |
...
"<session-id>.<channel-group-id>.<channel-id>", |
...
"result": "needinfo", |
...
"uiExtension": |
...
{
{ "type": "disposition", |
...
"dispositionRequired": true | false, |
...
"dispositions": |
...
{
[ { "dispositionId": 0, |
...
"dispositionName": "string", |
...
"priority": 0, |
...
"isPreviewDisposition": |
...
}
]
}
true } ] }, "original": |
...
<Contains the original request JSON structure>
{ <Contains the original request JSON structure> } } |
The media bar should provide the agent a way to select a disposition as well as provide a set of notes related to the interaction. The call should be made again providing "skipDisposition": true if dispositionRequired is false and the agent doesn't select a disposition. Otherwise the call is should be made providing "dispositionId" and "notes" properties.
...
Completing an interaction will generate the following secondary events:·
interaction.complete
...
state.updated (interaction state event)
...
interaction.disposed
interaction.consult (Telephony only)
Places the current call on hold and attempts to place a second outbound call under the same interaction. The "destination" property of the "data" request property contains the number to be dialed. A failure is generated if the interaction has not started or if the outbound call cannot be initiated for some reason.
Request
{
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.consult", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"data": |
...
{
{ "destination": "[number-to-dial]" |
...
} |
...
} |
Success Response
Code Block | ||
---|---|---|
| ||
{ |
...
"command": "interaction.consult", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"result": "success", |
...
"data": |
...
{
<Same data contents as original request>
}
{ <Same data contents as original request> } } |
Failure Response
Code Block | ||
---|---|---|
| ||
{ |
...
"command": "interaction.consult", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"result": "failure", |
...
"failure": |
...
{
{ "code": "<error-code-for-failure>", |
...
"message": "<error-message>", |
...
"context": "<stack-trace-if-applicable>" |
...
}
}, "original": |
...
<Contains the original request JSON structure>
{ <Contains the original request JSON structure> } } |
Secondary Events
Placing a consult call will generate the following secondary events:·
state.updated (interaction state event)
...
state.updated (conversation state event, original call)
...
conversation.created
...
state.updated (conversation state event, new call)
...
conversation.member.added
...
conversation.initialized
...
interaction.focuschanged
interaction.alternate (Telephony only)
Places the current talking party on hold and retrieves the other held party. A failure is generated if a consult call is not connected.
RequestRequest
Code Block | ||
---|---|---|
| ||
{ |
...
"command": "interaction.alternate", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"data": {} |
...
} |
Success Response
{
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.alternate", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"result": "success", |
...
"data": |
...
{
<Same data contents as original request>
}
{ <Same data contents as original request> } } |
Failure Response
{
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.alternate", |
...
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", |
...
"result": "failure", |
...
"failure": |
...
{
{ "code": "<error-code-for-failure>", |
...
"message": "<error-message>", |
...
"context": "<stack-trace-if-applicable>" |
...
}
}, "original": |
...
<Contains the original request JSON structure>
{ <Contains the original request JSON structure> } } |
Secondary Events
Alternating between the primary and consult calls will generate the following secondary events:·
state.updated (conversation state event, original call)
...
state.updated (conversation state event, consult call)
...
interaction.focuschanged
interaction.consulttransfer (Telephony only)
...