Transfer actions

An external actions node of type “Transfer” in Mix.dialog sends an Escalation action in the DGLaaS API. This action can be used, for example, to escalate to an IVR agent in IVR applications.

Message

Transfer nodes can be configured with a message to play to the user. This is passed along to the client as a message action within the escalation action. This gives something to inform the user that you are about to transfer them.

Data

Any data set in the Transfer node is sent as part of the Escalation action data field. Data contains key-value pairs of session variable data. The data can potentially be used to provide some information and context about the caller and call to the recipient of the transfer.

Escalation settings

Self-hosted Speech Suite deployments and Nuance-hosted IVR applications:: This feature requires version 1.5.0 (or later) of the Dialog service. This corresponds to engine pack 2.4 for Speech Suite deployments. IVR applications using Nuance Speech Suite with VoiceXML Connector don’t yet support specifying a transfer action type and destination for external actions nodes of type Transfer.

For IVR applications, an Escalation action can include additional escalation settings configured in Mix.dialog. These provide additional information to configure and direct the transfer.

Escalation settings contain two useful pieces of information:

  • type: The type of transfer
  • destination: (Optional) Where the transfer is going (for example, a telephone number or routing number)

The type is a string and can take on one of the following currently supported values:

  • blind: The IVR application connects the caller to the called party and drops the connection. Blind transfers do not monitor call outcomes.
  • route-request: The IVR application transfers to an agent or agent queue, or can delegate the routing logic to an agent management app such as Dynamics 365. In this case, there will be no specific transfer destination defined in Mix.dialog, as the logic is contained in another component.

When the type is not configured in Mix.dialog, an empty string is returned.

Bridged: The IVR application connects the caller to the called party and stays connected for the duration of the transferred call.

Consultative: The IVR application attempts to connect the caller to the called party. If the attempt fails, IVR application proceeds with the caller. If the attempt succeeds, the application completes the transfer and disconnects from the call. The application disconnects on pickup/answer. This option supports “far-end” dialogs where information can provided along with the transfer request. for example, “incoming call from Sam, press 1 to connect.”

Conditional: The IVR application waits to hear a ring before completing the transfer. If the attempt fails, IVR application proceeds with the caller. If the attempt succeeds, the application completes the transfer and disconnects from the call. This option does not support “far-end” dialogs.

Escalation settings will typically be passed by the IVR application integrating with Dialog to the tool or service that handles the transfer.

Continuing the flow

To continue the flow, the client application must return data in the requested_data field of the next ExecuteRequestPayload. At a minimum, this data must include a returnCode. It can also include data requested by the dialog, if any. The returnCode is required, otherwise the Execute request will fail. A returnCode of “0” indicates a successful interaction.

Escalation transfer example

For example, consider a scenario where the Transfer action is used to escalate to an agent to confirm a customer’s data, as shown in the following Mix.dialog node:

Transfer actions

This transfer action sends the userName and userID variables to the client application in an escalation_action, as follows:

{
    "payload": {
        "messages": [],
        "escalation_action": {
            "data": {
                "userName": "Miranda Smith",
                "userID": "MIRS82734"
            },
            "id": "TransferToAgent",
            "escalation_settings": {
                "type": "blind",
                "destination": "18001234567"
            }
        }
    }
}

The client application transfers the call and then returns a returnCode to the dialog to provide the status of the transaction. If the transfer was successful, a returnCode of “0” returned. For example:

{
    "selector": {
        "channel": "default",
        "language": "en-US",
        "library": "default"
    },
    "payload": {
        "requested_data": {
            "id": "TransferToAgent",
            "data": {
                "returnCode": "0"
            }
        }
    }
}