Cargas útiles personalizadas del agente virtual

La carga útil personalizada para Dialogflow CX te permite mejorar la experiencia de tu agente virtual más allá de las interacciones y el chat basados en texto simple. Si usas cargas útiles personalizadas en Dialogflow CX, puedes configurar tu agente virtual para que renderice respuestas y citas personalizadas.

Tipos de mensajes de respuesta personalizados

Respuestas personalizadas te permite renderizar los siguientes tipos de mensajes:

  • Texto

  • Botones intercalados

  • Botones que se pegan

  • Imágenes

  • Videos

  • Documentos

  • Vistas complejas (combinación de uno o más tipos de mensajes)

Las acciones personalizadas permiten que los agentes virtuales realicen las siguientes acciones:

  • Derivaciones a agentes humanos

  • Transferencias planificadas a agentes humanos

  • Finalizar sesión de asistencia

Carga útil de Contact Center AI Platform (plataforma de CCAI)

Se usará en Dialogflow CX como carga útil personalizada. En el siguiente ejemplo, se muestra el formato de las respuestas en el SDK web con Dialogflow CX.

{
  "ujet": {
    "type": "text|inline_button|sticky_button|image|video|document|complex|action",
    "action": "escalation|end",
    "title": "message displayed on the top of the message",
    "escalation_reason": "by_consumer|by_virtual_agent",
    "session_variable": {
      "capture_target": "payload|end_user_response",
      "capture_key": "key",
      "payload": {
      }
    },
    "messages": [
      "Hello",
      "How can I help you?"
    ],
    "buttons": [
      {
        "title": "Button 1",
        "action": "quick_reply"
      },
      {
        "title": "Button 2",
        "action": "quick_reply"
      }
    ],
    "images": [
      {
        "url": "https://image.url",
        "text": "an alternate text for an image for when failed to load an image"
      },
      {
        "url": "https://image.url",
        "text": "an alternate text for an image"
      }
    ],
    "videos": [
      {
        "url": "https://video.url",
        "text": "an alternate text for a video for when failed to load a video"
      },
      {
        "url": "https://video.url",
        "text": "an alternate text for a video"
      }
    ],
    "documents": [
      {
        "url": "https://document.url",
        "text": "an alternate text for a document for when failed to load a document"
      },
      {
        "url": "https://document.url",
        "text": "an alternate text for a document"
      }
    ],
    "components": [
      {
        "type": "text",
        "messages": [
          "We need the information for helping you.",
          "Could you please choose the following options?"
        ]
      },
      {
        "type": "inline_button",
        "buttons": [
          {
            "title": "Button 1",
            "action": "quick_reply"
          },
          {
            "title": "Button 2",
            "action": "quick_reply"
          }
        ]
      },
      {
        "type": "image",
        "images": [
          {
            "url": "https://image.url",
            "text": "an alternate text for an image for when failed to load an image"
          },
          {
            "url": "https://image.url",
            "text": "an alternate text for an image"
          }
        ]
      }
    ]
  }
}

Formato del mensaje de chat para la carga útil personalizada

Se usa con el SDK de CCAI Platform para mostrar una IU adecuada. Es igual al formato de carga útil personalizada de Dialogflow CX, pero no tiene el campo "ujet" en la raíz.

Consulta los siguientes ejemplos para obtener más detalles.

Ejemplos

En las siguientes secciones, se incluyen ejemplos de cargas útiles que se pueden usar en Dialogflow CX.

Texto

{
  "ujet": {
    "type": "text",
    "messages": [
      "Hello",
      "How can I help you?"
    ]
  }
}

Derivación a la misma fila

A través del agente virtual:

{
  "ujet": {
    "type": "action",
    "action": "escalation",
    "escalation_reason": "by_virtual_agent"
  }
}

Por usuario final:

{
  "ujet": {
    "type": "action",
    "action": "escalation",
    "escalation_reason": "by_consumer"
  }
}

El valor de escalation_reason se registra en los paneles.

Derivación a la fila de destino

A través del agente virtual:

{
  "ujet": {
    "type": "action",
    "action": "escalation",
    "escalation_reason": "by_virtual_agent",
    "menu_id": 100,
    "language": "ko"
  }
}

Por usuario final:

{
  "ujet": {
      "type": "action",
      "action": "escalation",
      "escalation_reason": "by_consumer",
      "menu_id": 100,
      "language": "ko"
  }
}

El valor de escalation_reason se registra en los paneles.

Finalizar conversación

{
  "ujet": {
    "type": "action",
    "action": "end"
  }
}

Botón intercalado

{
  "ujet": {
    "type": "inline_button",
    "title": "Select a menu",
    "buttons": [
      {
        "title": "Lorem Ipsum",
        "action": "quick_reply"
      },
      {
        "title": "Lorem Ipsum Dolor Sit Amet",
        "action": "escalation"
      }
    ]
  }
}

Ejemplo

Ejemplo de botón intercalado

Botón fijo

{
  "ujet": {
    "type": "sticky_button",
    "title": "Select a menu",
    "buttons": [
      {
        "title": "Lorem Ipsum",
        "action": "quick_reply"
      },
      {
        "title": "Lorem Ipsum Dolor Sit Amet",
        "action": "escalation"
      }
    ]
  }
}

Ejemplo

Ejemplo de botón fijo

Vista de imagen

{
  "ujet": {
    "type": "image",
    "title": "Please see the following images",
    "images": [
      {
        "url": "https://image1.url",
        "text": "an alternate text for an image for when failed to load an image"
      },
      {
        "url": "https://image2.url",
        "text": "an alternate text for an image"
      }
    ]
  }
}

Vista de video

{
  "ujet": {
    "type": "video",
    "title": "Please see the following videos",
    "videos": [
      {
        "url": "https://video1.url",
        "text": "an alternate text for a video for when failed to load a video"
      },
      {
        "url": "https://video2.url",
        "text": "an alternate text for a video"
      }
    ]
  }
}

Vista del documento

{
  "ujet": {
    "type": "document",
    "title": "Please see the following document",
    "documents": [
      {
        "url": "https://document1.url",
        "text": "an alternate text for a document for when failed to load a document"
      },
      {
        "url": "https://document2.url",
        "text": "an alternate text for a document"
      }
    ]
  }
}

Vista compleja

{
  "ujet": {
    "type": "complex",
    "type": "Welcome to CCAI Platform world!",
    "components": [
      {
        "type": "text",
        "messages": [
          "We need the information for helping you.",
          "Could you please choose the following options?"
        ]
      },
      {
        "type": "inline_button",
        "buttons": [
          {
            "title": "Button 1",
            "action": "quick_reply"
          },
          {
            "title": "Button 2",
            "action": "quick_reply"
          }
        ]
      },
      {
        "type": "image",
        "images": [
          {
            "url": "https://image1.url",
            "text": "an alternate text for an image for when failed to load an image"
          },
          {
            "url": "https://image2.url",
            "text": "an alternate text for an image"
          }
        ]
      }
    ]
  }
}

Cómo configurar una carga útil personalizada en Dialogflow

Para obtener más información sobre cómo configurar tu carga útil personalizada con Dialogflow, consulta los recursos de respuestas de carga útil personalizada (Dialogflow ES) o carga útil personalizada (Dialogflow CX).

Para obtener más información, consulta Variables de sesión personalizadas para el procesamiento de cargas útiles personalizadas.

Transferencia del agente virtual a un número de teléfono o un extremo SIP

Puedes usar cargas útiles personalizadas de Dialogflow CX para transferir llamadas de un agente virtual de voz al número de teléfono o al extremo SIP que especifiques. Si la conexión se realiza correctamente, se quitará el agente virtual de la llamada y esta continuará. Si la conexión falla, se reproduce un mensaje de falla de transferencia y la llamada continúa con el agente virtual.

Las transferencias de agentes virtuales funcionan para llamadas internas y externas. Las transferencias de agentes virtuales se registran como Planned Transfers en los informes.

Cómo transferir una llamada a un número de teléfono

Para transferir una llamada de un agente virtual a un número de teléfono, usa una carga útil de Dialogflow CX similar al siguiente muestra de código:

{
  "ujet": {
    "type": "action",
    "action": "deflection",
    "deflection_type" : "phone",
    "phone_number": "+16509424879"
  }
}

Transfiere una llamada a un extremo SIP

Para transferir una llamada de un agente virtual a un extremo SIP de la manera estándar, usa una carga útil de Dialogflow CX similar a la siguiente muestra de código:

{
  "ujet": {
    "type": "action",
    "action": "deflection",
    "deflection_type" : "sip",
    "sip_uri": "sip:1-999-123-4567@voip-provider.example.net"
  }
}

Transfiere una llamada a un extremo SIP con el método SIP REFER

Para transferir una llamada de un agente virtual a un extremo SIP con el método SIP REFER, usa una carga útil de Dialogflow CX similar a la siguiente muestra de código. Con el método REFER de SIP, puedes pasar información útil con las propiedades del encabezado.

{
    "ujet": {
       "type": "action",
       "action": "deflection",
       "deflection_type" : "sip"
       "sip_uri": "sip:1-999-123-4567@voip-provider.example.net"
       "sip_refer": true
       "sip_parameters": {
       "x-header": "value",
       "x-header": "value"
       }
    }
}

Variables de sesión personalizadas para el control de cargas útiles personalizadas

Usa variables de sesión personalizadas para capturar valores de la respuesta de la intención y la respuesta del usuario final. Luego, recopila todos los valores y súbelos al CRM como un comentario. Para obtener más información, consulta Carga útil de Dialogflow para variables de sesión personalizadas.

Captura de la respuesta del usuario final

Flow

  1. La plataforma de CCAI solicita la respuesta a Dialogflow CX.

    Dialogflow CX puede realizar una devolución de llamada al servidor del cliente a través de Fulfillment.

    Se supone que el servidor del cliente debe completar el campo session_variable en la respuesta.

  2. Dialogflow CX devuelve la respuesta con la carga útil personalizada que incluye el campo session_variable con capture_target = end_user_response.

  3. Un usuario final envía un mensaje.

  4. La plataforma de CCAI conserva el mensaje del usuario final que se envió en el paso anterior.

  5. CCAI Platform publicará todas las variables de sesión que se hayan capturado en la sesión de chat en el CRM como un comentario cuando un agente virtual abandone un chat.

Formato de carga útil personalizado

{
  "ujet": {
    "session_variable": {
      "capture_target": "end_user_response",
      "capture_key": "key"
    }
  }
}

El siguiente mensaje del usuario final inmediatamente después de que un agente virtual envíe una carga útil personalizada se capturará como una variable de sesión con la clave "key".

Captura de la respuesta del intent

Flow

  1. La plataforma de CCAI solicita la respuesta a Dialogflow CX.

    1. Dialogflow CX puede volver a llamar al servidor del cliente a través de Fulfillment.

    2. Se supone que el servidor del cliente debe completar el campo session_variable en la respuesta.

  2. Dialogflow CX devuelve la respuesta con la carga útil personalizada, incluido el campo session_variable con capture_target = "payload".

  3. El servidor de CCAI Platform conserva el objeto payload en el paso 2.

CCAI Platform publicará todas las variables de sesión que se hayan capturado en la sesión de chat en el CRM como un comentario cuando un agente virtual abandone un chat.

Formato de carga útil personalizado

{
  "ujet": {
    "session_variable": {
      "capture_target": "payload",
      "capture_type": [
        "comment",
        "agent"
      ],
      "payload": {
        "status": "STATUS",
        "order_id": "ORDER_ID",
        "personal_id": "PERSONAL_ID"
      },
        "invisible_to_agent": ["INVISIBLE_TO_AGENT"],
        "display_order_in_adapter": ["DISPLAY_ORDER_IN_ADAPTER"]
    }
  }
}

Reemplaza lo siguiente:

  • STATUS: Es el estado del pedido.

  • ORDER_ID: Es el ID del pedido.

  • PERSONAL_ID: Es un identificador del usuario final.

  • INVISIBLE_TO_AGENT: Es un array de propiedades que no quieres que se vean en el adaptador del agente. Por ejemplo, un valor de "personal_id" aquí evitaría que la propiedad personal_id se muestre en el adaptador del agente. Para obtener más información, consulta Cómo mostrar variables de sesión del agente virtual.

  • DISPLAY_ORDER_IN_ADAPTER: Es un array de propiedades para especificar el orden en que deben aparecer las variables de sesión en el adaptador del agente y en los registros del CRM. Para obtener más información, consulta Cómo mostrar variables de sesión del agente virtual.

Carga de variables de sesión personalizadas en el CRM

Para cada variable de sesión, se supone que el servidor recopila todas las variables de sesión de forma interna y, luego, las sube al CRM cuando se cierra un agente virtual.

Ejemplo de mensaje de CRM

    ###########################

    Chat ID: 1
    Menu ID: 1
    Chatbot Platform: Platform Name
    Chatbot Workflow: Workflow Name
    Virtual Agent: Virtual Agent Name

    ###########################

    Intent: Intent Captured from End User Response
    Captured At: 2020-06-25 14:54:19

    Captured Variables
    request: Cancel Order

    ###########################

    Intent: Intent Captured from Payload
    Captured At: 2020-06-25 14:58:23

    Captured Variables
    status: Cancelled
    order_id: #12345

    ###########################

Situación de ejemplo

A continuación, se muestra una conversación de ejemplo que ilustra los diferentes pasos y los mensajes intercambiados entre el agente virtual y el usuario final.

Paso 1

Mensaje de chat del agente virtual

How can I help you? (Button) Show my orders (Button) Cancel an order

Respuesta de intención (carga útil personalizada)

{
  "ujet": {
    "type": "inline_button",
    "title": "How can I help you?",
    "buttons": [
      {
        "title": "Show my orders",
        "action": "quick_reply"
      },
      {
        "title": "Cancel an order",
        "action": "quick_reply"
      }
    ]
  }
}

Variable de sesión capturada

Ninguno

Paso 2

Mensaje de chat del usuario final

Click "Cancel an order" button.

Variable de sesión capturada

Ninguno

Paso 3

Mensaje de chat del agente virtual

Can you provide the order id please

Respuesta de intención (carga útil personalizada)

{
  "ujet": {
    "type": "text"
    "messages": [
      "Can you provide the order id please"
    ],
    "session_variable": {
       "capture_target": "end_user_response",
       "capture_key": "order_id";
    }
  }
}

Variable de sesión capturada

Ninguno

Paso 4

Mensaje de chat del usuario final

Order id is #12345

Variable de sesión capturada

order_id: "Order ID is #12345"

Paso 5

Mensaje de chat del agente virtual

Order #12345 is cancelled. Do you need anything else?

Respuesta de intención (carga útil personalizada)

{
  "ujet": {
    "type": "text",
    "messages": [
      "Order #12345 is canceled.",
      "Do you need anything else?"
    ],
    "session_variable": {
      "capture_target": "payload",
      "capture_type": [
        "agent",
        "comment",
        "event"
      ],
      "payload": {
        "order_id": "#12345",
        "order_status": "cancelled"
      }
    }
  }
}

Variable de sesión capturada

order_id: "#12345", order_status: canceled

Paso 6

Mensaje de chat del usuario final

I would like to speak with a human agent.

Paso 7

Mensaje de chat del agente virtual

Virtual Agent is left from the conversation.

{
  "ujet": {
    "type": "escalation",
    "escalation_reason": "by_consumer"
  }
}

Carga de variables de sesión personalizadas en el CRM

En el caso anterior, se publica el siguiente comentario en el ticket del CRM:

    ---------------------------------

    Chat ID: 1
    Menu ID: 1
    Chatbot Platform: Platform Name
    Chatbot Workflow: Workflow Name
    Virtual Agent: Virtual Agent Name

    --------------------------------

    Intent: Intent Captured from End User Response
    Captured At: 2020-06-25 14:54:19

    Captured Variables
    order_id: Order id is #12345.

    --------------------------------

    Intent: Intent Captured from Payload
    Captured At: 2020-06-25 14:58:23

    Captured Variables
    order_id: #12345
    order_status: canceled

    --------------------------------

Configura las tarjetas de contenido

Las tarjetas de contenido muestran contenido conciso y visualmente atractivo en un formato similar a una tarjeta, lo que crea interacciones más simples para que el usuario final consuma la información presentada. Puedes crear tarjetas de contenido con Dialogflow CX y personalizarlas con títulos, subtítulos y texto.

En el siguiente ejemplo, se usan tarjetas de contenido para mostrar opciones de restaurantes al usuario final:

Ejemplo de tarjeta de contenido

Propiedades de la tarjeta de contenido

Nombre de la propiedad Descripción Obligatorio Tipo
title Es el título de la tarjeta. String
subtitle Es el subtítulo de la tarjeta. No String
body Es la descripción de la tarjeta de contenido. String
link Un vínculo a una página web o un vínculo directo El SDK usará las capacidades del SO para abrirlo. No String
event_params Es un diccionario que contiene información adicional sobre el evento de clic. El SDK usará este valor. No Diccionario

Carga útil de Dialogflow CX: Agrega validación y acepta el tipo de tarjeta de contenido

Un tipo de carga útil específico de Dialogflow CX controla las tarjetas de contenido cuando se reciben mensajes de usuarios finales a través del servidor del chatbot. A continuación, se muestra un ejemplo de una carga útil de Dialogflow CX:

{
  "ujet": {
    "type": "content_card",
    "cards": [
      {
        "title": "Title",
        "subtitle": "Subtitle",
        "body": "Body",
        "link": "app://page",
        "event_params": {} # for deep-link click event
      }
    ]
  }
}

Información sobre las tarjetas de contenido en el historial de chat del CRM

La información del título de la tarjeta se registra para hacer un seguimiento de las tarjetas en las que hizo clic el usuario final. Esta información se registra en el historial de chat del CRM.

En el siguiente ejemplo, el historial de mensajes de chat en el CRM muestra la interacción de la tarjeta de contenido.

[Chat message history]
ID: 305   |   2023-07-06     PDT
--------------------------------------------------
[01:13:32     VA]     Welcome message

[01:14:35     Mobile U.]     Content Cards:
- Title 1
- Title 2

Registra eventos de clic en el título de la tarjeta de contenido

Para registrar cuando un usuario final hace clic en el título de una tarjeta de contenido, usa el siguiente formato para capturar el evento:

{end_user_name} clicked on the '{title}' card.
Note Title: Content Card click
Note Comment: 'John Doe' clicked on the 'See our new website' card.

Crea un evento de clic en una tarjeta de contenido con la API de End User Event

Cuando un usuario final hace clic en el título de una tarjeta de contenido, puedes registrar este evento enviando una solicitud POST a la URL especificada junto con el título de la tarjeta en la que se hizo clic.

Extremo de API: POST /api/v2/chat/:id/end_user_event

Uso: Crea un evento de clic en la tarjeta de contenido.

URL: /api/v2/chats/:id/end_user_event

Método: POST

Parámetros:

Campo Tipo Descripción
event objeto
event.name cadena Para los eventos de clic en tarjetas de contenido, usa content_card_clicked.
event.payload objeto
event.payload.title cadena Ingresa el título de la tarjeta en la que se hizo clic.
(Opcional) end_user_name cadena Ingresa el nombre del usuario final. Si se deja en blanco, el nombre se recuperará del CRM.

Ejemplo de solicitud:

{
  "event": {
    "name": "content_card_clicked",
    "payload": {
      "title": "New our website"
    }
  },
  "end_user_name": "consumer 1"   ## optional
}

Respuesta: Status: 202 Accepted