...
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.
...
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
...
language | json |
---|
...
request.incontact.signal (InContact only)
Requests that a signal is sent to the active script for the interaction.
Request
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.request.incontact.signal", "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", "data": {} } |
Success Response
Code Block | ||
---|---|---|
| ||
{ "commandcontactId": "interaction.accept<contact id>", "targetp1": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-<some_value>", <continued valaues for p2-p20. Only those items that have values should be included> } } |
Success Response
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.request.incontact.signal", "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> } } |
Failure Response
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.acceptrequest.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
Accepting an interaction will generate the following secondary events:
interaction.screenpop
state.updated (interaction state event)
...
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)
Rejects 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 reject must accept the interaction before it is assigned allowing another agent to handle the interaction. Although this request can be used to reject accept in inbound phone call, it is recommended for clients to use the telephony specific "conversation.releaseanswer" request instead. A failure is generated if the agent interaction cannot reject be assigned to the interactionagent.
Request
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.rejectrequest.accept", "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", "data": {} } |
...
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.request.rejectaccept", "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.rejectaccept", "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
Rejecting Accepting an interaction will generate the following secondary events:
interaction.endedscreenpop
state.updated (interaction state event)
interaction.
...
request.reject (Telephony and Multimedia)
Attempts to add or modify the call data of an Rejects an alerting 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 reasonA 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.
Request
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.setinteractiondatarequest.reject", "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.request.setinteractiondatareject", "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.setinteractiondatareject", "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
Modifying the Rejecting an interaction call data will generate the following secondary events:
interaction.datachanged.ended
state.updated (interaction state event)
interaction.request.
...
setinteractiondata (Telephony and Multimedia)
Attempts to add or modify the disposition call data of an interaction. The "key" and "dispositionvalue" properties of the "data" request property holds the valuehold 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 disposition call data cannot be updated for some reason.
...
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.setdispositionrequest.setinteractiondata", "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", "data": { "disposition"key": "[name-of-data-item]", "value": "[disposition-textvalue-of-data-item]" } } |
Success Response
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.request.setdispositionsetinteractiondata", "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.setdispositionrequest.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> } } |
...
Modifying the interaction disposition does not generate any call data will generate the following secondary events:
interaction.datachanged
interaction.request.
...
setdisposition (Telephony and Multimedia)
Marks the interaction complete indicating no additional work is required by the agentAttempts 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 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.interaction disposition cannot be updated for some reason.
Request
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.completerequest.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.completerequest.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.completesetdisposition", "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> } } |
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:
Secondary Events
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.
Request
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.request.complete", "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", "resultdata": {} } |
Success Response
Code Block | ||
---|---|---|
| ||
{ "command": "needinfointeraction.request.complete", "uiExtensiontarget": "<session-id>.<channel-id>.<interaction-id>" { | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", "typeresult": "agentstatesuccess" }, "originaldata": { <Contains<Same thedata originalcontents requestas JSONoriginal structure>request> } } |
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.
...
Failure Response
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.request.complete", "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", "result": "needinfofailure", "uiExtensionfailure": { "typecode": "disposition<error-code-for-failure>", "dispositionRequired": true | false, "dispositionsmessage": [ { "dispositionId": 0, "<error-message>", "dispositionNamecontext": "string", "priority": 0, "isPreviewDisposition": true } ] <stack-trace-if-applicable>" }, "original": { <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>
}
} |
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>
}
} |
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.
Secondary Events
Completing an interaction will generate the following secondary events:
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.
Request
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]"
}
} |
Success Response
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>
}
} |
Failure Response
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>
}
} |
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.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.
Request
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.alternate",
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
"data": {}
} |
Success Response
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>
}
} |
Failure Response
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>
}
} |
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.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.
Request
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.consulttransfer",
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
"data": {}
} |
Success Response
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>
}
} |
Failure Response
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>
}
} |
Secondary Events
Performing a consult transfer will generate the following secondary events:
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.
Request
Code Block | ||
---|---|---|
| ||
{
"command": "interaction.request.consultconference",
"target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
"data": {}
} |
Success Response
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>
}
} |
Failure Response
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>
}
} |
Secondary Events
Performing a consult conference will generate the following secondary events:
...
Attempts to start call recording. If recording is already underway, this should successfully return.
Request
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.request.recording.start", "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", "data": {} } |
Success Response
Code Block | ||
---|---|---|
| ||
{ "command": " interaction.request.recording.start", "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> } } |
Failure Response
Code Block | ||
---|---|---|
| ||
{ "command": " interaction.request.recording.start", "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
Performing start recording will generate the following secondary events:
...
Attempts to stop call recording. If recording is already stopped, this should successfully return.
Request
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.request.recording.stop", "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", "data": {} } |
Success Response
Code Block | ||
---|---|---|
| ||
{ "command": " interaction.request.recording.stop", "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> } } |
Failure Response
Code Block | ||
---|---|---|
| ||
{ "command": " interaction.request.recording.stop", "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
Performing stop recording will generate the following secondary events:
...
Attempts to pause call recording. Not all platforms will support the pause operation and will return an unsupported error.
Request
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.request.recording.pause", "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", "data": {} } |
Success Response
Code Block | ||
---|---|---|
| ||
{ "command": " interaction.request.recording.pause", "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> } } |
Failure Response
Code Block | ||
---|---|---|
| ||
{ "command": " interaction.request.recording.pause", "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
Performing pause recording will generate the following secondary events:
...
Attempts to resume call recording. Not all platforms will support the resume operation and will return an unsupported error.
Request
Code Block | ||
---|---|---|
| ||
{ "command": "interaction.request.recording.resume", "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", "data": {} } |
Success Response
Code Block | ||
---|---|---|
| ||
{ "command": " interaction.request.recording.resume", "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> } } |
Failure Response
Code Block | ||
---|---|---|
| ||
{ "command": " interaction.request.recording.resume", "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
Performing resume recording will generate the following secondary events:
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.
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>",
"data": {}
} |
Success Response
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>
}
} |
Failure Response
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>
}
} |
Secondary Events
Answering an inbound call will generate the following secondary events:
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.
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>",
"data": {}
} |
Success Response
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>
}
} |
Failure Response
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>
}
} |
Secondary Events
Releasing an active call will generate the following secondary events:
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.
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>",
"data": {}
} |
Success Response
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>
}
} |
Failure Response
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>
}
} |
Secondary Events
Holding an active call will generate the following secondary events:
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.
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>",
"data": {}
} |
Success Response
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>
}
} |
Failure Response
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>
}
} |
Secondary Events
Retrieving a held call will generate the following secondary events:
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.
Request
Code Block | ||
---|---|---|
| ||
{ "command": "conversation.request.mute", "target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>", "data": {} } |
Success Response
Code Block | ||
---|---|---|
| ||
{ "command": "conversation.request.mute", "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> } } |
Failure Response
Code Block | ||
---|---|---|
| ||
{ "command": "conversation.request.mute", "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> } } |
Secondary Events
Muting an active call will generate the following secondary events:
state.updated (conversation state event)
conversation.request.unmute (Telephony only)
Unmutes the target conversation. A failure is generated if the call cannot be unmuted.
Request
Code Block | ||
---|---|---|
| ||
{ "command": "conversation.request.unmute", "target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>", "data": {} } |
Success Response
Code Block | ||
---|---|---|
| ||
{ "command": "conversation.request.unmute", "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> } } |
Failure Response
Code Block | ||
---|---|---|
| ||
{ "command": "conversation.request.unmute", "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> } } |
Secondary Events
Unmuting a call will generate the following secondary events:
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.
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>", "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> } } |
Failure 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": "failure", "failure": { "code": "<error-code-for-failure>", "message": "<error-message>", "context": "<stack-trace-if-applicable>" }, "original": { <Contains the original request JSON structure> } } |
Secondary Events
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.
...
of whether it is successful. A failure is generated if the call cannot be transferred.
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>",
"data":
{
"destination": "[number-to-dial]"
}
} |
Success Response
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 "destination": "[number-to-dial]"contents as original request> } } |
...
Failure Response
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": "success" { "code": "<error-code-for-failure>", "message": "<error-message>", "context": "<stack-trace-if-applicable>" }, "dataoriginal": { <Same<Contains datathe contentsoriginal asrequest originalJSON request>structure> } } |
...
Secondary Events
Performing a blind transfer will generate the following secondary events:
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.
Request
Code Block | ||
---|---|---|
| ||
{ "command": "conversation.blindtransferrequest.blindconference", "target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>", "resultdata": "failure", "failure": { "code": "<error-code-for-failure>", "message": "<error-message>", "contextdestination": "<stack[number-trace-if-applicable>to-dial]" }, } |
Success Response
Code Block | ||
---|---|---|
| ||
{ "originalcommand": { <Contains the original request JSON structure> } } |
Secondary Events
Performing a blind transfer will generate the following secondary events:
state.updated (conversation state event, original call)
conversation.disposed (original call)
interaction.focuschanged
interaction.ended (if only one call was active)
conversation.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.
...
"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>
}
} |
Failure Response
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", "datafailure": { "code": "<error-code-for-failure>", "message": "<error-message>", "context": "<stack-trace-if-applicable>" }, "original": { <Contains the original request "destination": "[number-to-dial]"JSON structure> } } |
Success Response
...
Secondary Events
Performing a blind conference will generate the following secondary events:
conversation.memeber.added (original call, destination party)
state.updated (conversation state event, original call)
Telephony and Multimedia Events
interaction.created
Indicates a new interaction has been created. The target property identifies the channel associated with the interaction. This event will appear during session initialization if the agent is already logged into the channel (recovering an active session or through some other mechanism). It will also be raised in response to a successful session.addchannel or session.addchannelgroup request.
Code Block |
---|
{ "commandmessageType": "conversation.blindconferenceobjectEvent", "target": "<session-_id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-_id>.<channel-<channelgroup_id>.<interaction<channel-id>.<conversation.id>", "resultname": "successinteraction.created", "data": { <Same"interaction": data contents as original request>{ } } |
Failure Response
Code Block | ||
---|---|---|
| ||
{ "commandid": "conversation.blindconference<interaction_id>", "targetnativeId": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",<interaction_native_id>", "resulttype": "failureTELEPHONY", | "failureEMAIL": | "CHAT" { | "codeCALLBACK": | "<error-code-for-failure><custom_type>", "messagemodelType": "<error-message>TELEPHONY", | "context": "<stack-trace-if-applicable>"EMAIL" | "CHAT" },| "CALLBACK" | "original<custom_type>": { <Contains the original request JSON structure><platform-or-type-specific-interaction-properties> } } } |
Secondary Events
Performing a blind conference will generate the following secondary events:
conversation.memeber.added (original call, destination party)
state.updated (conversation state event, original call)
Telephony and Multimedia Events
interaction.created
Indicates a new interaction has been created. The target property identifies the channel associated with the interaction. This event will appear during session initialization if the agent is already logged into the channel (recovering an active session or through some other mechanism). It will also PureCloud Callback interactions will have an additional property "callbackNumbers" that is an array of string values representing the phone numbers that will be used to initiate outbound callbacks.
channel.externaldispositions.updated
Indicates the allowable set of interaction dispositions for a channel have changed. It will be raised in response to a successful sessionchannel.addchannel or sessionrequest.addchannelgroup externaldispositions request.
Code Block | ||
---|---|---|
| ||
{ "messageType": "objectEvent", "target": "<session_id>.<channel-id>" | "<session_id>.<channelgroup_id>.<channel-id>",-id>", "name": "channel.externaldispositions.updated", "data": { "dispositions": [ { "interactionDispositionId":"<disposition-id>", "value":"<disposition-value>", "extensions":[], "labels": [ { "namelanguage": "interaction.createden", "data": { "interactioncountry":"US", { "idname": "<interaction_id>"<disposition-name>", "nativeIddescription": "<interaction_native_id>","<disposition-description" }, "type": "TELEPHONY" | "EMAIL" | "CHAT" | "CALLBACK" | "<custom_type>", … "modelType": "TELEPHONY" |] "EMAIL" | "CHAT" | "CALLBACK" | "<custom_type>" }, <platform-or-type-specific-interaction-properties>… }] } } |
PureCloud Callback interactions will have an additional property "callbackNumbers" that is an array of string values representing the phone numbers that will be used to initiate outbound callbacks.
...
conversation.updated
Indicates the allowable set of interaction dispositions for a channel have changed. It will be raised in response to a successful channel.request.externaldispositions requestdata 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>.<channelgroup_<channel-group-id>.<channel-id>", "name": "channel.externaldispositions.updated", "data": { "dispositions": [ { "interactionDispositionId":"<disposition-id>", "value":"<disposition-value>", .<interaction-id>.<conversation.id>", "extensionsname":[] "conversation.updated", "labels"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 | ||
---|---|---|
| ||
{ "languagemessageType": "enobjectEvent", "country"target":"US", "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>", "name":"<disposition-name>", "interaction.incontact.signaladded", "descriptiondata":"<disposition-description" { "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>" } } |