Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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
languagejson
{
  "command": "session.request.logout",
  "target": "<session-id>",
  "data": {}
}

...

Code Block
languagejson
{
  "command": "session.request.logout",
  "target": "<session-id>",
  "result": "success"
}

...

Code Block
languagejson
{
  "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
languagejson
{
  "command": "session.request.addchannel",
  "target": "<session-id>",
  "data":
  {
    "channel":
    {
      "endpoint": "<CTI-channel-identifier>",
      "type": "Telephony | Chat | Email"
    }
  }
}

...

Code Block
languagejson
{
  "command": "session.request.addchannel",
  "target": "<session-id>",
  "result": "success",
  "data":
  {
    <Same data contents as original request>
  }
}

...

Code Block
languagejson
{
  "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
languagejson
{
  "command": "session.request.removechannel",
  "target": "<session-id>",
  "data":
  {
    "channel":
    {
      "id": "<channel-identifier>"
    }
  }
}

...

Code Block
languagejson
{
  "command": "session.request.removechannel",
  "target": "<session-id>",
  "result": "success",
  "data":
  {
    <Same data contents as original request>
  }
}

...

Code Block
languagejson
{
  "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
languagejson
{
  "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
languagejson
{
  "command": "session.request.addchannelgroup",
  "target": "<session-id>",
  "result": "success",
  "data":
  {
    <Same data contents as original request>
  }
}

...

Code Block
languagejson
{
  "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
languagejson
{
  "command": "session.request.removechannelgroup",
  "target": "<session-id>",
  "data":
  {
    "channel":
    {
      "id": "<channel-group-identifier>"
    }
  }
}

...

Code Block
languagejson
{
  "command": "session.request.removechannelgroup",
  "target": "<session-id>,
  "result": "success",
  "data":
  {
    <Same data contents as original request>
  }
}

...

Code Block
languagejson
{
  "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
languagejson
{
  "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
languagejson
{
  "command": "channelgroup.request.activateall",
  "target": "<session-id>.<channel-group-id>",
  "data":
  {
    "channeloptions":
    [
      {
        "id": "<channel-identifier>",
        "queue": "<channel-queue>"
      }
      …
    ]
  }
}

...

Code Block
languagejson
{
  "command": "channelgroup.request.activateall",
  "target": "<session-id>.<channel-group-id>",
  "result": "success",
  "data":
  {
    <Same data contents as original request>
  }
}

...

Code Block
languagejson
{
  "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
languagejson
{
  "command": "channelgroup.request.deactivateall",
  "target": "<session-id>.<channel-group-id>",
  "data":
  {
  }
}

...

Code Block
languagejson
{
  "command": "channelgroup.request.deactivateall",
  "target": "<session-id>.<channel-group-id>",
  "result": "success",
  "data":
  {
    <Same data contents as original request>
  }
}

...

Code Block
languagejson
{
  "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
languagejson
{
  "command": "channel.request.activate",
  "target": "<session-id>.<channel-id>" |
  "<session-id>.<channel-group-id>.<channel-id>",
  "data":
  {
    "channeloptions":
    {
      "queue": "<channel-queue>"
    }
  }
}

...

Code Block
languagejson
{
  "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
languagejson
{
  "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
languagejson
{
  "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
languagejson
{
  "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
languagejson
{
  "command": "channel.request.ready",
  "target": "<session-id>.<channel-id>" |
  "<session-id>.<channel-group-id>.<channel-id>",
  "data": {}
}

...

Code Block
languagejson
{
  "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
languagejson
{
  "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
languagejson
{
  "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
languagejson
{
  "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
languagejson
{
  "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
languagejson
{
  "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
languagejson
{
  "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
languagejson
{
  "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
languagejson
{
  "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.

...

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

...

languagejson

...

signal (InContact only)

Requests that a signal is sent to the active script for the interaction.

Request

Code Block
languagejson
{
  "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
languagejson
{
    "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
languagejson
{
  "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
languagejson
{
  "command": "interaction.request.acceptincontact.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
languagejson
{
  "command": "interaction.rejectrequest.accept",
  "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
  "data": {}
}

...

Code Block
languagejson
{
  "command": "interaction.rejectrequest.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
languagejson
{
  "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
languagejson
{
  "command": "interaction.request.setinteractiondatareject",
  "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
languagejson
{
  "command": "interaction.setinteractiondatarequest.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
languagejson
{
  "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.datachangedended

  • 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
languagejson
{
  "command": "interaction.request.setdispositionsetinteractiondata",
  "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
  "data":
  {
    "dispositionkey": "[name-of-data-item]",
    "value": "[disposition-textvalue-of-data-item]"
  }
}

Success Response

Code Block
languagejson
{
  "command": "interaction.setdispositionrequest.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
languagejson
{
  "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 completedinteraction disposition cannot be updated for some reason.

Request

Code Block
languagejson
{
  "command": "interaction.request.completesetdisposition",
  "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
  "data":
  {}
}

Success Response

Code Block
languagejson
{
    "commanddisposition": "interaction.complete[disposition-text]"
  }
}

Success Response

Code Block
languagejson
{
  "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
languagejson
{
  "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.

...

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
languagejson
{
  "command": "interaction.request.complete",
  "target": "<session-id>.<channel-id>.<interaction-id>" |   "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
  "data": {}
}

Success Response

Code Block
languagejson
{
  "resultcommand": "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.

If a skill has Interaction Disposition enabled, the media bar will receive a NeedsInfo response:

Code Block
languagejson
{
 

Failure Response

Code Block
languagejson
{
  "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",<stack-trace-if-applicable>"
     },
  "priorityoriginal":
0,  {
    <Contains the "isPreviewDisposition": true
 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
languagejson
{
  "originalcommand": "interaction.request.complete",
 { "target": "<session-id>.<channel-id>" |
 <Contains the original request JSON  "<session-id>.<channel-group-id>.<channel-id>",
  "result": "needinfo",
  "uiExtension":
  {
    "type": "agentstate"
  },
  "original":
  {
    <Contains the original request JSON structure>
  }
}

The This indicates that 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.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

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
languagejson
{
  "command": "interaction.request.consultcomplete",
  "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
  "dataresult":   {"needinfo",
    "destinationuiExtension":
"[number-to-dial]"  {
} }

Success Response

Code Block
languagejson
{   "commandtype": "interaction.consultdisposition",
     "targetdispositionRequired": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
  "result": "success",
  "data":
  { true | false,
    "dispositions":
    [
      {
      <Same data contents as original request>"dispositionId": 0,
    } }

Failure Response

Code Block
languagejson
{   "commanddispositionName": "interaction.consultstring",
  "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",   "resultpriority": "failure"0,

 "failure":   {     "codeisPreviewDisposition": "<error-code-for-failure>",true
    "message": "<error-message>", }
    ]
 "context": "<stack-trace-if-applicable>"
  },
  "original":
  {
    <Contains the original request JSON structure>
  }
}

Secondary Events

Placing a consult call 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:

  • state.updated (interaction state event)

  • state.updated (conversation state event, original call)

  • conversation.created.complete

  • state.updated (conversation interaction state event, new call)

  • conversation.member.added

  • conversation.initializedinteraction.disposed

interaction.

...

request.

...

consult (Telephony only)

Places the current talking party call on hold and retrieves the other held party.  A failure is generated if a consult call is not connectedattempts 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
languagejson
{
  "command": "interaction.alternaterequest.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
languagejson
{
  "command": "interaction.alternaterequest.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
languagejson
{
  "command": "interaction.request.alternateconsult",
  "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 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, consult new call)

  • conversation.member.added

  • conversation.initialized

  • interaction.focuschanged

interaction.request.

...

alternate (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 togetherPlaces the current talking party on hold and retrieves the other held party.  A failure is generated if a consult call is not connected or the call cannot be transferred.

Request

Code Block
languagejson
{
  "command": "interaction.request.consulttransferalternate",
  "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
  "data": {}
}

...

Code Block
languagejson
{
  "command": "interaction.consulttransferrequest.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
languagejson
{
  "command": "interaction.request.consulttransferalternate",
  "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 Alternating between the primary and consult calls 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.focuschanged

interaction.

...

request.

...

consulttransfer (Telephony only)

Attempts to conference transfer the consult original call party into to the original consult call party.  If successful, both conversations will end for this agent and the two parties will be in conference connected together.  A failure is generated if a consult call is not connected or the call cannot be conferencedtransferred.

Request

Code Block
languagejson
{
  "command": "interaction.request.consultconferenceconsulttransfer",
  "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
  "data": {}
}

...

Code Block
languagejson
{
  "command": "interaction.request.consultconferenceconsulttransfer",
  "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
languagejson
{
  "command": "interaction.consultconferencerequest.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 conference transfer will generate the following secondary events:

  • state.updated (conversation state event, consult original call)

  • conversation.disposed (consult original call)conversation.memeber.added (original call, consult party)

  • interaction.focuschanged

  • state.updated (conversation state event, original consult call)

  • conversation.disposed (consult call)

  • interaction.focuschangedended

interaction.request.

...

consultconference (Telephony only)

Attempts to start call recording.  If recording is already underway, this should successfully returnconference 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
languagejson
{
  "command": "interaction.request.recording.startconsultconference",
  "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
  "data": {}
}

...

Code Block
languagejson
{
  "command": " interaction.request.recording.startconsultconference",
  "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
languagejson
{
  "command": " interaction.request.recording.startconsultconference",
  "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 a consult conference will generate the following secondary events:

  • state.updated (interaction state event)conversation state event, consult call)

  • conversation.disposed (consult call)

  • conversation.memeber.added (original call, consult party)

  • state.updated (conversation state event, original call)

  • interaction.focuschanged

interaction.request.recording.

...

start (Telephony only)

Attempts to stop start call recording.  If recording is already stoppedunderway, this should successfully return.

...

Code Block
languagejson
{
  "command": "interaction.request.recording.stopstart",
  "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
  "data": {}
}

...

Code Block
languagejson
{
  "command": " interaction.request.recording.stopstart",
  "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
languagejson
{
  "command": " interaction.request.recording.stopstart",
  "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 start recording will generate the following secondary events:

  • state.updated (interaction state event)

interaction.request.recording.

...

stop (Telephony only)

Attempts to pause stop call recording.  Not all platforms will support the pause operation and will return an unsupported errorIf recording is already stopped, this should successfully return.

Request

Code Block
languagejson
{
  "command": "interaction.request.recording.pausestop",
  "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
  "data": {}
}

...

Code Block
languagejson
{
  "command": " interaction.request.recording.pausestop",
  "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
languagejson
{
  "command": " interaction.request.recording.pausestop",
  "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 stop recording will generate the following secondary events:

  • state.updated (interaction state event)

interaction.request.recording.

...

pause (Telephony only)

Attempts to resume pause call recording.  Not all platforms will support the resume pause operation and will return an unsupported error.

...

Code Block
languagejson
{
  "command": "interaction.request.recording.resumepause",
  "target": "<session-id>.<channel-id>.<interaction-id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>",
  "data": {}
}

...

Code Block
languagejson
{
  "command": " interaction.request.recording.resumepause",
  "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
languagejson
{
  "command": " interaction.request.recording.resumepause",
  "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 pause recording will generate the following secondary events:

  • state.updated (interaction state event)

...

interaction.request.recording.resume (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.

Attempts to resume call recording.  Not all platforms will support the resume operation and will return an unsupported error.

Request

Code Block
languagejson
{
  "command": "conversation.answerinteraction.request.recording.resume",
  "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
languagejson
{
  "command": "conversation.answer interaction.request.recording.resume",
  "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
languagejson
{
  "command": "conversation.answer interaction.request.recording.resume",
  "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 Performing resume recording will generate the following secondary events:

  • state.updated (conversation state event)interaction .screenpopstate.updated (interaction state event)

conversation.

...

request.answer (Telephony only)

Disconnects the agent from an active Answers an inbound 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 conferenceThis request also assigns the interaction to the agent as if "interaction.accept" were used.  A failure is generated if the call cannot be disconnectedanswered.

Request

Code Block
languagejson
{
  "command": "conversation.request.releaseanswer",
  "target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
  "data": {}
}

...

Code Block
languagejson
{
  "command": "conversation.releaserequest.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
languagejson
{
  "command": "conversation.request.releaseanswer",
  "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 Answering an active inbound call will generate the following secondary events:

  • state.updated (conversation state event)

  • conversation.disposed

  • interaction.ended (if only conversation is released)screenpop

  • state.updated (interaction state event)

conversation.

...

request.release (Telephony only)

Places the target conversation on holdDisconnects 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 helddisconnected.

Request

Code Block
languagejson
{
  "command": "conversation.holdrequest.release",
  "target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
  "data": {}
}

...

Code Block
languagejson
{
  "command": "conversation.holdrequest.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
languagejson
{
  "command": "conversation.request.holdrelease",
  "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 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)

Retrieves Places the target conversation from on hold.  A failure is generated if the call cannot be retrievedheld.

Request

Code Block
languagejson
{
  "command": "conversation.request.retrievehold",
  "target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
  "data": {}
}

...

Code Block
languagejson
{
  "command": "conversation.request.retrievehold",
  "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
languagejson
{
  "command": "conversation.request.retrievehold",
  "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 Holding an active call will generate the following secondary events:

  • state.updated (conversation state event)

conversation.request.

...

retrieve (Telephony only)

Places Retrieves the target conversation on mutefrom hold.  A failure is generated if the call cannot be mutedretrieved.

Request

Code Block
languagejson
{
  "command": "conversation.request.muteretrieve",
  "target": "<session-id>.<channel-id>.<interaction-id>.<conversation.id>" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>.<conversation.id>",
  "data": {}
}

...

Code Block
languagejson
{
  "command": "conversation.request.muteretrieve",
  "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
languagejson
{
  "command": "conversation.request.muteretrieve",
  "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 Retrieving a held call will generate the following secondary events:

  • state.updated (conversation state event)

conversation.

...

request.mute (Telephony only)

Unmutes Places the target conversation on mute.  A failure is generated if the call cannot be unmutedmuted.

Request

Code Block
languagejson
{

...


  "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
languagejson
{

...


  "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>

}


  {
    <Same data contents as original request>
  }
}

Failure Response

Code Block
languagejson
{

...


  "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>


  {
    <Contains the original request JSON structure>
  }
}

Secondary Events

Unmuting a Muting an active call will generate the following secondary events:·      

  • state.updated (conversation state event)

conversation.request.

...

unmute (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 interfaceUnmutes the target conversation.  A failure is generated if DTMF the call cannot be sentunmuted.

Request

Code Block
languagejson
{

...


  "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
languagejson
{
  "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>

}


  {
    <Same data contents as original request>
  }
}

Failure Response

Code Block
languagejson
{

...


  "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>


  {
    <Contains the original request JSON structure>
  }
}

Secondary Events

Sending DTMF tones does not generate any secondary events.

...

Unmuting a call will generate the following secondary events:

  • state.updated (conversation state event)

conversation.request.senddtmf (Telephony only)

Attempts Generates DTMF tones to transfer the call to the given destination.  The call will be disconnected from the agent regardless of whether it is successfulother 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 the call DTMF cannot be transferredsent.

Request

Code Block
languagejson
{

...


  "command": "conversation.request.

...

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
languagejson
{

...


  "command": "conversation.request.

...

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>

}


  {
    <Same data contents as original request>
  }
}

Failure Response

Code Block
languagejson
{

...


  "command": "conversation.request.

...

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>


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

...

Sending DTMF tones does not generate any secondary events.

conversation.request.blindtransfer (Telephony only)

Attempts to conference transfer the party at call to the given destination into the original callIf successful, both parties will be in conference togetherThe call will be disconnected from the agent regardless of whether it is successful.  A failure is generated if the call cannot be conferencedtransferred.

Request

Code Block
languagejson
{

...


  "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
languagejson
{

...


  "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>

}


  {
    <Same data contents as original request>
  }
}

Failure Response

Code Block
languagejson
{

...


  "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>


  {
    <Contains the original request JSON structure>
  }
}

Secondary Events

Performing a blind conference transfer will generate the following secondary events:·       conversation.memeber.added (original call, destination party)·      

  • state.updated (conversation state event, original call)

...

  • conversation.disposed (original call)

  • interaction.

...

  • focuschanged

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.

{

"messageType": "objectEvent",

"target": "<session_id>.<channel-id>" | "<session_id>.<channelgroup_id>.<channel-id>",

"name": "interaction.created",

"data":

{

"interaction":

{

"id": "<interaction_id>",

"nativeId": "<interaction_native_id>",

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

channel.externaldispositions.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 request.

{

"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"

},

]

},

]

}

}

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.

{

"messageType": "objectEvent",

...

  • 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
languagejson
{
  "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]"
  }
}

Success Response

Code Block
languagejson
{
  "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>
  }
}

Failure Response

Code Block
languagejson
{
  "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>
  }
}

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
{
  "messageType": "objectEvent",
  "target": "<session_id>.<channel-id>" | "<session_id>.<channelgroup_id>.<channel-id>",
  "name": "interaction.created",
  "data":
  {
    "interaction":
    {
      "id": "<interaction_id>",
      "nativeId": "<interaction_native_id>",
      "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.

channel.externaldispositions.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 request.

Code Block
languagejson
{
  "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"
          },
          …
        ]
      },
      …
    ]
  }
}

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
languagejson
{
  "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
languagejson
{
  "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 provided signal is no longer available to use with the referenced interaction.

Code Block
languagejson
{
  "messageType": "objectEvent",
  "target": "<session-id>.<channel-id>.<interaction-id>

...

" | "<session-id>.<channel-group-id>.<channel-id>.<interaction-id>

...

",

...


  "name": "

...

interaction.incontact.

...

signalremoved",

...


  "data":

...

{

<platform-specific-conversation-data>

}


  {
    "contactId": "<contact id>",
    "name": "<signal name>"
  }
}