...
During session initialization, the interaction processor determines the agent's current state within the underlying CTI platform. If the agent already has active channels, interactions, or conversations, those objects will be created within the session resource and events about their current state will be sent to the client. Regardless of any additional events generated during initialization, the session.initialized event will always be generated when the process is complete.
session.request.logout
The client sends this session management request to indicate that the session should end and all associated objects should be released. The interaction processor should not respond to this request until the logout process has completed.
...
Code Block | ||
---|---|---|
| ||
{
"command": "session.request.logout",
"target": "<session-id>",
"data": {}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "session.request.logout",
"target": "<session-id>",
"result": "success"
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "session.request.logout",
"target": "<session-id>",
"result": "failure",
"failure":
{
"code": "<error-code-for-failure>",
"message": "<error-message>",
"context": "<stack-trace-if-applicable>"
},
"original":
{
<Contains the original request JSON structure>
}
} |
...
Logging out of a session should not generate any secondary events. The session should be completely inert once the process is complete and a success is returned.
session.request.addchannel
Adds a standalone channel to this agent session. The type of channel to be added is provided in the "data" property. The endpoint (i.e. extension for telephony) for the channel is also included in the "data" property.
...
Code Block | ||
---|---|---|
| ||
{
"command": "session.request.addchannel",
"target": "<session-id>",
"data":
{
"channel":
{
"endpoint": "<CTI-channel-identifier>",
"type": "Telephony | Chat | Email"
}
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "session.request.addchannel",
"target": "<session-id>",
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "session.request.addchannel",
"target": "<session-id>",
"result": "failure",
"failure":
{
"code": "<error-code-for-failure>",
"message": "<error-message>",
"context": "<stack-trace-if-applicable>"
},
"original":
{
<Contains the original request JSON structure>
}
} |
...
channel.created
state.updated (channel state event)
channel.initialized
session.request.removechannel
Removes a previously added standalone channel from this agent session. The channel will automatically be deactivated if it is still active. A failure is generated if the channel has an active interaction or cannot be deactivated before being removed from the session.
...
Code Block | ||
---|---|---|
| ||
{
"command": "session.request.removechannel",
"target": "<session-id>",
"data":
{
"channel":
{
"id": "<channel-identifier>"
}
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "session.request.removechannel",
"target": "<session-id>",
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "session.request.removechannel",
"target": "<session-id>",
"result": "failure",
"failure":
{
"code": "<error-code-for-failure>",
"message": "<error-message>",
"context": "<stack-trace-if-applicable>"
},
"original":
{
<Contains the original request JSON structure>
}
} |
...
channel.infochanged (If still active)
state.updated (channel state event, if still active)
channel.disposed
session.request.addchannelgroup
Adds a channel group to this agent session. All channels associated with the given group will then be added to the group during the initialization phase. The channel group to add is identified in the "data" property of the request.
...
Code Block | ||
---|---|---|
| ||
{
"command": "session.request.addchannelgroup",
"target": "<session-id>",
"data":
{
"channelgroup":
{
"name": "<CTI-channel-group-identifier>",
"chat": true | false,
"email": true | false,
"callback": true | false
}
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "session.request.addchannelgroup",
"target": "<session-id>",
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "session.request.addchannelgroup",
"target": "<session-id>",
"result": "failure",
"failure":
{
"code": "<error-code-for-failure>",
"message": "<error-message>",
"context": "<stack-trace-if-applicable>"
},
"original":
{
<Contains the original request JSON structure>
}
} |
...
channelgroup.created
state.updated (channel group state event)
channel.created (for each associated channel)
state.updated (channel state event)
channel.initialized
channelgroup.initialized
session.request.removechannelgroup
Removes a previously added channel group and its associated channels from this agent session. Associated channels will automatically be deactivated if they are still active. A failure is generated if an associated channel has an active interaction or cannot be deactivated before being removed from the group.
...
Code Block | ||
---|---|---|
| ||
{
"command": "session.request.removechannelgroup",
"target": "<session-id>",
"data":
{
"channel":
{
"id": "<channel-group-identifier>"
}
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "session.request.removechannelgroup",
"target": "<session-id>,
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "session.request.removechannelgroup",
"target": "<session-id>",
"result": "failure",
"failure":
{
"code": "<error-code-for-failure>",
"message": "<error-message>",
"context": "<stack-trace-if-applicable>"
},
"original":
{
<Contains the original request JSON structure>
}
} |
...
Code Block | ||
---|---|---|
| ||
{ "command": "session.request.incontact.addressbook.stop", "target": "<session-id>", "result": "failure", "failure": { "code": "<error-code-for-failure>", "message": "<error-message>", "context": "<stack-trace-if-applicable>" }, "original": { <Contains the original request JSON structure> } } |
Secondary Events
None.
channelgroup.request.activateall
Attempts to place all channels associated with the channel group into activated status. Channels that are already activated will be unaffected by this request. A failure is generated if one of the channels cannot be activated for some reason. Any channels that were already activated during this request will remain active after a failure but remaining channels will not be activated.
...
Code Block | ||
---|---|---|
| ||
{
"command": "channelgroup.request.activateall",
"target": "<session-id>.<channel-group-id>",
"data":
{
"channeloptions":
[
{
"id": "<channel-identifier>",
"queue": "<channel-queue>"
}
…
]
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "channelgroup.request.activateall",
"target": "<session-id>.<channel-group-id>",
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "channelgroup.request.activateall",
"target": "<session-id>.<channel-group-id>",
"result": "failure",
"failure":
{
"code": "<error-code-for-failure>",
"message": "<error-message>",
"context": "<stack-trace-if-applicable>"
},
"original":
{
<Contains the original request JSON structure>
}
} |
...
channel.infochanged (for each associated channel If not active)
state.updated (channel state event, if not active)
channelgroup.request.deactivateall
Attempts to place all channels associated with the channel group into inactive status. Channels that are already inactive will be unaffected by this request. A failure is generated if one of the channels cannot be deactivated for some reason. Any channels that were already deactivated during this request will remain inactive after a failure but remaining channels will not be deactivated.
...
Code Block | ||
---|---|---|
| ||
{
"command": "channelgroup.request.deactivateall",
"target": "<session-id>.<channel-group-id>",
"data":
{
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "channelgroup.request.deactivateall",
"target": "<session-id>.<channel-group-id>",
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "channelgroup.request.deactivateall",
"target": "<session-id>.<channel-group-id>",
"result": "failure",
"failure":
{
"code": "<error-code-for-failure>",
"message": "<error-message>",
"context": "<stack-trace-if-applicable>"
},
"original":
{
<Contains the original request JSON structure>
}
} |
...
channel.infochanged (for each associated channel If active)
state.updated (channel state event, if active)
channel.request.activate
Attempts to place the given channel into activated status. A failure is generated if the channel cannot be activated or is already in the active state. The "data" property should carry any CTI specific activation parameters within the "channeloptions" property.
...
Code Block | ||
---|---|---|
| ||
{
"command": "channel.request.activate",
"target": "<session-id>.<channel-id>" |
"<session-id>.<channel-group-id>.<channel-id>",
"data":
{
"channeloptions":
{
"queue": "<channel-queue>"
}
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "channel.request.activate",
"target": "<session-id>.<channel-id>" |
"<session-id>.<channel-group-id>.<channel-id>",
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "channel.request.activate",
"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>
}
} |
...
channel.infochanged
state.updated
channel.request.deactivate
Attempts to place the channel into inactive status. A failure is generated if the channel cannot be deactivated for some reason or is already in the inactive state.
...
Code Block | ||
---|---|---|
| ||
{
"command": "channel.request.deactivate",
"target": "<session-id>.<channel-id>" |
"<session-id>.<channel-group-id>.<channel-id>",
"data":
{
"channelOptions":
{
"queue": "<optional list of queues that are being deactivated>",
"reason": "<optional numerical code for logout reason>"
}
}
} |
...
Code Block |
---|
{
"command": "channel.request.deactivate",
"target": "<session-id>.<channel-id>" |
"<session-id>.<channel-group-id>.<channel-id>",
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "channel.request.deactivate",
"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>
}
} |
...
channel.infochanged
state.updated
channel.request.ready
Attempts to place the agent into ready status on the given channel. A failure is generated if the channel is not already in the active state or if the agent cannot be made ready on that channel.
...
Code Block | ||
---|---|---|
| ||
{
"command": "channel.request.ready",
"target": "<session-id>.<channel-id>" |
"<session-id>.<channel-group-id>.<channel-id>",
"data": {}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "channel.request.ready",
"target": "<session-id>.<channel-id>" |
"<session-id>.<channel-group-id>.<channel-id>",
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "channel.request.ready",
"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>
}
} |
...
channel.infochanged
state.updated
channel.request.notready
Attempts to place the agent into not ready status on the given channel. The "reasoncode" and "reasondesc" properties of the "data" request structure control the type of not ready status the agent enters. The "reasoncode" property is required and should map to the CTI specific configuration for that agent. The "reasondesc" property is informational is not required. A special reason code of "acw" can be used to enter the After Call Work mode offered by many CTI platforms. A failure is generated if the channel is not already in the active state or if the agent cannot be made not ready on that channel.
...
Code Block | ||
---|---|---|
| ||
{
"command": "channel.request.notready",
"target": "<session-id>.<channel-id>" |
"<session-id>.<channel-group-id>.<channel-id>",
"data":
{
"reasoncode": "acw | <CTI-reason-code>",
"reasondesc": "<Descriptive text>"
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "channel.request.notready",
"target": "<session-id>.<channel-id>" |
"<session-id>.<channel-group-id>.<channel-id>",
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "channel.request.notready",
"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>
}
} |
...
Telephony and Multimedia Requests and Responses
channel.request.dial (Telephony only)
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.
...
Code Block | ||
---|---|---|
| ||
{
"command": "channel.request.dial",
"target": "<session-id>.<channel-id>" |
"<session-id>.<channel-group-id>.<channel-id>",
"data":
{
"destination": "<number-to-dial>",
"extensions":
{
<platform-specific-extensions>
}
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "channel.request.dial",
"target": "<session-id>.<channel-id>" |
"<session-id>.<channel-group-id>.<channel-id>",
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "channel.request.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>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "channel.request.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>
}
} |
...
channel.externaldispositions.updated
...
interaction.request.incontact.
...
signal (InContact only)
Retrieves the list of scripts available for the channel. Scripts are limited by the channel type.Requests that a signal is sent to the active script for the interaction.
Request
Code Block | ||
---|---|---|
| ||
{ "command": "channelinteraction.request.incontact.getscriptssignal", "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", "data": { } } |
Success Response
Code Block | ||
---|---|---|
| ||
{ "commandcontactId": "<contact "channel.request.incontact.getscripts"id>", "target": "<session-id>.<channel-id>" | "<session-id>.<channel-group-id>.<channel-id>", "result": "success", "data": { "scripts": [ { "scriptId": "<script_id>"p1": "<some_value>", <continued valaues for "scriptName": "<script_name>" } ]p2-p20. Only those items that have values should be included> } } |
...
Success Response
Code Block | ||
---|---|---|
| ||
{ "command": "channelinteraction.request.incontact.getscriptssignal", "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", "result": "failuresuccess", "failuredata": { } } |
Failure Response
Code Block | ||
---|---|---|
| ||
{ "code": "command": "interaction.request.incontact.signal", "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> } } |
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
interaction.accept (Telephony and Multimedia)
Accepts an alerting interaction. A new Signaling a script can have any number of side-effects. There may be changes to the call state or the results might be completely hidden from the agent.
interaction.request.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.
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.accept",
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
"data": {}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.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>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.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>
}
} |
...
interaction.screenpop
state.updated (interaction state event)
interaction.request.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.request.release" request instead. A failure is generated if the agent cannot reject the interaction.
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.reject",
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
"data": {}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.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>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.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>
}
} |
...
interaction.ended
state.updated (interaction state event)
interaction.request.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.
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.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]"
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.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>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.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>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.setdisposition",
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
"data":
{
"disposition": "[disposition-text]"
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.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>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.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>
}
} |
...
Modifying the interaction disposition does not generate any secondary events.
interaction.request.complete (Telephony and Multimedia)
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.
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.complete",
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
"data": {}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.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>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.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>
}
} |
...
interaction.complete
state.updated (interaction state event)
interaction.disposed
interaction.request.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.
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.consult",
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
"data":
{
"destination": "[number-to-dial]"
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.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>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.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>
}
} |
...
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.request.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.
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.alternate",
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
"data": {}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.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>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.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>
}
} |
...
state.updated (conversation state event, original call)
state.updated (conversation state event, consult call)
interaction.focuschanged
interaction.request.consulttransfer (Telephony only)
Attempts to transfer the original call party to the consult call party. If successful, both conversations will end for this agent and the two parties will be connected together. A failure is generated if a consult call is not connected or the call cannot be transferred.
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.consulttransfer",
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
"data": {}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.consulttransfer",
"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>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.consulttransfer",
"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>
}
} |
...
state.updated (conversation state event, original call)
conversation.disposed (original call)
interaction.focuschanged
state.updated (conversation state event, consult call)
conversation.disposed (consult call)
interaction.ended
interaction.request.consultconference (Telephony only)
Attempts to conference the consult call party into the original call. If successful, both parties will be in conference together. A failure is generated if a consult call is not connected or the call cannot be conferenced.
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.consultconference",
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
"data": {}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.consultconference",
"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>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.consultconference",
"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>
}
} |
...
state.updated (interaction state event)
conversation.request.answer (Telephony only)
Answers an inbound phone call. This request also assigns the interaction to the agent as if "interaction.accept" were used. A failure is generated if the call cannot be answered.
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.answer",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"data": {}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.answer",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.answer",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"result": "failure",
"failure":
{
"code": "<error-code-for-failure>",
"message": "<error-message>",
"context": "<stack-trace-if-applicable>"
},
"original":
{
<Contains the original request JSON structure>
}
} |
...
state.updated (conversation state event)
interaction.screenpop
state.updated (interaction state event)
conversation.request.release (Telephony only)
Disconnects the agent from an active phone call. If a two-party call is released both the agent and other party are disconnected. If a multi-party conference is released, only the agent is removed from conference while the remaining parties stay in conference. A failure is generated if the call cannot be disconnected.
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.release",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"data": {}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.release",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.release",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"result": "failure",
"failure":
{
"code": "<error-code-for-failure>",
"message": "<error-message>",
"context": "<stack-trace-if-applicable>"
},
"original":
{
<Contains the original request JSON structure>
}
} |
...
state.updated (conversation state event)
conversation.disposed
interaction.ended (if only conversation is released)
state.updated (interaction state event)
conversation.request.hold (Telephony only)
Places the target conversation on hold. A failure is generated if the call cannot be held.
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.hold",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"data": {}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.hold",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.hold",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"result": "failure",
"failure":
{
"code": "<error-code-for-failure>",
"message": "<error-message>",
"context": "<stack-trace-if-applicable>"
},
"original":
{
<Contains the original request JSON structure>
}
} |
...
state.updated (conversation state event)
conversation.request.retrieve (Telephony only)
Retrieves the target conversation from hold. A failure is generated if the call cannot be retrieved.
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.retrieve",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"data": {}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.retrieve",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.retrieve",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"result": "failure",
"failure":
{
"code": "<error-code-for-failure>",
"message": "<error-message>",
"context": "<stack-trace-if-applicable>"
},
"original":
{
<Contains the original request JSON structure>
}
} |
...
state.updated (conversation state event)
conversation.request.mute (Telephony only)
Places the target conversation on mute. A failure is generated if the call cannot be muted.
...
state.updated (conversation state event)
conversation.request.unmute (Telephony only)
Unmutes the target conversation. A failure is generated if the call cannot be unmuted.
...
state.updated (conversation state event)
conversation.request.senddtmf (Telephony only)
Generates DTMF tones to the other parties on a call. The request is used to produce DTMF tones for navigating automated systems using the client interface. A failure is generated if DTMF cannot be sent.
...
Code Block | ||
---|---|---|
| ||
{ "command": "conversation.retrieverequest.senddtmf", "target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>", "data": {} "digits": "<numbers-between-0-9-or-*-#>" } } |
Success Response
Code Block | ||
---|---|---|
| ||
{ "command": "conversation.retrieverequest.senddtmf", "target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>", "result": "success", "data": { <Same data contents as original request> } } |
...
Code Block | ||
---|---|---|
| ||
{ "command": "conversation.retrieverequest.senddtmf", "target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>", "result": "failure", "failure": { "code": "<error-code-for-failure>", "message": "<error-message>", "context": "<stack-trace-if-applicable>" }, "original": { <Contains the original request JSON structure> } } |
...
Sending DTMF tones does not generate any secondary events.
conversation.request.blindtransfer (Telephony only)
Attempts to transfer the call to the given destination. The call will be disconnected from the agent regardless of whether it is successful. A failure is generated if the call cannot be transferred.
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.blindtransfer",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"data":
{
"destination": "[number-to-dial]"
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.blindtransfer",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.blindtransfer",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"result": "failure",
"failure":
{
"code": "<error-code-for-failure>",
"message": "<error-message>",
"context": "<stack-trace-if-applicable>"
},
"original":
{
<Contains the original request JSON structure>
}
} |
...
state.updated (conversation state event, original call)
conversation.disposed (original call)
interaction.focuschanged
interaction.ended (if only one call was active)
conversation.request.blindconference (Telephony only)
Attempts to conference the party at the given destination into the original call. If successful, both parties will be in conference together. A failure is generated if the call cannot be conferenced.
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.blindconference",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"data":
{
"destination": "[number-to-dial]"
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.blindconference",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"result": "success",
"data":
{
<Same data contents as original request>
}
} |
...
Code Block | ||
---|---|---|
| ||
{
"command": "conversation.request.blindconference",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"result": "failure",
"failure":
{
"code": "<error-code-for-failure>",
"message": "<error-message>",
"context": "<stack-trace-if-applicable>"
},
"original":
{
<Contains the original request JSON structure>
}
} |
...
Code Block | ||
---|---|---|
| ||
{ "messageType": "objectEvent", "target": "<session_id>.<channel-id>" | "<session_id>.<channelgroup_id>.<channel-id>", "name": "channel.externaldispositions.updated", "data": { "dispositions": [ { "interactionDispositionId":"<disposition-id>", "value":"<disposition-value>", "extensions":[], "labels": [ { "language":"en", "country":"US", "name":"<disposition-name>", "description":"<disposition-description" } "description":"<disposition-description" }, … ] }, … ] } } |
conversation.updated
Indicates the data associated with a conversation has changed. The most common use of this event is to notify the client that the native id for the conversation has changed.
Code Block | ||
---|---|---|
| ||
{
"messageType": "objectEvent",
"target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
"name": "conversation.updated",
"data":
{
<platform-specific-conversation-data>
}
} |
interaction.incontact.signaladded
Indicates the provided signal is now available to use with the referenced interaction. These signals are accessed through the incontact specific Launch functionality
Code Block | ||
---|---|---|
| ||
{ "messageType": "objectEvent", "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", "name": "interaction.incontact.signaladded", "data": { "contactId": "<contact id>", "name": "<signal name>", … "tooltip": "<signal tooltip>", ] "p1": "<some value>", <continued },values from p2-p20. Only those properties …with values will be ]present> } } |
...
interaction.incontact.
...
signalremoved
Indicates the data associated with a conversation has changed. The most common use of this event is to notify the client that the native id for the conversation has changedprovided signal is no longer available to use with the referenced interaction.
Code Block | ||
---|---|---|
| ||
{ "messageType": "objectEvent", "target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>", "name": "conversationinteraction.incontact.updatedsignalremoved", "data": { "contactId": "<contact id>", "name": <platform-specific-conversation-data>"<signal name>" } } |