Componentes de la interfaz de usuario

Estos son los componentes que están disponibles en la categoría Interfaz de usuario del editor de flujo de diálogo basado en YAML.

Utilice estos componentes para mostrar el texto y la interfaz con el usuario:

System.CommonResponse

El componente System.CommonResponse permite crear mensajes con funciones de interfaz de usuario enriquecidas, como carruseles de tarjetas con imágenes y botones de acción, o formularios con tablas y campos de entrada.

Nota

En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Plantillas de componentes de respuesta común.

Las plantillas para System.CommonResponse están disponibles en la sección Mensajería de usuario del cuadro de diálogo Agregar componente.

La forma de crear mensajes basados en este componente depende del modo de diálogo de la aptitud. En el modo YAML, puede editar las plantillas de estado del componente OBotML. El proceso se simplifica en el modo visual, donde puede crear estos mensajes de interfaz de usuario enriquecidos simplemente actualizando los campos y metadatos del elemento de respuesta en la ventana de propiedades de las plantillas de mensajes de usuario basadas en componentes de respuesta común. Para las aptitudes basadas en YAML, puede ver un ejemplo de uso del componente System.CommonResponse en el CrcPizzaBot, uno de los bots de ejemplo. En este selector del PizzaBot, puede mostrar un menú con imágenes con los botones de acción rápida Order Now. En el contexto del componente System.CommonResponse, los diferentes tipos de mensajes se conocen como tipos de respuesta y CrcPizzaBot muestra cómo, entre otras cosas, permiten a los usuarios del bot responder a las peticiones de datos mediante botones de acción y ver el menú de pizza como una cascada de artículos de tarjeta.

En el menú Agregar componente, puede seleccionar plantillas System.CommonResponse diferentes para las tarjetas, el texto o las respuestas de anexos y para las entidades de bolsa compuesta (demostradas por CbPizzaBot). Estas plantillas incluyen ambas propiedades comunes a todas estas propiedades de tipo de respuesta que son específicas de los tipos de respuesta individuales. Aunque el menú Agregar componente agrega estados independientes para cada tipo de respuesta, puede combinar uno o más tipos de respuesta en un único estado. CrcPizzaBot muestra ejemplos de ambas en los estados ShowMenu (respuesta de texto) y OrderPizza (respuestas de texto y tarjeta).

Nota

Debe probar cada una de las aptitudes en los canales de destino al principio del ciclo de desarrollo, a fin de asegurarse de que los componentes se representen como desee.

Propiedades Componente

La configuración de componentes System.CommonResponse implica la definición de propiedades que dirigen el motor de diálogo junto con propiedades de metadatos que describen no solo cómo entrega los mensajes el componente (como peticiones de datos de texto, tarjetas o anexos), sino que también define el contenido y el comportamiento de los propios mensajes.

Nombre Descripción ¿Obligatoria?
metadata La respuesta de chat creada por este componente está controlada por el contenido de la propiedad metadata. Consulte Propiedad Metadatos en Componentes de Respuesta Comunes.
processUserMessage Defina esta propiedad en true para indicar al motor de diálogo que vuelva al estado después de que el usuario introduzca texto o toque un botón. Defina esta propiedad en false si no se necesita ninguna entrada de usuario (o se espera).

Defina esta propiedad en true al definir una ubicación.

autoNumberPostbackActions Esta propiedad se utiliza para las bolsas compuestas, las respuestas de texto y las respuestas de tarjeta. Si se define en true, esta opción prefija números a las opciones. Aunque esta opción no se haya definido en true, se puede aplicar la numeración automática a elementos de tarjeta si la configuración de Activar numeración automática en acciones de devolución del asistente digital está definida en true. Tal y como demuestra su configuración por defecto, la numeración automática específica del canal se puede aplicar a cualquier bot de aptitud que se haya registrado en un asistente digital (${(system.channelType=='twilio')?then('true','false')}): No
variable

Esta variable contiene el nombre de la variable de contexto o usuario que se rellena cuando un usuario responde introduciendo texto libre, en lugar de pulsar un botón. Esta propiedad se ignora cuando un usuario pulsa un botón, ya que la carga útil del botón determina qué valores de variables se definen. Si la propiedad de la variable ya se ha definido cuando el motor de diálogo pasa a este estado, se omite el estado.

Para entidades de bolsa compuesta, consulte la variable de entidad de bolsa compuesta. Se solicitan a los usuarios los valores de la entidad individual en la bolsa. Una vez establecidos todos los valores de entidad, el componente pasa al siguiente estado.

No
nlpResultVariable Establece la propiedad variable en un valor de entidad, si dicho valor de entidad no se ha establecido ya para la variable de referencia. Puede activar nlpResultVariable para que devuelva un valor si la define con una variable que contenga los resultados de NLP (como iResult: "nlpresult", que se utiliza en nuestros bots de ejemplo). Al hacerlo, la propiedad nlpResultVariable sigue pudiendo rellenar el valor cuando es nula, si encuentra una entidad resuelta que coincida con aquella a la que hace referencia la variable. El cuadro de diálogo pasa al estado siguiente cuando nlpResultVariable define el valor. Puede utilizar esta propiedad en lugar del componente System.SetVariable. No
useFullEntityMatches Cuando se define en true, los valores de entidad personalizados se almacenan como objetos JSON (similar a los valores de entidad incorporados). Esto le permite crear expresiones para acceder a propiedades como value, primaryLanguageValue y originalString, que son especialmente importantes para las aptitudes que actualmente o eventualmente pueden convertirse en multilingües. No
maxPrompts Antes de que el componente System.CommonResponse pueda rellenar el valor de variable especificado para la propiedad variable a partir del texto introducido por el usuario, valida el valor con respecto al tipo de variable. Puede ser una validación de tipo de entidad o, en el caso de un tipo primitivo, un valor que se puede forzar en el tipo primitivo.

Si el componente no puede validar el valor, el motor de diálogo envía el texto del mensaje y las opciones de nuevo. (Puede modificar este mensaje para reflejar el fallo de validación.) Para evitar un bucle infinito resultante de la incapacidad continuada del usuario para introducir un valor válido, utilice esta propiedad para definir un límite en el número de intentos de los que dispone el usuario. Si el usuario excede esta asignación, el componente System.CommonResponse pasa a la acción cancel. Consulte Limitación del número de peticiones de datos de usuario.

Como se describe en Creación de una entidad de bolsa compuesta, las entidades individuales de la bolsa compuesta pueden sustituir este valor cuando se define la opción Máximo de intentos de entrada de usuario.

No
keepTurn La propiedad keepTurn solo se aplica si se define la propiedad processUserMessage en false. Consulte System.Output para descubrir cómo definir esta propiedad. No
translate Utilice esta propiedad para sustituir el valor booleano definido para la variable de contexto autotranslate. Si no ha definido esta variable o si la ha definido en false, puede establecer esta propiedad en true para activar la traducción automática solo para este componente. Si define la variable autotranslation en true, puede establecer esta propiedad en false para excluir este componente de la traducción automática. Consulte Servicios de traducción en aptitudes. No
footerText Mejora la salida en canales de solo texto. Como se describe en Pies de página, puede utilizar expresiones de FreeMarker para condicionar el texto del pie de página en los canales de solo texto. No
transitionAfterMatch (en desuso) Valor booleano que, al definirlo en true, activa una transición temporal desde el proceso de coincidencia de la entidad realizada por este componente a otro estado. Esta propiedad ya no está soportada. Para obtener esta funcionalidad, utilice un manejador de eventos de entidad No
cancelPolicy Determina la temporización de la transición cancel:
  • immediate: inmediatamente después de que se haya alcanzado el juego de valores para el Máximo de intentos de entrada de usuario del elemento de bolsa. Si este valor no se ha definido, el componente arranca esta transición cuando se alcanza el valor maxPrompts del componente.

  • lastEntity: cuando la última entidad de la bolsa coincide con el valor.

Esta propiedad se ignora si se ha registrado un manejador de eventos de entidades con un manejador maxPromptsReached de nivel de evento o elemento.
No

A continuación, se muestra el YAML para un estado de ejemplo basado en el componente System.CommonResponse.

  AskPizzaSize:
    component: "System.CommonResponse"
    properties:
      variable: "pizzaSize"
      nlpResultVariable: "iresult"
      maxPrompts: 2
      metadata:
        responseItems:
        - type: "text"
          text: "<#if system.invalidUserInput == 'true'>Invalid size, please try again.\
            \ </#if>What size do you want?"
          name: "What size"
          separateBubbles: true
          actions:
          - label: "${enumValue}"
            type: "postback"
            payload:
              action: ""
              variables:
                pizzaSize: "${enumValue}"
            name: "size"
            iteratorVariable: "pizzaSize.type.enumValues"
      processUserMessage: true
    transitions:
      actions:
        cancel: "Intent"
      next: "AskLocation" 

Consejo:

La propiedad text en este fragmento se define mediante el lenguaje de plantilla de Apache FreeMarker (FTL). Para descubrir cómo agregar expresiones de FTL y usar operaciones incorporadas de FreeMarker para transformar los valores de las variables, consulte Sintaxis de lenguaje de plantilla de Apache FreeMarker.

Transiciones para el componente System.CommonResponse

Los componentes de respuesta común utilizan las siguientes transiciones.
Transición Descripción
cancel Se dispara cuando un usuario supera los intentos asignados definidos por la propiedad maxAttempts, o bien cuando se redirecciona el flujo.
textReceived Se activa cuando un usuario envía texto o emojis en lugar de pulsar un botón o enlace de acción.
attachmentReceived Se dispara cuando un usuario envía una imagen, audio, vídeo o anexo.
locationReceived Se dispara cuando el usuario envía una ubicación.
system.outOfOrderMessage Defínala para evitar comportamientos inesperados por parte del usuario. En concreto, que un usuario no pulse un elemento de acción del mensaje actual, sino que pulse una acción que pertenezca a un mensaje más antiguo de la sesión de chat.

Transiciones de bolsa compuesta en el componente System.CommonResponse

Estos componentes System.CommonResponse disparan las acciones match y cancel basándose en los valores coincidentes en la entrada de usuario y en la configuración de la propiedad cancelPolicy.
Acción Descripción ¿Obligatoria?
match El componente dispara esta acción para navegar al estado especificado cuando al menos una entidad de la bolsa coincide con la entrada del usuario. No
cancel El componente dispara esta acción para navegar al estado especificado según la configuración de la propiedad cancelPolicy. No

System.Webview

Nota

En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Componente de vista web.

El componente System.Webview abre una vista web dentro de la aptitud o, en el caso de las aptitudes que se ejecutan en un canal web, en un separador del explorador.

Propiedades del componente System.WebView

Propiedad Descripción ¿Obligatoria?
sourceVariableList Lista separada por comas de nombres de variables de contexto o de usuario. Estos nombres de variable son los parámetros que se envían a la vista web; son los parámetros de entrada del bot. Puede definir cada variable agregando una serie de estados System.SetVariable antes del estado System.Webview.
variable Nombre de la variable (valor de cadena) que identifica la carga útil de la vista web que se devuelve al bot una vez que el usuario completa su interacción en la vista web.

La carga útil se almacena en esta variable, a la que se puede acceder más adelante durante la definición del flujo de diálogo. Por ejemplo, puede hacer referencia a ella en un componente de salida.

prompt Cadena de texto como “Pulse para continuar" . No
service Nombre del servicio del componente de vista web. No
imageUrl URL de la imagen que acompaña una petición de datos. No
linkLabel Etiqueta del botón que llama a la aplicación web. No
cancelLabel Etiqueta del botón Cancelar que permite a los usuarios dejar el estado sin llamar a la aplicación web. No
autoNumberPostbackActions Permite la entrada de usuario en canales de SMS, que no admiten botones, al agregar equivalentes numéricos a los elementos de la interfaz de usuario.
  • false: sobrescribe la variable autoNumberPostbackActions global.

  • true

    Prefija el botón Cancelar con un número de secuencia que, cuando se introduce, ejecuta la carga útil de devolución del botón como si el usuario hubiese pulsado el botón, en lugar de introducir su equivalente numérico.
No
translate Utilice esta propiedad para sustituir el valor booleano definido para la variable de contexto autotranslate. Si no ha definido esta variable o si la ha definido en false, puede establecer esta propiedad en true para activar la traducción automática solo para este componente. Si define la variable autotranslation en true, puede establecer esta propiedad en false para excluir este componente de la traducción automática. Consulte Servicios de traducción en aptitudes. No

Transiciones para el componente System.Webview

Transiciones Descripción
next Asigna un nombre al siguiente estado del flujo de diálogo después de una devolución de llamada correcta de la aplicación web.
return Sale de la conversación después de una devolución de llamada correcta de la aplicación web.
error Asigna un nombre al estado que maneja los errores.
actions
  • cancel: asigna un nombre al estado que gestiona el escenario "el usuario pulsa cancelar".
  • textReceived: indica el estado cuando los usuarios introducen texto en lugar de pulsar uno de los botones.

System.IncidentCreation

Puede utilizar el componente System.IncidentCreation para crear un incidente en un sitio de servicio al cliente. Tenga en cuenta que debe crear una integración de servicio al cliente en la página Configuración > Servicios adicionales > Integración de servicio al cliente para poder utilizar este componente en la instancia.

Nota

En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Creación de incidentes.

Este es un ejemplo del uso de este componente para devolver la conversación a un sitio de Oracle B2C Service.

  component: "System.IncidentCreation"
    properties:
      serviceName: "IncidentService"
      subject: "${incident.value.subject}"
      attachmentUrl: <#if (incident.value.Attachment.url)??>${incident.value.Attachment.url}<#else></#if>
      customFields: 
        description: "${incident.value.description}"
        contactInfo: "<#if (profile.contactInfo)??>${profile.contactInfo}<#else></#if>"
      contactProperties: 
        firstName: "${profile.firstName}"
        lastName: "${profile.lastName}"
        email: "${incident.value.email}"
      incidentNumberVariable: "incidentNumber"
    transitions:
      error: "incidentError" 
      next: "exitIncident"

A continuación, se muestra un ejemplo de Oracle Fusion Service:

  component: "System.IncidentCreation"
  properties:
    serviceName: "IncidentServiceB2BEndUserAuth"
    subject: "${service.value.subject}"
    attachmentUrl: <#if (service.value.Attachment.url)??>${service.value.Attachment.url}<#else></#if>
    agentReportFilter: "ODAQueue"
    addChatTranscript: "true"      
    customFields: 
      description: "${service.value.description}"
      contactInfo: "<#if (profile.contactInfo)??>${profile.contactInfo}<#else></#if>"
    contactProperties: 
      firstName: "${profile.firstName}"
      lastName: "${profile.lastName}"
      email: "<#if (profile.email)??>${profile.email}<#else></#if>"
    incidentNumberVariable: "incidentNumber"
  transitions:
    error: "incidentError" 
    next: "exitIncident"
Propiedad Descripción ¿Obligatoria?
serviceName Nombre de la integración según se ha configurado en Configuración > Servicios adicionales > Integración de servicio al cliente.
subject El texto del asunto del incidente.
attachmentUrl URL de un documento o imagen relacionado con el incidente. Tenga en cuenta que la adición de anexos no está soportada para las aptitudes de DA como agente. No
agentReportFilter (Para incidentes de Oracle Fusion Service), texto para filtrar los incidentes. El valor por defecto es ODA. No
addChatTranscript (Solo para incidentes de Oracle Fusion Service). Cuando se define en true, la transcripción del chat se agrega al incidente. El valor por defecto es false.

Las estadísticas deben estar activadas para la aptitud para que la transcripción de chat esté disponible.

Una transcripción solo se puede agregar al incidente cuando se utiliza una integración de DA como agente en combinación con inserciones de Web Chat for Service u Oracle Inlay Toolkit.

No
customFields Una asignación que contiene description y, opcionalmente, contactInfo, que puede contener detalles adicionales sobre el incidente.

El mapa se pasa sin validar como una versión de texto del objeto y se inserta en el mensaje de incidente como una nota privada.

No
contactProperties Mapa de pares de nombre/valor que contiene la información necesaria para buscar o crear información de contacto de servicio al cliente. Debe contener email y, opcionalmente, puede contener firstName y lastName.

Si no se proporciona email, debe proporcionar firstName y lastName.

Solo para Oracle B2C Service
incidentNumberVariable Nombre de la variable de contexto de cadena en la que se almacena el número de incidente. No

System.IntelligentAdvisor

Utilice este componente para acceder a una entrevista de Oracle Intelligent Advisor desde una aptitud.

Nota

En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Intelligent Advisor.

Debe crear una integración de servicio de Intelligent Advisor para poder utilizar este componente. Consulte Adición de un servicio de Intelligent Advisor. Además, la entrevista se debe haber desplegado en el hub de Intelligent Advisor y se debe activar en el canal de servicio de chat. La entrevista debe ser para usuarios anónimos. No puede acceder a entrevistas para usuarios de portal o usuarios de agente.

Puede utilizar las propiedades del componente para especificar la siguiente configuración de entrevista:

  • Si se van a mostrar los títulos y la explicación
  • Las etiquetas de los botones Sí, No y No lo tengo claro
  • Las cadenas que el usuario introduce para restablecer, volver a la pregunta anterior (deshacer) y salir de la entrevista
  • El texto que se mostrará al final de la entrevista
  • Cómo formular la pregunta sobre si se va a mostrar la explicación
  • La cadena que introduce el usuario para indicar que ha terminado de cargar los archivos
  • Los valores de atributo y los parámetros de conector que se transferirán a la entrevista
  • Configuración regional del proyecto que se va a utilizar

Ejemplo:

  loanAdvisorIA:
    component: "System.IntelligentAdvisor"
    properties:
      intelligentAdvisorService: "myService"
      deployment: "Loan Advisor"
      # default yesLabel: "yes"
      # default noLabel: "no"
      uncertainLabel: "not sure"
      endLabel: "You can ask me another question if there's something else that I can help
    you with."
      # default doneLabel: "/done"
      # default undoLabel: "/back"
      # default resetLabel: "/reset"
      # default exitLabel: "/exit"
      showExplanation: "ask"
      # default explanationAskLabel: "Do you want to see the explanation?"
      # default removeHtml: false        
    transitions:
      error: "handleIAError"
      next: "endOfFlow"

  handleIAError:
    component: "System.Output"
    properties:
      text: |
        We are having a problem with a connection.
        Can you please send email to 
        contact@example.com to let them know that
        the loan advisor isn't working? Thank you.
    transitions:
      next: "endOfFlow"
      

Consulte Uso del componente Intelligent Advisor en la aptitud para ver un ejemplo que utiliza el componente en un flujo de diálogo.

Consejo:

Los valores por defecto de todas las propiedades de etiqueta se almacenan en el grupo de recursos de la aptitud. Para cambiar un valor por defecto, abra la página Grupo de recursos de la aptitud, haga clic en Icono Grupos de recursos, seleccione el separador Configuración y cambie el mensaje para la clave IntelligentAdvisor - <property name>. Si utiliza el grupo de recursos de la aptitud para cambiar el valor por defecto, no es necesario incluir la propiedad de etiqueta en el componente a menos que desee sustituir el valor por defecto.

El grupo de recursos de configuración también le permite cambiar los mensajes IntelligentAdvisor - defaultValue, IntelligentAdvisor - doneHelp, IntelligentAdvisor - maskLabel, IntelligentAdvisor - outOfOrderMessage, IntelligentAdvisor - resumeSessionPrompt, IntelligentAdvisor - numberMinMax, IntelligentAdvisor - outOfOrderMessage, IntelligentAdvisor - resumeSessionPrompt y IntelligentAdvisor - yesNoMessage. Por ejemplo, el mensaje IntelligentAdvisor - doneHelp se muestra para los campos de anexos y se define por defecto en When you are done with the upload, say {0}. Puede que desee cambiarlo a un valor similar a Say {0} to let me know that you are done uploading.

Propiedad Descripción ¿Obligatoria?
currency Código de moneda ISO-4217 para la moneda que se usa en la entrevista. Cuando se especifica este código, el usuario sólo puede introducir valores de moneda en los formatos permitidos para esa moneda. Puede definir esta propiedad en blanco o excluirla si la entrevista no solicita importes de moneda o no espera ninguna moneda determinada. No
deployment Nombre del proyecto de despliegue activo en el hub de Intelligent Advisor.
doneLabel Texto que los usuarios escriben para indicar que han terminado de cargar un archivo.

El valor por defecto es /done.

No
endLabel Texto para mostrar en el chat al final de la entrevista.

El valor por defecto es Interview ended. Puede definir la propiedad en "" para evitar que se muestre texto.

No
exitLabel Texto que los usuarios escriben para indicar que desean salir de la entrevista.

El valor por defecto es /exit.

No
explanationAskLabel Pregunta que se debe hacer cuando showExplanation se define en ask.

El valor por defecto es Do you want to see the explanation?

No
hideScreenTitle Indica si se deben ocultar todos los títulos de pantalla de la entrevista.

El valor por defecto es false, lo que significa que se deben mostrar los títulos de la pantalla.

No
intelligentAdvisorService Nombre del servicio de Intelligent Advisor configurado en Configuración > Servicios adicionales.
interviewAttributes Nombre de una variable de contexto de tipo cadena en la que se almacenan los valores de atributo de la entrevista. Los valores de atributo se almacenan como una matriz de pares clave/valor. No
locale

Esta propiedad afecta tanto a la entrevista de destino como a la resolución de fecha y número.

El componente inicia la versión de la entrevista con nombre (despliegue) asociada al idioma especificado por la propiedad locale del componente. Si no hay un despliegue de hub para la configuración regional especificada, el componente utiliza la configuración regional por defecto asociada al despliegue.

Para la entrada de fecha y número, los valores se resuelven según la configuración de entidad FECHA y NÚMERO. Cuando Considerar configuración regional de usuario final se cambia a Activado para la entidad, el valor se resuelve para la configuración regional especificada por esta propiedad (o el valor por defecto si no se especifica). Consulte Resolución de entidad basada en configuración regional.

Esta propiedad toma por defecto el valor profile.locale. Si profile.locale no tiene un valor, utiliza la configuración regional del canal.

No
noLabel Etiqueta que se utiliza para representar los valores FALSE booleanos.

El valor por defecto es No.

No
params Asignación de parámetros de conexión de clave-valor para transferir al inicio de la entrevista. Esto suele ser necesario para entrevistas con integración de datos externos. No
removeHtml Indica si se debe eliminar el marcado HTML del texto. El valor por defecto es false. No
resetLabel Texto que los usuarios escriben para indicar que desean volver a la primera pregunta.

El valor por defecto es /reset.

No
seedData Asignación de nombres y valores de atributos de Intelligent Advisor que se transferirán a la entrevista. Para los atributos de fecha y hora, utilice los formatos de fecha y hora estándar de Intelligent Advisor. Por ejemplo: start_date: "2010-01-31".

El atributo al que está transfiriendo el valor debe tener la opción Predefinir desde parámetro de URL activada en Policy Modeling.

No
showExplanation Especifica si se muestra la explicación de Intelligent Advisor. Los valores permitidos son never, always y ask.

Si se define en ask, utilice la propiedad explanationAskLabel a fin de especificar el texto para preguntar si el usuario desea ver la explicación.

El valor por defecto es never.

No
uncertainLabel Etiqueta que el usuario puede escribir si no conoce el valor. Esta etiqueta aparece para los botones de radio booleanos opcionales.

El valor por defecto es Uncertain.

No
undoLabel Texto que los usuarios escriben para indicar que desean volver a la pregunta anterior.

El valor por defecto es /back.

No
yesLabel Etiqueta que se utiliza para representar los valores de TRUE booleanos.

El valor por defecto es .

No

Ejemplo: uso del componente Intelligent Advisor en la aptitud

  ####################    
  # Loan Advisor
  ####################

  loanAdvisorStart:
    component: "System.Output"
    properties:
      keepTurn: true
      text: |
        OK, I can initiate a loan request for you.
        But first I'll transfer you to an 
        automated advisor that will ask some
        questions about the loan that you want, 
        your assets, your liabilities, and your 
        financial history. It shouldn't take 
        more than 5 minutes.
        <#if (user.notFirstTime)??><#else>
        At any time, you can say 
        /back to go to the previous question, 
        /reset to start over or 
        /exit to stop the questions.</#if>
    transitions:
      next: "setNotFirstTime"
      
  setNotFirstTime:
    component: "System.SetVariable"
    properties:
      variable: "user.notFirstTime"
      value: true
    transitions:
      next: "loanAdvisorIA"  
      
  loanAdvisorIA:
    component: "System.IntelligentAdvisor"
    properties:
      intelligentAdvisorService: "myService"
      deployment: "Loan Qualifier"
      # default yesLabel: "yes"
      # default noLabel: "no"
      uncertainLabel: "not sure"
      endLabel: " "
      # default doneLabel: "/done"
      # default undoLabel: "/back"
      # default resetLabel: "/reset"
      # default exitLabel: "/exit"
      showExplanation: "ask"
      # default explanationAskLabel: "Do you want to see the explanation?"
      interviewAttributes: "interviewDetails"      
    transitions:
      error: "handleIAError"
      next: "handleEligibility"

  handleEligibility:
    component: "System.Switch"
    properties:
      source: <#list interviewDetails.value as i><#if i.key = 'eligibility'>${i.val}</#if></#list>
      # The values that are matched against the value of the variable or source property. The value that matches is set as transition action
      values:
      - "eligible"
      - "noteligible"
    transitions:
      actions:
        eligible: "initiateLoan"
        noteligible: "suggestNextSteps"
        NONE: "handleUnexpectedAttributeValue" # the attribute value was other than eligible or noteligible or the user exited interview
      error: "handleAttributeNotSet" # the attribute wasn't set during the interview or the key is incorrect

  handleIAError:
    component: "System.Output"
    properties:
      text: |
        We are having a problem with a connection.
        Can you please send email to 
        contact@example.com to let them know that
        the loan advisor isn't working? Thank you.
    transitions:
      next: "endOfFlow"
...
      

Ejemplo: atributos de entrevista de acceso

A continuación, se muestra un ejemplo sencillo de acceso a los valores de atributo de una entrevista:

context:
  variables:
    iResult: "nlpresult"
    interviewDetails: "string"

states:
  ...
  loanAdvisorIA:
    component: "System.IntelligentAdvisor"
    properties:
      intelligentAdvisorService: "myService"
      deployment: "Loan Qualifier"
      # default yesLabel: "yes"
      # default noLabel: "no"
      uncertainLabel: "not sure"
      endLabel: " "
      # default doneLabel: "/done"
      # default undoLabel: "/back"
      # default resetLabel: "/reset"
      # default exitLabel: "/exit"
      showExplanation: "ask"
      # default explanationAskLabel: "Do you want to see the explanation?"
      interviewAttributes: "interviewDetails"      
    transitions:
      error: "handleIAError"
      next: "handleEligibility"

  handleEligibility:
    component: "System.Switch"
    properties:
      source: <#list interviewDetails.value as i><#if i.key = 'eligibility'>${i.val}</#if></#list>
      # the values that are matched against the value of the variable or source property. The value that matches is set as transition action
      values:
      - "eligible"
      - "noteligible"
    transitions:
      actions:
        eligible: "initiateLoan"
        noteligible: "suggestNextSteps"
        NONE: "handleUnexpectedAttributeValue" # the attribute value was other than eligible or noteligible or the user exited interview
      error: "handleAttributeNotSet" # the attribute wasn't set during the interview or the key is incorrect
  ...

System.KnowledgeSearch

Nota

En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Búsqueda de conocimientos.

Utilice este componente para buscar información sobre un término de búsqueda determinado en Oracle B2C Service Knowledge Foundation u Oracle Fusion Service Knowledge Management y mostrar los resultados.

Para Oracle B2C Service, los resultados que devuelve el servicio dependen de si las respuestas son públicas y de cuáles sean los valores de nivel de acceso, producto o categoría.

Tenga en cuenta que debe crear un servicio de búsqueda de conocimientos para poder utilizar este componente. Consulte Adición de un servicio de búsqueda de conocimientos.

A continuación se muestra un ejemplo de uso de este componente. Busca en un servicio de gestión de conocimientos toda la información relacionada con la última expresión del usuario. Para obtener ejemplos adicionales, consulte Uso del componente de búsqueda de conocimientos.

  searchFor:  knowledgeSearch:
    component: "System.KnowledgeSearch"
    properties:
      searchServiceName: "myKnowledgeSearch"
      searchTerm: "${iResult.value.query}"
      searchPrelude: "I don't know the answer for that. Let me search for an answer."
      resultSizeLimit: 5
      resultVersion: "Special Response"
      resultVersionExclusive: true
      resultLinkLabel: "Show More"
      searchLinkLabel: "Open Page with All Answers" # For B2B set to "Go to search home page"
      noResultText: "I don't have an answer for that. Try rephrasing your question."
    transitions:
      actions:
        resultSent: "reset"
        noResult: "reset"
        serverError: "handleSearchServerProblem"
      error: "handleSearchError"
      next: "reset"  

Consejo:

Los valores por defecto para las propiedades defaultAttachmentLabel, noResultText y resultLinkLabel se almacenan en el grupo de recursos de la aptitud. Para cambiar un valor por defecto, abra la página Grupo de recursos de la aptitud, haga clic en Icono Grupos de recursos, seleccione el separador Configuración y cambie el mensaje para la clave KnowledgeSearch - <property name>. Si utiliza el grupo de recursos de la aptitud para cambiar el valor por defecto, no es necesario incluir la propiedad en el componente a menos que desee sustituir el valor por defecto.
Propiedad Descripción ¿Obligatoria?
cardLayout Especifica si se deben mostrar las tarjetas de resultados en sentido vertical u horizontal. El valor por defecto es horizontal. No
customFilters Lista de filtros de resultados de búsqueda presentados como pares nombre-valor. Los nombres de filtro permitidos son product y category. Cada una de ellas permite una sola declaración de filtro. Consulte Filtrado de resultados por producto y categoría. No
customProperties Solo Oracle B2C Service: asignación de pares clave/valor para enviar al servicio de búsqueda. Actualmente, esta propiedad solo soporta la clave word_connector. Utilice la propiedad word_connector definida en AND para anteponer cada palabra del término de búsqueda con +. No
defaultAttachmentLabel

Etiqueta por defecto que se va a utilizar para la acción URL de la tarjeta de resultados que se enlaza a un anexo cuando este no tiene un nombre mostrado configurado. Cuando se utiliza, se agrega con un número de índice. Por ejemplo, si el segundo anexo no tiene un nombre mostrado, la etiqueta de anexo por defecto se agrega con 2.

El valor por defecto es Download.

No
locale El valor por defecto es el valor de la variable profile.locale.

Para los servicios de integración de conocimientos de varias interfaces de Oracle B2C Service, el código de configuración regional ISO o BCP de cinco caracteres que especifica qué interfaz utilizar para realizar la búsqueda (por ejemplo: en_GB). Si no hay una interfaz que admita la configuración regional, se utiliza la interfaz por defecto. Consulte Implementación de la búsqueda de conocimientos multilingüe.

Para Oracle Fusion Service, recupera los artículos asociados a la configuración regional especificada. Si no existen artículos coincidentes para la configuración regional, devuelve noResult.

No
noResultText

Texto de salida cuando no hay ningún resultado de búsqueda disponible.

El valor predeterminado es el texto de la entrada del grupo de recursos KnowledgeSearch - noResultText

No
resultLinkLabel

Etiqueta que se va a utilizar para la acción URL de la tarjeta de resultado (botón) que se enlaza a la versión web de la información.

El valor predeterminado es el texto de la entrada del grupo de recursos KnowledgeSearch - resultLinkLabel

Si define esta propiedad en ${r""}, no se muestra el botón de enlace de resultado y se muestra el texto completo. Esto no se recomienda si tiene artículos muy largos que serían difíciles de leer en un widget de habilidades de tamaño típico.

No
resultSizeLimit

Número máximo de resultados que se mostrarán.

El valor por defecto es 10.

No
resultVersion

Solo Oracle B2C Service: versión preferida que se va a devolver cuando hay varias versiones para un resultado.

Puede definir esta propiedad en Answer o Special Response.

Puede aprovechar las respuestas especiales para mostrar la salida que está específicamente adaptada a las conversaciones de chat en lugar de a las páginas web.

La versión por defecto es Answer. El valor por defecto puede cambiar en una versión posterior.

No
resultVersionExclusive

Oracle B2C Service únicamente: especifica si solo se deben mostrar los resultados disponibles en la versión preferida.

Cuando el valor sea false, primero incluye todas las respuestas coincidentes que están disponibles con la versión preferida (resultVersion). Si el número de respuestas incluidas es inferior al límite, continúa incluyendo respuestas en la versión no preferida hasta que se alcanza el límite.

El valor por defecto es false.

No
searchLinkLabel

Oracle B2C Service: etiqueta que se va a utilizar para la acción de carga útil del mensaje de tarjeta que se enlaza a la página web con la lista de resultados de búsqueda completa.

Oracle Fusion Service: etiqueta que se utilizará para la acción de carga útil del mensaje de tarjeta que está enlazada a la página de búsqueda de inicio.

Si esta propiedad no está definida, la carga útil del mensaje de tarjeta no muestra la acción.

No
searchPrelude

Texto que se muestra antes de mostrar el resultado de la búsqueda.

Si esta propiedad no está definida, se muestra el texto de la entrada del grupo de recursos KnowledgeSearch - searchPrelude.

Si no desea que se muestre el preludio de búsqueda, defina esta propiedad en ${r""}.

No
searchServiceName Nombre de la integración con la búsqueda de conocimientos según se ha configurada en Configuración.
searchTerm Texto que se utilizará como término de búsqueda para la llamada de búsqueda de conocimientos. Se necesita un término de búsqueda para Oracle Fusion Service Knowledge Management. Para Oracle B2C Service Knowledge Foundation, devuelve los artículos más populares si no se proporciona ningún término de búsqueda.

Para obtener información sobre las técnicas de términos de búsqueda, consulte Uso del componente de búsqueda de conocimientos.

System.KnowledgeSearch Transiciones

Acción Descripción
resultSent La búsqueda ha devuelto al menos un resultado.
noResult No hay ningún resultado para el término de búsqueda.
serverError Se ha producido un error en el servidor del servicio de búsqueda de conocimientos durante la llamada, como puede ser un fallo de error del servidor o un fallo de error inesperado.

Cuando se produce este error, el mensaje de error se almacena en system.state.<nombre-estado>.serverError.message.

Ejemplo: asociación de preguntas relacionadas con un término de búsqueda en un flujo de diálogo YAML

En el siguiente diagrama se muestra cómo implantar el método de estado único si el flujo de diálogo se crea en modo YAML. 1) Utilice una variable de contexto de asignación para asociar las intenciones de conocimiento a los términos de búsqueda. 2) Defina cada intención de conocimiento acción en el estado Intent para pasar a un flujo de datos que utilice la asignación para definir la variable de contexto searchTerm en el término de búsqueda de la intención. 3) A continuación, realice la transición a un estado que busque en la base de conocimientos el valor searchTerm.

A continuación se muestra la descripción de kf-assoc-intent-term.png
Descripción de la ilustración KF-assoc-intent-term.png

A continuación, se muestra un ejemplo de un flujo de diálogo en el que hay intenciones individuales para cada respuesta de la base de conocimientos.

context:
  variables:
    iResult: "nlpresult"
    intentName: "string"
    searchTerm: "string"
    searchTerms: "map"
    someVariable: "string" # For the reset state

states:

  #
  # Set search term for each knowledge intent
  #

  setSearchTerms:
    component: "System.SetVariable"
    properties:
      variable: "searchTerms"
      value:
        knowledge.Shipping Return Costs: "Shipping Return Costs"
        knowledge.Locate Service Tag or Serial: "Locating Your Service Tag or Asset Serial Number"
        knowledge.Support Account: "My Support Account"
        knowledge.Product Registration: "How do I register my product?" # (1)
        knowledge.Noncontiguous Delivery Time: "What is the delivery time to Alaska, Hawaii and the U.S. Territories?"
        knowledge.Return Policy: "What is your return policy?"
    transitions:
      next: "intent"
  
  intent:
    component: "System.Intent"
    properties:
      variable: "iResult"
    transitions:
      actions:
        system.Greeting: "welcome"
        system.Unsatisfactory Response: "transferToAgent"
        system.Request Agent: "transferToAgent"
        knowledge.Shipping Return Costs: "startIntentKnowledgeSearch"
        knowledge.Locate Service Tag or Serial: "startIntentKnowledgeSearch"
        knowledge.Support Account: "startIntentKnowledgeSearch"
        knowledge.Product Registration: "startIntentKnowledgeSearch" # (2)
        knowledge.Noncontiguous Delivery Time: "startIntentKnowledgeSearch"
        knowledge.Return Policy: "startIntentKnowledgeSearch"
        unresolvedIntent: "genericKnowledgeSearch"

  #
  # Start knowledge search for a knowledge intent's search term
  # based on searchTerms context variable
  # 
  # First, reset variables
  #
  
  startIntentKnowledgeSearch: # (2)
    component: "System.ResetVariables"
    properties:
      variableList: "searchTerm, intentName"
    transitions:
      next: "setIntentName"
      
  # 
  # Set the intentName context variable
  #
  
  setIntentName:     
    component: "System.SetVariable"
    properties:
      variable: "intentName"
      value: "${iResult.value.intentMatches.summary[0].intent}"
    transitions:
      next: "setSearchTerm"      
    
  # 
  # Get the search term to use for the intent
  #
  
  setSearchTerm:
    component: "System.SetVariable"
    properties:
      variable: "searchTerm"
      value: "${searchTerms.value[intentName.value]}"
    transitions:
      next: "knowledgeSearchForGivenSearchTerm" # (3)            
      
  # 
  # This state searches for the searchTerm variable's value
  #
  
  knowledgeSearchForGivenSearchTerm:   
    component: "System.KnowledgeSearch"
    properties:
      # Set to the name of the search service that is configured in Settings
      searchServiceName: "KnowledgeSearch"
      searchTerm: "${searchTerm.value}" # put the search term here (3)
      # searchPrelude: Optional property. If missing, there's no search prelude.      
      resultSizeLimit: 1 # Change to how many articles to show. 
      # resultVersion: Optional property. Defaults to "Answer".
      # resultVersionExclusive: Optional property. Defaults to false.
      resultLinkLabel: "Show More"
      # defaultAttachmentLabel: Optional property. Defaults to "Download"
      searchLinkLabel: "Search for Similar Answers"
      noResultText: >
        I don't have an answer for that. Try rephrasing your question 
        (or you can ask to speak to a live agent).
      # cardLayout: Optional property. Defaults to "horizontal"
    transitions:
      actions:
        resultSent: "offerMoreHelp"
        noResult: "reset"
        serverError: "handleSearchServerProblem"
      error: "handleSearchError"
      next: "reset"    

  #
  # This state is called after knowledge search returns its results.
  #
  
  offerMoreHelp:
    component: "System.Output"
    properties:
      text: > 
        You can ask me another question if there's something 
        else that I can help you with.
    transitions:
      return: "offerMoreHelp"

  #
  # This state is called when there's a problem accessing the knowledge base such
  # as a server error fault or an unexpected error fault. When this error occurs,
  # the error message is stored in system.state.<state-name>.serverError.message. 
  # 
  
  handleSearchServerProblem:
    component: "System.Output"
    properties:
      text: >
        I'm not able to get an answer for that question. Let me know 
        if there's anything else I can help you with.
    transitions:
      return: "handleSearchServerProblem"      
  
  #
  # This state is called when there's a problem using the knowledge search component
  # such as when there's a problem with the knowledge search integration configuration
  # 
  
  handleSearchError:
    component: "System.Output"
    properties:
      text: >
        Oops, my answer mechanism for that isn't working properly.
        You can ask a different question or ask to speak to an agent?
    transitions:
      return: "handleSearchError"      

  #
  # This state ends the conversation
  #
  
  reset:
    component: "System.SetVariable"
    properties:
      variable: "someVariable"
      value: "x"
    transitions:
      return: "reset"

Ejemplo: uso de la expresión de usuario como término de búsqueda

En el siguiente ejemplo se muestra cómo definir searchTerm en la expresión del usuario en una aptitud de diálogo de YAML. Para una aptitud de cuadro de diálogo visual, utilice ${skill.system.nlpresult.value.query} en su lugar.

context:
  variables:
    iResult: "nlpresult"
    someVariable: "string" # For the reset state

states:

  intent:
    component: "System.Intent"
    properties:
      variable: "iResult"
    transitions:
      actions:
        system.Greeting: "welcome"
        system.Unsatisfactory Response: "transferToAgent"
        ...
        unresolvedIntent: "genericKnowledgeSearch"
  
  #
  # This state searches the knowledge base with the user input as the search term.
  #

  genericKnowledgeSearch: 
    component: "System.KnowledgeSearch"
    properties:
      # Set to the name of the search service that is configured in Settings
      searchServiceName: "KnowledgeSearch"
      searchTerm: "${iResult.value.query}"
      searchPrelude: "I don't know the answer offhand. Let's see what articles we have..."      
      resultSizeLimit: 3 # Change to how many articles to show. Defaults to 10.
      # resultVersion: Optional property. Defaults to "Answer".
      # resultVersionExclusive: Optional property. Defaults to false.
      resultLinkLabel: "Show More"
      # defaultAttachmentLabel: Optional property. Defaults to "Download"
      searchLinkLabel: "Open Page with All Answers"
      noResultText: >
        I couldn't find any articles about that. Try rephrasing your 
        question (or you can ask to speak to a live agent).
      # cardLayout: Optional property. Defaults to "horizontal"
    transitions:
      actions:
        resultSent: "offerMoreHelp"
        noResult: "reset"
        serverError: "handleSearchServerProblem"
      error: "handleSearchError"
      next: "reset"

  #
  # This state is called after knowledge search returns its results.
  #
  
  offerMoreHelp:
    component: "System.Output"
    properties:
      text: > 
        You can ask me another question if there's something 
        else that I can help you with.
    transitions:
      return: "offerMoreHelp"

  #
  # This state is called when there's a problem accessing the knowledge base such
  # as a server error fault or an unexpected error fault. When this error occurs,
  # the error message is stored in system.state.<state-name>.serverError.message. 
  # 
  
  handleSearchServerProblem:
    component: "System.Output"
    properties:
      text: >
        I'm not able to get an answer for that question. Let me know 
        if there's anything else I can help you with.
    transitions:
      return: "handleSearchServerProblem"      
  
  #
  # This state is called when there's a problem using the knowledge search component
  # such as when there's a problem with the knowledge search integration configuration
  # 
  
  handleSearchError:
    component: "System.Output"
    properties:
      text: >
        Oops, my answer mechanism for that isn't working properly.
        You can ask a different question or ask to speak to an agent?
    transitions:
      return: "handleSearchError"      

  #
  # This state ends the conversation
  #
  
  reset:
    component: "System.SetVariable"
    properties:
      variable: "someVariable"
      value: "x"
    transitions:
      return: "reset"

System.AgentTransfer

Utilice el componente System.AgentTransfer de los asistentes digitales de tipo asistente digital como agente para devolver la conversación al servicio de chat. La conversación se enrutará a un agente activo según las reglas del chat configuradas en el servicio de chat.

Nota

En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Transferencia de agente.

Este componente es para conversaciones que se originan en un chat de servicio, como se describe en El marco del asistente digital como agente en acción. Para conversaciones originadas en la aptitud, utilice System.AgentConversation en su lugar.

A continuación, se muestra un ejemplo del uso de este componente para devolver la conversación al servicio de chat.

  transferToAgent:
    component: "System.AgentTransfer"
    properties:
      maxEngagementsInQueue: "8"
      maxWaitSeconds: "300"
      waitingMessage: "Let me see if a human agent is available to help you. Hold tight."
      rejectedMessage: "No agents are available at this time. Please try again later."
      errorMessage: "We're unable to transfer you to a human agent because there was a system error."
    transitions:
      actions:
        accepted: "reset"
        rejected: "handleRejected"
        error: "offerMoreHelp"
      next:
        "reset"

Consejo:

En aptitudes con la versión 21.04 y posteriores de la plataforma, los valores por defecto para las propiedades acceptedMessage, errorMessage, rejectedMessage y waitingMessage se almacenan en el grupo de recursos de la aptitud. Para cambiar un valor por defecto, abra la página Grupo de recursos de la aptitud, haga clic en Icono Grupos de recursos, seleccione el separador Configuración y cambie el mensaje para la clave AgentTransfer - <nombre de propiedad>. Si utiliza el grupo de recursos de la aptitud para cambiar el mensaje por defecto, no es necesario incluir la propiedad del mensaje en el componente a menos que desee sustituir el valor por defecto.
Propiedad Descripción ¿Obligatoria?
agentStatusVariable Nombre de la variable de contexto de tipo asignación que se utilizará para almacenar la información de estado de disponibilidad del agente. No se almacena información si no se especifica la propiedad. Para hacer referencia a una variable de mapa, utilice una expresión de valor como esta: ${<mapVariableName>.value.<key>}. Por ejemplo, agentStatus.value.expectedWaitMinutes.

Para obtener más información sobre los valores devueltos en esta variable, consulte System.AgentTransferCondition.

No
allowTransferIf Especifica las condiciones en las que la aptitud debe transferir la sesión de chat.
  • agentsAreRequestingNewEngagements: (por defecto) para los agentes de Oracle B2C Service que deben extraer chats (solicitar nuevas interacciones), este es el juego de condiciones más restrictivo y el usuario no tiene que esperar demasiado tiempo para hablar con un agente. La aptitud intenta transferir la conversación solo si hay agentes que hayan solicitado nuevas interacciones. En todos los demás casos, esta opción tiene el mismo comportamiento que agentSessionsAreAvailable. No utilice esta opción forOracle Fusion Service Chat, ya que el total de agentes de Oracle Fusion Service que solicitan nuevas interacciones siempre es 0.
  • agentSessionsAreAvailable: la aptitud intenta transferir la conversación si alguno de los agentes disponibles no ha alcanzado el número máximo de chats que se les permite tener al mismo tiempo. Es posible que el usuario tenga que esperar si los agentes están involucrados en conversaciones de larga duración o están realizando algún seguimiento posterior al chat.
  • agentsAreAvailable: la aptitud intenta transferir la conversación si hay agentes en línea, independientemente de si han alcanzado su número máximo de chats o están solicitando nuevas interacciones. Con esta opción, es posible que el tiempo de espera de los usuarios sea prolongado.

Si no se cumplen las condiciones especificadas, se produce la acción rejected.

No
customProperties Asignación que contiene información para transferir al servicio. Consulte Transferencia de información al servicio. No
errorMessage El mensaje que se muestra al usuario cuando se produce un error del sistema al transferir la sesión de chat a un agente. Toma por defecto el valor We were unable to transfer you because there was a system error. Puede establecer la propiedad en una cadena vacía o en blanco para suprimir la salida del mensaje. No
maxEngagementsInQueue Número máximo permitido de interacciones en espera en la cola de destino. Cuando se envía la solicitud de chat, el servicio de chat responde con el número actual de interacciones en espera en la cola. Si este valor supera maxEngagementsInQueue, se produce la acción rejected. El valor por defecto es -1, lo que significa que no hay límite de interacciones.

Tenga en cuenta que para Oracle Fusion Service Chat, la respuesta siempre es 0, por lo que esta propiedad no tiene ningún valor para Oracle Fusion Service.

No
maxWaitSeconds Número máximo de segundos de espera estimados permitidos. Cuando el servicio de chat recibe la solicitud de transferencia, responde con el tiempo de espera estimado. Si este valor excede maxWaitSeconds, se produce la acción rejected. Esta propiedad se define por defecto en -1, lo que significa que no hay tiempo de espera máximo. Cuando está definido en -1, el asistente digital transfiere el usuario a un agente humano, independientemente del tiempo de espera estimado.

Tenga en cuenta que la acción rejected se basa en el tiempo de espera estimado, no en el tiempo de espera real. Después de transferir la conversación, el asistente digital no tiene control sobre la conversación ni acceso a la información relacionada. Por lo tanto, es posible que el tiempo de espera real exceda el tiempo de espera estimado.

No
rejectedMessage Mensaje que se muestra a los usuarios siempre que se produce una de las siguientes situaciones:
  • No se han cumplido las condiciones allowTransferIf.
  • El tiempo de espera estimado excede maxWaitSeconds.
  • El número de interacciones de la cola supera maxEngagementsInQueue.
Toma por defecto el valor Agent rejected. Puede establecer la propiedad en una cadena vacía o en blanco para suprimir la salida del mensaje.
No
waitingMessage Mensaje que se muestra a los usuarios cuando se transfieren a una cola. Toma como valor por defecto Agent chat session established. Waiting for agent to join. Puede establecer la propiedad en una cadena vacía o en blanco para suprimir la salida del mensaje. No

Este componente puede devolver las siguientes acciones:

Acción Descripción
accepted La transición accepted se define cuando el chat se transfiere correctamente a una cola.

Tenga en cuenta que, una vez aceptada una solicitud de chat, la conversación debe finalizar con return. Por ejemplo, puede navegar a un estado que genera una cadena (que el usuario no ve) o define una variable.

    transitions:
      actions:
        accepted: "reset"
        rejected: "handleRejected"
        error: "offerMoreHelp"
      next: "reset"
rejected La transición rejected se define cuando se produce una de las siguientes situaciones:
  • No se han cumplido las condiciones allowTransferIf.
  • El tiempo de espera estimado excede maxWaitSeconds
  • El número de interacciones de la cola supera maxEngagementsInQueue.
error La transición error se establece cuando hay un error del sistema que impide la transferencia a un agente humano.

Ejemplo: transferencia a un agente humano

A continuación, se muestra un ejemplo de un flujo de diálogo que efectúa la transferencia a un agente cuando el cliente pide hablar con un agente:

metadata:
  platformVersion: "1.1"
main: true
name: "AutomatedAgentConversation"
context:
  variables:
    iResult: "nlpresult"
    someVariable: "string"
states:
  intent:
    component: "System.Intent"
    properties:
      variable: "iResult"
    transitions:
      actions:
        ...
        system.Unsatisfactory Response: "transferToAgent"
        system.Request Agent: "transferToAgent"
        ...
  
  #
  # This state tries to transfer the user to another agent when the user explicitly requests for it.
  #
  transferToAgent:
    component: "System.AgentTransfer"
    properties:
      maxWaitSeconds: "300"
      waitingMessage: "I'm transferring you to a human agent. Hold tight."
      rejectedMessage: "I wasn't able to transfer you to a human agent. Please try again later."
      errorMessage: "We're unable to transfer you to a human agent because there was a system error."
    transitions:
      actions:
        accepted: "reset"
        rejected: "handleRejected"
        error: "offerMoreHelp"
      next: "reset"
  #
  # This state is called when an agent transfer is rejected. 
  # It lets the customer know they can ask for something else.
  # 
  handleRejected:
    component: "System.Output"
    properties:
      text: "Meanwhile, let me know if there's anything else I can help you with."
    transitions:
      return: "handleRejected"
  
  #
  # This state is called when an agent transfer encounters a system error. 
  # It lets the customer know they can ask for something else.
  #
  offerMoreHelp:
    component: "System.Output"
    properties:
      text: > 
        You can ask me another question if there's something 
        else that I can help you with.
    transitions:
      return: "offerMoreHelp"
      
  #
  # This state ends the conversation with a return transition for insights purposes, 
  # after the user has been transferred to another agent.
  #
  reset:
    component: "System.SetVariable"
    properties:
      variable: "someVariable"
      value: "x"
    transitions:
      return: "reset"

Ejemplo: transferencia de información al servicio

Al transferir una conversación de un asistente digital a un agente en directo, puede utilizar propiedades personalizadas en el componente System.AgentTransfer para transferir esta información.

Esta es la estructura de Oracle B2C Service:


      customProperties:
        - name: 
          value: 
          type:

La propiedad type es necesaria para los campos personalizados; de lo contrario, es opcional.

A continuación, se muestra la estructura de Oracle Fusion Service:


      customProperties:
        - name: 
          value:

A continuación, se muestra un ejemplo de configuración customProperties para Oracle Fusion Service:

  doTransfer:
    component: "System.AgentTransfer"
    properties:
      maxWaitSeconds: "300"
      allowTransferIf: "agentSessionsAreAvailable"
      # Example of passing a custom property to Oracle Fusion
                                Service      
      customProperties:
        # This is a checkbox custom field in the Universal Work Object.
        # Checkboxes take the value of Y (selected) or N (unselected).
        - name: "TriagedByODA_c"
          value: "Y"
      acceptedMessage: "The conversation has been transferred to a live agent."
      waitingMessage: "I'm transferring you to a human. Hold tight"
      rejectedMessage: "Looks like no one is available. Please try later"
      errorMessage: "We're unable to transfer you to a live agent because there was a system error."
    transitions:
      actions:
        accepted: "reset"
        rejected: "handleRejected"
        error: "offerMoreHelp"
      next: "reset"

Consejo:

Para Oracle Fusion Service, la evaluación de reglas se detiene en la primera regla donde se cumplan todas las condiciones. Al configurar las reglas, asegúrese de que la conversación transferida no se enrute de vuelta al agente del asistente digital. En el ejemplo de doTransfer, la propiedad personalizada TriagedByODA_c se define en Y y las reglas pueden utilizar esta propiedad personalizada para garantizar que, cuando se define en Y, la conversación no se enrute al agente del asistente digital. (Para Oracle B2C Service, la configuración Estado de transición y parada determina el enrutamiento).

System.AgentTransferCondition

Puede utilizar el componente System.AgentTransferCondition de los asistentes digitales DA-as-agent para determinar si los agentes están disponibles y, si es así, el tiempo de espera esperado.

Nota

En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Condición de transferencia de agente.

Las propiedades del componente se utilizan para especificar las condiciones de transferencia y devuelve una acción que indica si se han cumplido las condiciones. Además, define los valores de la variable de asignación de contexto con nombre de la siguiente manera:

queueId (integer, optional): The engagement queue ID,
expectedTotalWaitSeconds (integer, optional): Expected wait time in the queue in seconds
        ( -1 if there's inadequate information, zero or greater otherwise ).,
expectedWaitSeconds (integer, optional): The number representing the "ss" segment of the expected wait time of format mm:ss 
        ( -1 if there's inadequate information, zero or greater otherwise ).,
expectedWaitMinutes (integer, optional): The number representing the "mm" segment of the expected wait time of format mm:ss 
        ( -1 if there's inadequate information, zero or greater otherwise ).,
availableAgentSessions (integer, optional): Total number of sessions available across all agents.,
totalAvailableAgents (integer, optional): Total number of agents whose status is available.,
totalUnavailableAgents (integer, optional): Total number of agents whose status is unavailable.,
totalAgentsRequestingNewEngagement (integer, optional): Total number of agents who are available and have capacity.,
outsideOperatingHours (boolean, optional): True if outside operating hours. False if inside operating hours.,
engagementsInQueue (integer, optional): The number of engagements currently in the queue.,
sessionId (string, optional): The session ID.,
clientId (integer, optional): The client ID.

A continuación, se muestra un ejemplo del uso de este componente para averiguar si hay agentes disponibles, informar del tiempo de espera y permitir a los usuarios cancelar la solicitud de transferencia si no desean esperar tanto tiempo.

  handleAgentRequest:
    component: "System.CommonResponse"
    properties:
      keepTurn: true
      metadata:
        responseItems:        
        - type: "text" 
          text: "I understand. Give me a moment while I see who might be available to help you."
    transitions:
      next: "evaluateAgentTransferCondition"

  ############################
  # Agent Transfer
  ############################  

  # See if there are any agents available 
  
  evaluateAgentTransferCondition:
    component: "System.AgentTransferCondition"
    properties:
      maxWaitSeconds: 300
      maxEngagementsInQueue: 20
      allowTransferIf: "agentsAreAvailable"
      agentStatusVariable: "agentStatus"
    transitions:
      actions:
        conditionsMet: "askIfWillWait"
        conditionsNotMet: "handleRejected"
        error: "handleTransferError"
      next: "done"
            
  askIfWillWait:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      metadata:
        responseItems:
          - type: "text"
            text:  "${rb('promptTextForTransferDecision','minutes,seconds',agentStatus.value.expectedWaitMinutes,agentStatus.value.expectedWaitSeconds)}"
            separateBubbles: true
            actions:
              - label: "Yes, I'll wait"
                type: "postback"
                keyword: "yes"
                payload:
                  action: "yes"
                name: "Yes"
              - label: "No, nevermind"
                keyword: "no"
                type: "postback"
                payload:
                  action: "no"
                name: "No"
    transitions:
      actions:
        yes: "transferToAgent"
        no: "handleCancelled"
        textReceived: "intent"
      next: "handleCancelled"     
      
  # Perform the actual transfer
  #
  # The maxWaitSeconds, maxEngagementsInQueue, allowTransferIf,
  # and customProperties, if any, should match those used for 
  # System.AgentTransferCondition 
  
  transferToAgent:
    component: "System.AgentTransfer"
    properties:
      maxWaitSeconds: 300
      maxEngagementsInQueue: 20
      allowTransferIf: "agentsAreAvailable"
    transitions:
      actions:
        accepted: "done"
        rejected: "handleRejected"
        error: "handleTransferError"
      next: "handleTransferError"

Consejo:

A continuación, se muestra una definición de grupo de recursos sugerida que puede utilizar para mostrar el tiempo de espera esperado:
This might take {minutes, plural,
     =-1 {}
     =0 {}
     =1 {1 minute and }
     other {# minutes and }
}{seconds, plural,
     =-1 {a while}
     =0 {{minutes, plural,
          =0 {a short wait time}
          other {0 seconds}
        }}
     =1 {1 second}
     other {# seconds}
} to connect. Are you willing to wait?
Propiedad Descripción ¿Obligatoria?
agentStatusVariable Nombre de la variable de contexto de tipo asignación que se utilizará para almacenar la información de estado de disponibilidad del agente. No se almacena información si no se especifica la propiedad. Para hacer referencia a una variable de mapa, utilice una expresión de valor como esta: ${<mapVariableName>.value.<key>}. Por ejemplo, agentStatus.value.expectedWaitMinutes. No
allowTransferIf Especifica el juego base de condiciones que se deben cumplir.
  • agentsAreRequestingNewEngagements: (por defecto) para los agentes B2C que deben extraer chats (solicitar nuevas interacciones), necesitan que los agentes hayan extraído chats. En todos los demás casos, esta opción tiene el mismo comportamiento que agentSessionsAreAvailable.
  • agentSessionsAreAvailable: requiere que los agentes soliciten chats.
  • agentsAreAvailable: requiere que al menos un agente esté activo, independientemente de si ha alcanzado el número máximo de chats o si está solicitando nuevas interacciones.

Si no se cumplen las condiciones especificadas, se produce la acción conditionsNotMet.

No
customProperties Asignación que contiene información para transferir al servicio. Consulte Transferencia de información al servicio. Esta propiedad está soportada en la versión 21.04 y posteriores. No
errorMessage Mensaje que se muestra al usuario cuando Digital Assistant tiene problemas con el servicio de chat de agente. Toma por defecto el valor We were unable to check the agent transfer conditions because there was a system error. Esta cadena predeterminada se almacena en el grupo de recursos de configuración en la clave systemComponent_AgentTransferCondition_errorMessage. Puede establecer la propiedad en una cadena vacía o en blanco para suprimir la salida del mensaje. No
maxEngagementsInQueue Número máximo permitido de interacciones en espera en la cola de destino. Cuando se envía la solicitud, el servicio de chat responde con el número actual de interacciones en espera en la cola. Si este valor supera maxEngagementsInQueue, se produce la acción conditionsNotMet. El valor por defecto es -1, lo que significa que no hay límite de interacciones. No
maxWaitSeconds Número máximo de segundos de espera estimados permitidos. Cuando el servicio de chat recibe la solicitud, responde con el tiempo de espera estimado. Si este valor excede maxWaitSeconds, se produce la acción conditionsNotMet. Esta propiedad se define por defecto en -1, lo que significa que no hay tiempo de espera máximo.

Tenga en cuenta que la acción conditionsNotMet se basa en el tiempo de espera estimado, no en el tiempo de espera real.

No

Este componente puede devolver las siguientes acciones:

Acción Descripción
conditionsMet La transición conditionsMet se define cuando se encuentra dentro del horario laboral y se cumplen las condiciones maxWaitSeconds, maxEngagementsInQueue y allowTransferIf.
conditionsNotMet La transición conditionsNotMet se define cuando se produce una de las siguientes situaciones:
  • Está fuera del horario laboral.
  • No se han cumplido las condiciones allowTransferIf.
  • El tiempo de espera estimado excede maxWaitSeconds
  • El número de interacciones de la cola supera maxEngagementsInQueue.
error La transición error se define cuando hay un problema con la conexión al servicio de chat de agente durante la comprobación de condiciones del agente.

Ejemplo: obtención de disponibilidad de agente y tiempo de espera

A continuación, se muestra un ejemplo de un flujo de diálogo que llama al componente, muestra el tiempo de espera y ofrece al usuario la oportunidad de cancelar su solicitud de transferencia.

  ############################
  # Agent Transfer
  ############################  

  # See if there are any agents available 
  
  evaluateAgentTransferCondition:
    component: "System.AgentTransferCondition"
    properties:
      maxWaitSeconds: 300
      maxEngagementsInQueue: 20
      allowTransferIf: "agentsAreAvailable"
      agentStatusVariable: "agentStatus"
    transitions:
      actions:
        conditionsMet: "askIfWillWait"
        conditionsNotMet: "setInsightsCustomMetricsConditionsNotMet"
        error: "handleTransferError"
      next: "done"
      
  # Measure when agents aren't available

  setInsightsCustomMetricsConditionsNotMet:
    component: "System.SetCustomMetrics"
    properties:
      dimensions: 
      - name: "Agent Transfer Choice"
        value: "No agents available for new chats"
    transitions:
      next: "handleRejected"      
                  
  askIfWillWait:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      metadata:
        responseItems:
          - type: "text"
            text:  "${rb('promptTextForTransferDecision','minutes,seconds',agentStatus.value.expectedWaitMinutes,agentStatus.value.expectedWaitSeconds)}"
            separateBubbles: true
            actions:
              - label: "Yes, I'll wait"
                type: "postback"
                keyword: "yes"
                payload:
                  action: "yes"
                name: "Yes"
              - label: "No, nevermind"
                keyword: "no"
                type: "postback"
                payload:
                  action: "no"
                name: "No"
    transitions:
      actions:
        yes: "setInsightsCustomMetricsAgentTransferInitiated"
        no: "setInsightsCustomMetricsAgentTransferCancelled"
        textReceived: "intent"
      next: "handleCancelled"
      
  # Measure when user chooses to wait for transfer

  setInsightsCustomMetricsAgentTransferInitiated:
    component: "System.SetCustomMetrics"
    properties:
      dimensions: 
      - name: "Agent Transfer Choice"
        value: "User chose to wait"
    transitions:
      next: "transferToAgent"        
      
  # Measure when user chooses to not wait for transfer

  setInsightsCustomMetricsAgentTransferCancelled:
    component: "System.SetCustomMetrics"
    properties:
      dimensions: 
      - name: "Agent Transfer Choice"
        value: "User didn't want to wait"
    transitions:
      next: "handleCancelled"
      
  # Perform the actual transfer
  #
  # The maxWaitSeconds, maxEngagementsInQueue, allowTransferIf,
  # and customProperties, if any, should match those used for 
  # System.AgentTransferCondition 
  
  transferToAgent:
    component: "System.AgentTransfer"
    properties:
      maxWaitSeconds: 300
      maxEngagementsInQueue: 20
      allowTransferIf: "agentsAreAvailable"
    transitions:
      actions:
        accepted: "done"
        rejected: "handleRejected"
        error: "handleTransferError"
      next: "handleTransferError"
     
  ############################
  # All done
  ############################
                  
  done:
    component: "System.Output"
    properties:
      text: "Let me know if you need help on anything else."
    transitions:
      return: "done"  
      
  handleRejected:
    component: "System.CommonResponse"
    properties:
      keepTurn: true
      metadata:
        responseItems:        
        - type: "text"
          text: > 
            Unfortunately, none of my colleagues are currently available to assist with this.
            Still, we’d love to see this through for you. 
            Please feel free to reach us through email@example.com.
    transitions:
      next: "done"
      
  handleCancelled:
    component: "System.CommonResponse"
    properties:
      keepTurn: true
      metadata:
        responseItems:        
        - type: "text" 
          text: "OK. Maybe some other time. Please feel free to reach us through email@example.com."
    transitions:
      next: "done"
      
  handleTransferError:
    component: "System.CommonResponse"
    properties:
      keepTurn: true
      metadata:
        responseItems:        
        - type: "text" 
          text: "Unfortunately, we can't transfer you at this time. Please try again later."
    transitions:
      next: "done"
      
  ############################
  # Global error handler
  ############################
  
  globalErrorHandler:
    component: "System.Output"
    properties:
     text: "Sorry, we were unable to do the action that you requested." 
    transitions:
      next: "done"

El estado askIfWillWait utiliza una entrada de grupo de recursos para formar el mensaje de tiempo de espera, de modo que el mensaje tenga sentido si el tiempo es más o menos de un minuto y si un número es 0, uno o más.

There are some experts online. But it might take {minutes, plural,
     =-1 {}
     =0 {}
     =1 {1 minute and }
     other {# minutes and }
}{seconds, plural,
     =-1 {a while}
     =0 {{minutes, plural,
          =0 {a very short wait time}
          other {0 seconds}
        }}
     =1 {1 second}
     other {# seconds}
} for one to join. Are you willing to wait?

Tenga en cuenta que en este ejemplo se utiliza System.SetCustomMetrics para realizar un seguimiento de si los agentes estaban disponibles y, si es así, cuántos usuarios optaron por esperar y cuántos cancelaron la solicitud de transferencia.

Componentes de transferencia a agente en directo

System.AgentInitiation

Si desea transferir una conversación de aptitud a un agente de Oracle B2C Service, agregue este componente al flujo de diálogo para iniciar el establecimiento de comunicación con el canal de integración de agente especificado por la propiedad agentChannel. Debe llamar a este componente antes de llamar al componente System.AgentConversation.

Este componente es para conversaciones originadas en la aptitud. No utilice este componente para conversaciones originadas en el chat de Oracle B2C Service, como se describe en El marco del asistente digital como agente en acción.

A continuación, se muestra un ejemplo del uso de este componente para iniciar el establecimiento de comunicación con la instancia de Oracle B2C Service definida por el canal de integración del agente denominado ServiceCloudIntegration.

  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      agentChannel: "ServiceCloudIntegration"
      nlpResultVariable: "iResult"
      waitingMessage: "Waiting for an agent..."
      rejectedMessage: "Agents are not available right now."
      resumedMessage: "We're connecting you to an agent..."
      errorMessage: "Oops! We're having system issues. We're sorry, but we can't connect you with an agent right now."
    transitions:
      actions:
        accepted: "agentConversation"
        rejected: "tryAgain"
        error: "tryAgain"
   agentConversation:
    component: "System.AgentConversation"
    properties:
      agentChannel: "ServiceCloudIntegration"
      nlpResultVariable: "iResult"
      exitKeywords: "bye, exit, take care, goodbye, quit"
      expiryMessage: "Your chat with the agent timed out."
      conclusionMessage: "Your chat with the agent has ended."
      waitMessage: "You are number ${system.message.messagePayload.position} in the queue. Your waiting time is ${(system.message.messagePayload.waitTime>60)?then('${(system.message.messagePayload.waitTime/60)?int} mins','${system.message.messagePayload.waitTime} seconds')}."
    transitions:
      next: "endPrompt"
      actions:
        agentLeft: "endPrompt"
        expired: "sessionExpired"
        error" "agentConversationError"

Consejo:

En aptitudes con la versión 21.04 y posteriores de la plataforma, los valores por defecto para las propiedades agentActionsMessage, errorMessage, rejectedMessage, resumedMessage y waitingMessage se almacenan en el grupo de recursos de la aptitud. Para cambiar un valor por defecto, abra la página Grupo de recursos de la aptitud, haga clic en Icono Grupos de recursos, seleccione el separador Configuración y cambie el mensaje para la clave AgentInitiation - <nombre la propiedad>. Si utiliza el grupo de recursos de la aptitud para cambiar el mensaje por defecto, no es necesario incluir la propiedad del mensaje en el componente a menos que desee sustituir el valor por defecto.
Propiedad Descripción ¿Obligatoria?
agentActions Lista de acciones que el agente puede disparar para finalizar el chat y mover el flujo al estado definido para la acción de transición. En la consola del representante de servicios al cliente, estas acciones se muestran como comandos barra cuando se inicia la conversación del agente, como se muestra en este ejemplo:
Here are the available actions that you can send to transfer the conversation
back to the bot. Prepend the action with a forward slash (for example, /actionName).
/OrderPizza : Order Pizza : Order a pizza.
/ShowMenu : Show Menu : Show order options.

Los nombres de acción deben corresponderse con las propiedades actions de System.AgentConversation. Por ejemplo, en el siguiente estado agentInitiation, las entradas ShowMenu y OrderPizza de la propiedad agentActions se corresponden con las acciones definidas para el estado agentConversation:

  agentInitiation:
    component: "System.AgentInitiation"
    ...
    properties:
      agentChannel: "ServiceCloudIntegration"
      agentActions:
      - action: "OrderPizza"
        label: "Order Pizza"
        description: "Order a pizza."
      - action: "ShowMenu"
        label: "Show Menu"
        description: "Show order options. "
      …
  agentConversation:
    component: "System.AgentConversation"
    ...
    transitions:
      next: "terminatedWithoutAction"
      actions:
        ShowMenu: "ShowMenu"
        OrderPizza: "OrderPizza"

Puede definir los elementos de la lista agentActions de varias formas:

  • Como una lista de asignaciones, en la que cada asignación debe contener una propiedad de acción, una propiedad de valor y, opcionalmente, una propiedad de descripción. Por ejemplo:
          - action: "action1"
            label: "label1"
            description: "description1"
          - action: "action2" 
            label: "label2"
            description: "description2"
  • Como matriz de JSON, en la que cada objeto de la matriz debe contener una propiedad de acción, una propiedad de valor y, opcionalmente, una propiedad de descripción. Por ejemplo:
          [
          {action: "action1",
          label: "label1",
          description: "description1"},
          {action: "action2",
          label: "label2",
          description: "description2"}      
          ]
  • Como cadena de valores de acción delimitada por comas. La etiqueta y la descripción son iguales que el valor de la acción. Por ejemplo:
    "action1, action2"
No
agentActionsMessage Si se establece la propiedad agentActions, la consola del agente muestra este valor en lugar del mensaje por defecto. Por ejemplo:

agentActionsMessage: "\nYou can terminate when done or send one of these actions.\n"

No
agentChannel Asigna un nombre al canal de integración de agente. Este valor, el nombre del canal de integración de agente y la propiedad agentChannel definida para el componente System.AgentConversation deben coincidir.
allowTransferIf Especifica las condiciones en las que la aptitud debe transferir la sesión de chat. El componente utiliza el valor queueId para identificar la cola de la que se obtienen las estadísticas. Debe verificar que las reglas de chat realmente transferirán la conversación a la cola identificada, y no a otra cola.
  • agentsAreRequestingNewEngagements: este es el juego de condiciones más restrictivo. La aptitud intenta transferir la conversación solo si hay agentes que hayan solicitado nuevas interacciones (chats extraídos) y que estén asignados a la cola especificada o, si el servidor de chat envía automáticamente los chats a los agentes, hay agentes disponibles para recibir chats, no han alcanzado su número máximo de chats y están asignados a la cola especificada. Con esta opción, el usuario no tiene que esperar demasiado para poder hablar con el agente.
  • agentSessionsAreAvailable: la aptitud intenta transferir la conversación si hay agentes disponibles que no hayan alcanzado su número máximo de chats y que estén asignados a la cola especificada. Es posible que el usuario tenga que esperar si los agentes están involucrados en conversaciones de larga duración o están realizando algún seguimiento posterior al chat.
  • agentsAreAvailable: la aptitud intenta transferir la conversación si hay agentes en línea asignados a la cola especificada, independientemente de si han alcanzado su número máximo de chats o están solicitando nuevas interacciones. Con esta opción, es posible que el tiempo de espera de los usuarios sea prolongado.

Si la condición especificada no se cumple, el componente devuelve rejected.

Al incluir esta propiedad, también debe incluir la propiedad queueId.

Esta propiedad solo está disponible en instancias de Oracle Digital Assistant aprovisionadas en Oracle Cloud Infrastructure (a veces denominada infraestructura en la nube de 2ª generación).

No
chatResponseVariable Asigna un nombre a la variable de asignación que contiene la información de respuesta del agente. Después de conectar correctamente el componente System.AgentInitiation, la asignación contiene las siguientes propiedades:
{
  "sessionID": "string", // agent session id

  "completedSurveyID": {
    "id": "int"
  },

  "engagementID": { // survey id
    "id": "int"
  },

  "cancelledSurveyID": {
    "id": "int"
  }
}
No
customProperties Asignación que contiene el ID del incidente, la interfaz, el contacto o los campos personalizados (o una combinación de ellos) para transferir al servicio. Para hacer referencia a una variable de mapa, utilice una expresión de valor como esta: ${mapVariableName.value}. Consulte Transferencia de la información del cliente a un chat en directo. No
errorMessage Mensaje que se muestra cuando hay un problema al establecer una conexión con Oracle B2C Service. Por ejemplo, la contraseña del canal de integración de agente ya no es válida o hay un problema con el servidor. No
nlpResultVariable Variable que almacena el mensaje de consulta del cliente. No
rejectedMessage Mensaje que se muestra si se rechaza el establecimiento de comunicación de AgentInitiation, por ejemplo, si está fuera de las horas operativas configuradas. Por ejemplo:

rejectedMessaage: "Sorry, no agents are available at this time."

No
resumedMessage Mensaje (como, por ejemplo, Un momento, vamos a pasarle con un agente.) que se muestra cuando el chat del cliente con el representante de servicios al cliente se reanuda. La agregación de esta propiedad impide que los clientes cuyas solicitudes ya se han puesto en cola reciban un mensaje equívoco, como Se va a reanudar el chat con el agente, cuando solicitan repetidamente un chat en directo. No
subject La línea de asunto que se muestra en la consola del agente después de la entrega a la plataforma del agente. Por defecto, este es el último mensaje de cliente almacenado en la propiedad nlpResultVariable, pero también se puede definir con una variable que se haya establecido anteriormente en la definición del flujo de diálogo. Por ejemplo, puede definir una variable de contexto de tipo string cuyo valor se defina antes que el componente System.AgentInitiation:

subject: "A customer needs help regarding ${context_variable.value}"

No
queueId ID de la cola que debe utilizar el componente para determinar si se cumple la condición allowTransferIf especificada. Debe ser el ID de la cola a la que las reglas de chat de Oracle B2C Service enrutarán esa conversación.

Esta propiedad se ignora si la propiedad allowTransferIf no está presente.

Se requiere cuando la propiedad allowTransferIf está presente.
transcriptDateTimeFormat Formato de la fecha y hora de los mensajes de transcripción de conversación enviados al agente. Consulte la clase Java DateTimeFormatter para conocer los patrones válidos. Ejemplo: dd/MM/yyyy HH:mm. El valor por defecto es yyyy-mmm-ddThh:mm:ssZ. No
transcriptTimezoneName Nombre de la autoridad de números asignados de Internet (IANA) de la zona horaria que se debe utilizar para dar formato a la transcripción de conversación mediante la propiedad transcriptDateTimeFormat. Ejemplo: America/Sao_Paulo. El valor por defecto es Europe/London. Si no incluye la propiedad transcriptDateTimeFormat, esta propiedad se ignora. No
waitingMessage Mensaje que se muestra mientras los clientes esperan a conectarse a un agente. Por ejemplo:

waitingMessage: "You’ve joined the chat session. An agent will be right with you.

No

System.AgentInitiation Transiciones

El componente System.AgentInitiation devuelve las acciones accepted, rejected y error. Cada una de estas acciones puede apuntar a un estado diferente, si bien la acción accepted suele asignar un nombre al estado del componente System.AgentConversation:
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      agentChannel: "ServiceCloudIntegration"
      ...
    transitions:
      actions:
        accepted: "agentConversation"
        rejected: "noAgentsAvailable"
        error: "handshakeError"
Acción Descripción
accepted El establecimiento de comunicación se ha realizado correctamente y el estado puede realizar la transición al estado con el componente System.AgentConversation.
error Se ha producido un problema al establecer una conexión con Oracle B2C Service. Por ejemplo, la contraseña del canal de integración de agente ya no es válida o hay un problema con el servidor de Service Cloud.
rejected Oracle B2C Service ha rechazado la solicitud de conexión. Algunos de los motivos para rechazar una solicitud de conexión son:
  • No hay agentes disponibles (requiere propiedades allowTransferIf y queueId)
  • Está fuera del horario operativo configurado
  • Es festivo
  • Hay un problema con el servidor de chat

Tenga en cuenta que si no define allowTransferIf y queueId, la acción rechazada no se producirá cuando no haya agentes disponibles, en su lugar, la transferencia permanecerá en una condición de espera.

Ejemplo: manejo del rechazo de inicio de agente y de los errores del sistema

A continuación se muestra un ejemplo de gestión de errores del sistema y las acciones error y rejected.

  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      agentChannel: "B2CServiceIntegration"
      nlpResultVariable: "iResult"
      waitingMessage: "Let me connect you with someone who can further assist you."
      resumedMessage: "Someone will be with you shortly."
      errorMessage: "Oops! We're having system issues and we can't connect you with an agent right now."
      rejectedMessage: "Unfortunately, no one's available right now."     
    transitions:
      actions:
        accepted: "agentConversation"
        rejected: "initiationRejected"
        error: "tryAgain"
      error: "agentInitiationSystemError"
  initiationRejected:
    component: "System.Output"
    properties:
      text: "Perhaps it's outside their working hours or it's a holiday."
    transitions:
      return: "initiationRejected"
  tryAgain:
    component: "System.Output"
    properties:
      text: "Please try again later."
    transitions:
      return: "tryAgain"
  agentInitiationSystemError:
    component: "System.Output"
    properties:
      text: "I seem to be having a connection problem. Can you please email email@example.com to let them know?"
    transitions:
      return: "done"

Ejemplo: propiedad incidentID

context:
  variables:
    liveChatInfo: "map"
    customerTicketId: "int"
...
  setCustomFields:
    component: "System.SetVariable"
    properties:
      variable: "liveChatInfo"
      value:
        incidentID: "${customerTicketId}" # long value
  ...
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      ...
      customProperties: "${liveChatInfo.value}"

Ejemplo: objeto customerInformation estándar

En este ejemplo se define contactID.

context:
  variables:
    liveChatInfo: "map"
    contactId: "int"
...
  setCustomFields:
    component: "System.SetVariable"
    properties:
      variable: "liveChatInfo"
      value:
        customerInformation:
          contactID:
            id: "${customerId}"
  ...
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      ...
      customProperties: "${liveChatInfo.value}"

Ejemplo: objeto customerInformation heredado

En este ejemplo, se definen interfaceID y contactID.

Consejo:

Puesto que WSDL especifica que interfaceID es de tipo NamedID, podríamos haber utilizado name: "myInterfaceName" en lugar de id: id: "${interfaceId}".
context:
  variables:
    liveChatInfo: "map"
    interfaceId: "int"
    contactId: "int"
...
  setCustomFields:
    component: "System.SetVariable"
    properties:
      variable: "liveChatInfo"
      value:
        customerInformation:
          interfaceID:
            id:
              id: "${interfaceId}"
          contactID:
            id: "${customerId}"
  ...
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      ...
      customProperties: "${liveChatInfo.value}"

Ejemplo: objeto customFields estándar

context:
  variables:
    liveChatInfo: "map"
...
  setupCustomFields:
    component: "System.SetVariable"
    properties:
      variable: "liveChatInfo"
      value:
        customFields:
          - name: "c$text_field"        # text field
            type: "STRING"
            value: "SILVER"
          - name: "c$text_area"         # text area
            type: "STRING"
            value: "My package arrived but there were no contents in the box. Just bubble wrap."
          - name: "c$integer"           # integer
            type: "INTEGER"
            value: 21
          - name: "c$yes_no"  # yes/no (1=yes and 0=no)
            type: "BOOLEAN"
            value: 1
          - name: "c$date_field"        # date (yyyy-MM-dd'T'00:00:00. Use 0 for time)
            type: "DATE"
            value: "2020-02-04T00:00:00+00:00" 
          - name: "c$date_time"         # datetime (yyyy-MM-dd'T'HH:mm:ssXXX)
            type: "DATETIME"
            value: "2020-02-04T21:24:18+00:00" 
          - name: "c$menu"              # menu (no type property, you can pass the string or the ID for the value property)
            value: "12"
    transitions:
      ...
  ...
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      ...
      customProperties: "${liveChatInfo.value}"

Ejemplo: objeto customFields heredado

context:
  variables:
    liveChatInfo: "map"
    skillType: "string"
...
  setupCustomFields:
    component: "System.SetVariable"
    properties:
      variable: "liveChatInfo"
      value:
        customerInformation: 
          interfaceID:
            id:
              id: 1     
        customFields:
# Text Field
          - name: "c$da_text_field"
            dataType: "STRING"
            dataValue:
              stringValue: "SILVER"
# Text Area
          - name: "c$da_text_area"
            dataType: "STRING"
            dataValue:
              stringValue: "This is a very long string that is more than 32 characters."
# Integer
          - name: "c$da_integer"
            dataType: "INTEGER"
            dataValue:
              integerValue: 21
# Menu
          - name: "c$da_menu"
            dataType: "NAMED_ID"
            dataValue: 
              namedIDValue:
                name: "Item 1"
# Instead of name, you can use
#                id:
#                  id: 1
#
# Yes/No
          - name: "c$da_is_from_skill"
            dataType: "BOOLEAN"
            dataValue:
              booleanValue: true
# Date (XML Schema Date)
          - name: "c$da_date"
            dataType: "DATE"
            dataValue:
              dateValue: "2019-10-26" 
# DateTime (XML Schema DateTime)
          - name: "c$da_datetime"
            dataType: "DATETIME"
            dataValue:
              dateTimeValue: "2019-10-26T21:32:52"               
    transitions:
      ...
  ...
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      ...
      customProperties: "${liveChatInfo.value}"

Ejemplo: ensamblaje del objeto de propiedades personalizadas

En estos pasos se describe cómo puede declarar el objeto customProperties y definir sus distintos valores.

Paso 1: declaración de la variable de propiedades personalizadas
En el nodo context, defina una variable de asignación para la propiedad customProperties en el componente System.AgentInitiation. Es un objeto JSON que puede contener la información del cliente de chat y los valores de campo personalizado. En el siguiente ejemplo, esta variable se declara como liveChatInfo:
context:
  variables:
    size: "PizzaSize"
    type: "PizzaType"
    crust: "PizzaCrust"
    iResult: "nlpresult"
    interfaceId: "string"
    categoryId: "string"
    skillType: "string"
    liveChatInfo: "map"
Paso 2: definición de los valores de la variable de asignación customProperties
En el nodo context, defina una variable de asignación para la propiedad customProperties en el componente System.AgentInitiation. Es un objeto JSON que puede contener la información del cliente de chat y los valores de campo personalizado. En el siguiente ejemplo, esta variable se declara como liveChatInfo:
context:
  variables:
    size: "PizzaSize"
    type: "PizzaType"
    crust: "PizzaCrust"
    iResult: "nlpresult"
    interfaceId: "string"
    categoryId: "string"
    skillType: "string"
    liveChatInfo: "map"
Paso 3: definición de los campos para la variable de asignación customProperties
Si define los valores de asignación mediante un componente personalizado o mediante el flujo de diálogo, debe estructurar el objeto de mapa. Utilice los formatos de objeto estándar a menos que el canal de integración de agente se haya creado antes de la versión 20.1 o el canal se conecte a una versión de Oracle B2C Service anterior a la 19A. A continuación se muestra un ejemplo del formato estándar:

  setLiveChatInfo:
    component: "System.SetVariable"
    properties:
      variable: "liveChatInfo"
      value:
        customerInformation: 
          categoryID:
            id: "${categoryId}"             
        customFields: 
          - name: "c$skilltype"
            type: "STRING"
            value: "${skillType}"
    transitions:
      next: "agentInitiation"
Paso 4: adición de customProperties al componente System.AgentInitiation
Por último, agregue la propiedad customProperties al componente System.AgentInitiation y defínala utilizando una expresión que acceda al valor de la variable de asignación.
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      subject: "A customer needs help regarding ${skillType}."
      agentChannel: "ServiceCloudIntegration"
      waitingMessage: "Let me connect you with someone who can further assist you."
      resumedMessage: "Please wait, someone will be with you shortly."
      rejectedMessage: "Sorry no one is available now."
      errorMessage: "We're sorry! We're having system issues and we can't connect you with an agent."
      customProperties: "${liveChatInfo.value}"
    transitions:
      actions:
        accepted: "agentConversation"
        rejected: "initiationRejected"
        error: "tryAgain"
  initiationRejected:
    component: "System.Output"
    properties:
      text: "Perhaps it's outside their working hours or it's a holiday."
    transitions:
      return: "tryAgain"
  tryAgain:
    component: "System.Output"
    properties:
      text: "Please try again later."
    transitions:
      return: "tryAgain"

System.AgentConversation

Utilice este componente para transferir la conversación de una aptitud a un agente activo de Oracle B2C Service y para gestionar el intercambio entre el agente activo y la aptitud. Tenga en cuenta que debe llamar al componente System.AgentInitiation para poder utilizar este componente.

System.AgentConversation está orientado a conversaciones originadas en la aptitud. No utilice este componente para conversaciones originadas en el chat de Oracle B2C Service, como se describe en El marco del asistente digital como agente en acción.

A continuación, se muestra un ejemplo del uso de este componente para transferir la conversación a la instancia de Oracle B2C Service definida por el canal de integración de agente denominado ServiceCloudIntegration.

  agentConversation:
    component: "System.AgentConversation"
    properties:
      agentChannel: "ServiceCloudIntegration"
      nlpResultVariable: "iResult"
      errorMessage: "Oops, we lost connection with the agent. If you need further help, please call customer support."
      exitKeywords: "bye, exit, take care, goodbye, quit"
      expiryMessage: "Your chat with the agent timed out"
      waitExpiryMessage: "The chat expired while waiting for an agent"
      conclusionMessage: "Your chat with the agent has ended."
      waitMessage: "You are number ${system.message.messagePayload.position} in the queue. Your waiting time is ${(system.message.messagePayload.waitTime>60)?then('${(system.message.messagePayload.waitTime/60)?int} mins','${system.message.messagePayload.waitTime} seconds')}."
    transitions:
      next: "endPrompt"
      actions:
        agentLeft: "endPrompt"
        expired: "sessionExpired"
        waitExpired: "expiredWhileWaiting"
        error: "handleConnectionError"
Propiedad Descripción ¿Obligatoria?
agentChannel Asigna un nombre al canal de integración de agente. Este valor, el nombre del canal de integración de agente y la propiedad agentChannel definida para el componente System.AgentInitiation deben coincidir.
conclusionMessage Mensaje automatizado enviado al cliente cuando el usuario introduce una palabra clave de salida, se dispara la acción agentLeft o el agente termina la conversación sin enviar una de las agentActions. Por ejemplo, Your chat with the agent has ended. No
errorMessage Mensaje que muestra el chat si hay un problema con la conexión a Oracle B2C Service.

El mensaje por defecto es Chat session error. The reason is {cause}.

Esta propiedad solo funciona con instancias de Oracle Digital Assistant aprovisionadas en Oracle Cloud Infrastructure (a veces denominadas infraestructura en la nube de 2ª generación).

No
exitKeywords Lista delimitada por comas de palabras de salida típicas utilizadas por un cliente para finalizar la conversación con el agente en directo. Por ejemplo:

exitKeywords: "bye, exit, take care, goodbye, quit"

El valor por defecto de la propiedad es bye, take care, see you, goodbye.

No
expiryMessage Mensaje que aparece cuando se dispara la acción expired. El mensaje por defecto es Chat session expired. Thanks for chatting with us.

Tenga en cuenta que conclusionMessage no se muestra si se muestra expiryMessage.

El mensaje de caducidad no se muestra cuando finaliza la conversación porque se ha superado el valor USER_WAIT_QUEUE_TIMEOUT de Service Cloud.

No
nlpResultVariable Variable nlpResultVariable que contiene el mensaje de consulta del cliente. No
waitExpiryMessage Mensaje que se muestra al usuario cuando el chat caduca mientras espera a un agente. El mensaje por defecto es The request for live chat expired while waiting for an agent. No
waitMessage Por defecto, una vez iniciada la transferencia de conversación, la aptitud muestra el mensaje de espera que le envía el servicio de chat en directo, como la posición en la cola y el tiempo de espera. Utilice esta propiedad para personalizar el mensaje. Por ejemplo:

waitMessage: "You are number ${system.message.messagePayload.position} in the queue. Your waiting time is ${(system.message.messagePayload.waitTime>60)?then('${(system.message.messagePayload.waitTime/60)?int} mins','${system.message.messagePayload.waitTime} seconds')}."

No

System.AgentConversation Transiciones

System.AgentConversation puede disparar las acciones expired, agentLeft, error o waitExpired. Además, puede disparar cualquier acción desde la propiedad agentActions del componente System.AgentInitiation. También debe agregar una transición next, ya que un cliente puede introducir uno de los valores exitKeywords para dejar el chat antes de que se dispare cualquiera de estas acciones.


  agentConversation:
    component: "System.AgentConversation"
    properties:
      agentChannel: "ServiceCloudIntegration"
      nlpResultVariable: "iResult"
      exitKeywords: "bye, adios, take care, goodbye"
      ...
    transitions:
      next: "endPrompt"
      actions:
        agentLeft: "endPrompt"
        expired: "endPrompt"
        waitExpired: "endPrompt"
        error: "agentConversationError"
  ...
  endPrompt:
    component: "System.List"
    properties: 
      prompt: "Your session has ended. What would you like to do?"
      options: 
      - label: "Order a Pizza"
        value: "OrderPizza" 
      - label: "Nothing. I'm done here."
        value: "Finished" 
      autoNumberPostbackActions: true
    transitions:
      actions:
        OrderPizza: "resolvePizzaSize"
        Finished: "done"
...
      
    
Acción Descripción
agentActions Si el componente System.AgentInitiation tiene una propiedad agentActions, este componente debe contener una acción de transición para cada acción admitida especificada por agentActions.
agentLeft El agente terminó la sesión sin utilizar una acción de barra diagonal (por ejemplo, /Order). Como alternativa, la sesión ha terminado porque no se ha producido ninguna actividad en el tiempo especificado por la configuración de CS_IDLE_TIMEOUT de Oracle B2C Service y dicha configuración es menor que el valor de Vencimiento de la sesión para el canal de integración de agente. Consulte la acción expired para obtener más información.

Tenga en cuenta que no se devuelve esta acción si el usuario abandona la conversación mediante la introducción de una palabra clave de salida. En ese caso, el flujo pasa al estado nombrado por la transición next o, si no hay ninguna transición next, al siguiente estado del flujo.

error

Se ha producido un problema al conectarse al servicio de agente en vivo.

Esta acción solo funciona con instancias de Oracle Digital Assistant aprovisionadas en Oracle Cloud Infrastructure (a veces denominada infraestructura en la nube de 2ª generación).

expired

Si Oracle B2C Service CS_IDLE_TIMEOUT es igual o mayor que el valor de Caducidad de la sesión para el canal de integración del agente, esta acción se dispara cuando ni el usuario final ni el agente envían un mensaje dentro del límite de caducidad de sesión. Si CS_IDLE_TIMEOUT es menor que la configuración de Caducidad de la sesión para el canal de integración del agente y no hay ninguna actividad, Oracle B2C Service termina el chat y en su lugar se activa la acción agentLeft.

Por defecto, el valor de CS_IDLE_TIMEOUT es 10 minutos.

La acción expired no se devuelve cuando finaliza la conversación porque se ha superado el valor USER_WAIT_QUEUE_TIMEOUT de Service Cloud. Plantéese definir esta configuración en un valor alto, como 7.200 segundos (2 horas).

Para ver o cambiar la configuración de la instancia de Oracle B2C Service, abra la consola de escritorio, haga clic en Navegación, haga clic en la primera opción Configuración del menú y haga clic en Configuración. A continuación, busque la configuración en la carpeta Chat.

waitExpired La solicitud de chat ha caducado mientras se esperaba un agente. Esto ocurre cuando el tiempo de espera supera el valor de la opción USER_WAIT_QUEUE_TIMEOUT del cliente de chat.

Ejemplo: configurar el flujo de diálogo de transferencia al agente

En este ejemplo, la intención GetAgent se ha entrenado para comprender llamadas de auxilio, como ¡ayuda, por favor!

intent:
    component: "System.Intent"
    properties:
      variable: "iResult"
    transitions:
      actions:
        OrderPizza: "resolvesize"
        CancelPizza: "cancelorder"
        GetAgent: "agentInitiation"
        unresolvedIntent: "agentInitiation"

A continuación se muestran los pasos básicos para configurar el flujo de diálogo:

  1. Inicie la transferencia al agente en vivo:

    1. Agregue un estado para el componente System.AgentInitiation.

    2. Defina la propiedad agentChannel en el nombre del canal de integración de agente que haya configurado para el sistema del agente en vivo.

    Después de que el canal de integración de agente establezca una conexión y Oracle B2C Service envíe la solicitud de chat a su cola (es decir, después de crear un ticket de ayuda), el componente System.AgentInitiation permite la transición al estado siguiente, que se define normalmente para el componente System.AgentConversation (agentConversation en el siguiente ejemplo).
    
      agentInitiation:
        component: "System.AgentInitiation"
        properties:
          agentChannel: "ServiceCloudIntegration"
          nlpResultVariable: "iResult"
          waitingMessage: "Waiting for an agent..."
          rejectedMessage: "Agents are not available right now."
          resumedMessage: "We're connecting you to an agent..."
          errorMessage: "Oops! We're having system issues. We're sorry, but we can't connect you with an agent right now."
        transitions:
          actions:
            accepted: "agentConversation"
            rejected: "tryAgain"
            error: "tryAgain"
      tryAgain:
        component: "System.Output"
        properties:
          text: "Please try again later."
        transitions:
          return: "tryAgain"

    Consejo:

    Los clientes pueden solicitar de forma repetida un chat en directo, aunque sus solicitudes ya se hayan puesto en cola en la consola de chat del agente. Agregue una propiedad resumedMessage al estado System.AgentInitiation para evitar que dichos clientes reciban el mensaje equívoco Se va a reanudar el chat con el agente.
  2. Agregue y configure el componente System.AgentConversation. Mientras el motor de diálogo tiene el estado definido para este componente, la aptitud transfiere los mensajes del cliente al agente y viceversa. La aptitud escucha las palabras clave de salida de la entrada del usuario, como adiós. Cuando la aptitud detecta una de estas palabras clave, el componente System.AgentConversation termina la sesión de chat en directo y dispara la transición next.

    Ejemplo:

      agentConversation:
        component: "System.AgentConversation"
        properties:
          agentChannel: "ServiceCloudIntegration"
          nlpResultVariable: "iResult"
          errorMessage: "Oops, we lost connection with the agent. If you need further help, please call customer support."
          exitKeywords: "bye, exit, take care, goodbye, quit"
          expiryMessage: "Your chat with the agent timed out."
          conclusionMessage: "Your chat with the agent has ended."
          waitMessage: "You are number ${system.message.messagePayload.position} in the queue. Your waiting time is ${(system.message.messagePayload.waitTime>60)?then('${(system.message.messagePayload.waitTime/60)?int} mins','${system.message.messagePayload.waitTime} seconds')}."
        transitions:
          next: "endPrompt"
          actions:
            agentLeft: "endPrompt"
            expired: "endPrompt"
            error: "endPrompt"
      endPrompt:
        component: "System.Output"
        properties:
          text: "Returning you to your bot."
        transitions:
          return: "endPrompt"

Ejemplo: obtención de información de encuesta

En el siguiente ejemplo, que utiliza el formato estándar, el componente AgentConversation genera un enlace a una encuesta una vez finalizada la conversación del agente. El enlace incluye los ID de sesión y de interacción de la asignación especificada por la propiedad chatResponseVariable.

context:
  variables:
    agentSystemResponse: "map" # chat request response is stored in this variable.
    ...
states:
  ...
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      agentChannel: "B2CServiceIntegration"
      nlpResultVariable: "iResult"
      chatResponseVariable: "agentSystemResponse"  
    transitions:
      actions:
        accepted: "agentConversation"
        rejected: "tryAgain"
        error: "tryAgain"
  agentConversation:
    component: "System.AgentConversation"
    properties:
      agentChannel: "B2CServiceIntegration"
      nlpResultVariable: "iResult"
      exitKeywords: "bye, exit, take care, goodbye, quit"
      expiryMessage: "Your chat with the agent timed out."
      conclusionMessage: "Can you please fill out this survey: <PUT SURVEY URL HERE>?session=${agentSystemResponse.value.sessionId}&surveyid=${agentSystemResponse.value.engagementId}"
    transitions:
      next: "endPrompt"
      actions:
        agentLeft: "endPrompt"
        expired: "sessionExpired"
        error: "agentConversationError"

Ejemplo: transferencia del chat a una cola específica de Oracle B2C Service

  1. Si aún no lo ha hecho, en el nodo context, defina una variable de asignación para utilizarla con la propiedad customProperties del componente System.AgentInitiation. Por ejemplo:

    context:
      variables:
        greeting: "string"
        name: "string"
        liveChatInfo: "map"
    
  2. Defina los campos para la variable de asignación.

    Este es un ejemplo del formato estándar para los canales de integración de agente que se crearon en la versión 20.01 o posterior y que se conectan a la versión 19A o posterior de Oracle B2C Service.

      setLiveChatInfo:
        component: "System.SetVariable"
        properties:
          variable: "liveChatInfo"
          value:
            customFields: 
              - name: "c$frombot"
                type: "BOOLEAN"
                value: 1
        transitions:
          next: "agentInitiation"

    Este es un ejemplo del formato heredado para los canales de integración de agente que se crearon antes de la versión 20.01 o que se conectaron a una versión anterior a la versión 19A de Oracle B2C Service.

      setLiveChatInfo:
        component: "System.SetVariable"
        properties:
          variable: "liveChatInfo"
          value:
            customFields: 
              - name: "c$frombot"
                dataType: "BOOLEAN"
                dataValue:
                  booleanValue: true
        transitions:
          next: "agentInitiation"
  3. Agregue la propiedad customProperties al componente System.AgentInitiation y establézcala en el valor de la variable de asignación. Por ejemplo:

      agentInitiation:
        component: "System.AgentInitiation"
        properties:
          agentChannel: "B2CServiceIntegration"
          nlpResultVariable: "iResult"
          customProperties: "${liveChatInfo.value}"
          waitingMessage: "Waiting for an agent..."
          rejectedMessage: "Agents are not available right now."
          resumedMessage: "We're connecting you to an agent..."
          errorMessage: "Oops! We're having system issues. We're sorry, but we can't connect you with an agent right now."
        transitions:
          actions:
            accepted: "agentConversation"
            rejected: "tryAgain"
            error: "tryAgain"
      tryAgain:
        component: "System.Output"
        properties:
          text: "Please try again later."
        transitions:
          return: "tryAgain"

System.ResolveEntities

Nota

En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Resolver entidad.

Itera a través de todos los campos de entidad de la bolsa compuesta, dialoga con el usuario y resuelve todos los campos. El componente selecciona aleatoriamente las peticiones de datos que se proporcionan para cada entidad al resolver dicha entidad.

Propiedad Descripción Obligatoria
variable Hace referencia a la variable de contexto de la entidad de bolsa compuesta que este componente rellena. Si todas las entidades secundarias de la variable de entidad compuesta ya tienen un valor, el flujo de diálogo pasa al estado siguiente sin enviar un mensaje al usuario.
nlpResultVariable Rellena la propiedad variable (que hace referencia a la variable de entidad de bolsa compuesta) con los valores almacenados en la variable de contexto nlpresult. Puede definir esta propiedad designando la variable nlpresult (normalmente, iResult). Cuando el marco resuelve una única entidad secundaria, la propiedad variable se rellena solo con dicho valor de entidad. Cuando la variable nlpresult incluye valores para todas las entidades secundarias, el flujo de diálogo pasa al estado siguiente. Puede utilizar esta propiedad en lugar de los estados SetVariable que rellenan los valores de la entidad secundaria. No
maxPrompts Especifica el número de intentos asignados al usuario para introducir un valor válido que coincida con el tipo de entidad secundaria. Si se supera el número máximo de intentos para la primera entidad secundaria, esta propiedad se restablece en 0 y el bot genera la petición de datos para la siguiente entidad secundaria. Como se describe en Creación de una entidad de bolsa compuesta, las entidades individuales de la bolsa compuesta pueden sustituir este valor cuando se define la opción Máximo de intentos de entrada de usuario. No
autoNumberPostbackActions Cuando se establece en true, esta opción prefija números a las opciones. Aunque esta opción no se defina en true, la numeración automática se puede aplicar a elementos de lista cuando la configuración de Activar numeración automática en acciones de devolución del asistente digital está definida en true. La numeración automática específica del canal se puede aplicar a cualquier bot de aptitud registrado en un asistente digital:
${(system.channelType=='twilio')?then('true','false')}
No
useFullEntityMatches Cuando se define en true, los valores de entidad personalizados se almacenan como objetos JSON (similar a los valores de entidad incorporados). Esto le permite crear expresiones para acceder a propiedades como value, primaryLanguageValue y originalString, que son especialmente importantes para las aptitudes que actualmente o eventualmente pueden convertirse en multilingües.  
footerText Mejora la salida en canales de solo texto. Como se describe en Pies de página, puede utilizar expresiones de FreeMarker para condicionar el texto del pie de página en los canales de solo texto. No
headerText Mensaje que se muestra antes de que el componente solicite al usuario el siguiente elemento de la bolsa. Puede utilizar esta cabecera para proporcionar comentarios sobre las entidades anteriores de la bolsa que se hayan pareado (o se hayan actualizado).
headerText: "<#list system.entityToResolve.value.updatedEntities>I have updated <#items as ent>${ent.description}<#sep> and </#items>. </#list><#list system.entityToResolve.value.outOfOrderMatches>I got <#items as ent>${ent.description}<#sep> and </#items>. </#list>"
No
transitionAfterMatch Valor booleano que, al definirlo en true, activa una transición temporal desde el proceso de paridad de la entidad realizada por este componente a un componente personalizado. Por defecto, se define en false. Esta propiedad se ignorará (y la transición match no se disparará) si ha registrado un manejador de eventos de entidades. No
cancelPolicy Determina la temporización de la transición cancel:
  • immediate: inmediatamente después de que se hayan alcanzado los intentos de maxPrompts asignados para una entidad en la bolsa.

  • lastEntity: cuando la última entidad de la bolsa se haya pareado con un valor.

Esta propiedad se ignora si se ha registrado un manejador de eventos de entidades con un manejador maxPromptsReached de nivel de evento o elemento.
No

Componentes de calendario

Utilice estos componentes de calendario para interactuar con los calendarios de Outlook y Google:

Autorización de calendario

Para activar la interacción entre una aptitud y un proveedor de calendario, debe configurar un servicio y modificar el flujo de diálogo y la aptitud para que el usuario pueda iniciar sesión en su calendario a través de ese servicio.

Antes de utilizar cualquier componente de calendario, debe registrar una aplicación en el proveedor de calendario y crear un servicio de código de autorización. Consulte estos temas para saber cómo:

En el flujo de diálogo, utilice el componente System.OAuth2AccountLink para solicitar al usuario que inicie sesión en su calendario mediante el servicio de código de autorización que ha creado. Tenga en cuenta que no puede definir la propiedad enableSingleSignOn del componente en true cuando utiliza el componente para la autorización de componentes de calendario.

Puede aprovechar la función "necesita autorización" para garantizar automáticamente que el usuario ha iniciado sesión (obtenido un token de acceso) antes de llamar a cualquier componente de calendario. Esta función solo solicita al usuario que inicie sesión si aún no tiene un token de acceso o si ha caducado y no se puede refrescar. Puede utilizar la configuración Necesita autorización de la aptitud para definir el valor por defecto para toda la aptitud y, a continuación, utilizar el valor requiresAuthorization de nivel de estado para sustituir el valor por defecto. Es decir, utilice la configuración de aptitud para definir el valor por defecto y, a continuación, incluya solo la configuración requiresAuthorization del componente en los estados para los que no se aplica el valor por defecto.

Para utilizar la función "necesita autorización", debe agregar una acción system.authorizeUser al nodo defaultTransitions para asignar un nombre al estado que inicia el flujo de autorización. Por ejemplo:

defaultTransitions:
  error: "globalErrorHandler"
  actions:
    system.authorizeUser: "userAuthN.performOAuth"

Antes de que una aptitud pase a un estado que requiere autorización, comprueba si hay un token de acceso válido para el servicio de calendario. En caso contrario, realiza las siguientes acciones:

  1. Llama al estado que ha definido para la acción system.authorizedUser en el nodo defaultTransitions.

  2. Solicita al usuario que inicie sesión.

  3. Pasa al estado que requiere autorización (es decir, el estado definido por ${system.requestedState}).

A continuación, se muestra un ejemplo de flujo de diálogo de autorización:

defaultTransitions:
  error: "globalErrorHandler"
  actions:
    system.authorizeUser: "userAuthN.performOAuth"

...

  ############################
  # Authenticate
  ############################
     
  userAuthN.performOAuth:
    component: "System.OAuth2AccountLink"
    properties:
      prompt: "User Authentication"
      variable: "code"
      linkLabel: "Sign into ${system.config.calendarProvider}"
      authenticationService: "${system.config.authService}"
      accessTokenVariableName: "user.accessToken"
      authenticatedUserVariableName: "user.authenticatedUser"
      enableSingleSignOn: false # SSO not supported for calendar components
    transitions:
      actions:
        pass : "${system.requestedState}"
        fail : "handleFailedLogin"
        textReceived: "intent"
  handleFailedLogin:
    component: "System.Output"
    requiresAuthorization: false
    properties:
      text: "Sorry, you aren't authorized to do that"
    transitions:
      return: "doneHandleFailedLogin" 

Para una aptitud que se centra principalmente en los componentes de calendario, plantéese definir la configuración Necesita autorización de la aptitud en true y, a continuación, defina el valor en false solo para aquellos estados que no requieren autorización. En este ejemplo, cualquier usuario puede ejecutar los estados initTimezoneOffset e intent. Por lo tanto, requiresAuthorization se define en false para esos estados. Los estados que funcionan con los componentes de calendario no necesitan incluir requiresAuthorization porque el valor por defecto es true.

  initTimezoneOffset:
    requiresAuthorization: false
    component: "System.SetVariable"
    properties:
      variable: "timezoneOffset"
      value: <#attempt>${profile.timezoneOffset}<#recover>0</#attempt>      
    transitions:
      next: "intent"

  intent:
    component: "System.Intent"
    requiresAuthorization: false
    properties:
      variable: "iResult"
    transitions:
      actions:
        SetupMeeting: "setUpMeeting"
        CancelMeeting: "cancelMeeting"
        ListMeetings: "listMeetings"
        UpdateMeeting: "updateMeeting"
        ListInvites: "listInvites"
        RespondInvites: "respondInvites"
        LogoutUser: "logoutUser"
        unresolvedIntent: "greeting"

...
  cancelMeeting.performDelete:
    component: "System.DeleteCalendarEvent"
    properties:
      eventId: "${eventId}"
      provider: "${system.config.calendarProvider}"
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "cancelMeeting.printSuccessMessage"
  cancelMeeting.printSuccessMessage:
    component: "System.Output"
    properties:
      text: "I've cancelled the meeting"
    transitions:
      return: "doneCancel"

Trabajar con fechas y horas de calendario

Al trabajar con los componentes del calendario, es importante comprender la relación entre las horas de inicio y finalización del calendario, las entidades DATE y TIME y la zona horaria local.

Cuando crea, actualiza o recupera eventos, utiliza la fecha y hora local para los valores start y end, y utiliza la propiedad timezoneOffset o timezone para indicar al componente cómo calcular la hora universal (UTC).

El valor timezoneOffset de los componentes del calendario es diferente de profile.timezoneOffset. Para los componentes de calendario, timezoneOffset es el valor que el componente debe agregar a los valores start y end para obtener la UTC. Puede obtener el valor de la propiedad timezoneOffset de un componente de calendario multiplicando profile.timezoneOffset por -1.

Es posible que profile.timezoneOffset no siempre esté disponible. Esto depende de si el cliente ha proporcionado el desfase. Por ejemplo, alguien podría crear una aplicación de Oracle Web que no defina profile.timezoneOffset. Por lo tanto, es una buena idea crear una zona horaria por defecto para los casos en los que no se ha definido profile.timezoneOffset. Por ejemplo:

  initTimezoneOffset:
    requiresAuthorization: false
    component: "System.SetVariable"
    properties:
      variable: "timezoneOffset"
      value: <#attempt>${profile.timezoneOffset}<#recover>${system.config.defaultTimezoneOffset}</#attempt>      
    transitions:
      next: "intent

Al recuperar un evento, el componente devuelve los valores de fecha y hora en formato UTC. Por ejemplo: 2021-04-15T22:00:00.000Z. La aptitud debe convertir el valor en la hora local.

  updateMeeting.printEventDetails:
    component: "System.Output"
    properties:
      keepTurn: true
      text: |
        You selected:
        ${eventDetails.value.subject}
        ${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['MMM d']}
        ${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}-${(eventDetails.value.end?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}
        Location: ${eventDetails.value.location}        
        Attendees: ${eventDetails.value.attendees?join(', ')}     
    transitions:
      next: "updateMeeting.selectItemToChange"

Al utilizar las entidades DATE y TIME, hay que tener en cuenta lo siguiente:

  • Si utiliza una bolsa compuesta que tenga una entidad DATE y una o varias entidades TIME, debe desactivar Extracción en secuencia incorrecta. De lo contrario, cuando se resuelvan las entidades, no tendrá control sobre qué valores se resuelven en la entidad DATE y cuáles se resuelven en la entidad TIME (o en ambas). Por ejemplo, cuando se resuelve el valor de TIME, puede cambiar el valor de la entidad DATE.

  • Cuando una expresión contiene texto como "ayer", "hoy" o "mañana", el analizador no tiene en cuenta la zona horaria local. Por lo tanto, es posible que, al comienzo de la mañana y al final de la tarde, se utilice la fecha incorrecta. Por ese motivo, es buena idea recuperar la fecha de resolución para que el usuario pueda verificarla antes de que la aptitud agregue un evento o actualice la hora de inicio o finalización de un evento.

  • Para definir los valores de las propiedades start y end de un calendario, debe utilizar la fecha de la entidad DATE y la hora de la entidad TIME. Por ejemplo:

          start: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.startTime.date?number_to_date?string['HH:mm:ss']}"
          end: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.endTime.date?number_to_date?string['HH:mm:ss']}"

Gestión de errores de calendario

El proveedor del calendario puede rechazar una solicitud de evento. Por ejemplo, podría devolver un error si el usuario intenta crear un evento que tenga una hora de finalización anterior a la hora de inicio. En la mayoría de los casos, el proveedor del calendario devuelve un error 400, que, a su vez, transfiere la aptitud al manejador de errores globales.

Plantéese validar los valores para evitar que se produzcan estos errores. A continuación, se muestran ejemplos de validaciones de entidad de bolsa compuesta:

  • Entidad DATE: para reuniones nuevas y actualizadas, valide que la fecha sea igual o posterior a la fecha actual.

    ${(meetingSlot.value.date.date?number?long gte  ((.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd']+'T00:00:00')?datetime.iso?long)?then('true','false')}
  • Entidad TIME: para reuniones nuevas y actualizadas, verifique que la fecha y la hora de inicio sean iguales o posteriores a la fecha y hora actuales.

    ${(((meetingSlot.value.date.date?number_to_date?string['yyyy-MM-dd']+'T'+meetingSlot.value.startTime.date?number_to_date?string['HH:mm:ss'])?datetime.iso?long) gte (.now?date?long - timezoneOffset?number))?then('true','false')}

    Para todas las horas de finalización, verifique que la hora de finalización sea posterior a la hora de inicio.

    ${(newEvent.value.startTime.date?number_to_time < newEvent.value.endTime.date?number_to_time)?then('true','false')}

Para manejar los rechazos del proveedor del calendario correctamente, agregue su propio manejador de errores globales. Por ejemplo:

defaultTransitions:
  error: "globalErrorHandler"
  actions:
    system.authorizeUser: "userAuthN.performOAuth"

...

  globalErrorHandler:
    requiresAuthorization: false
    component: "System.Output"
    properties:
      text: "Sorry, we were unable to do the action that you requested."
    transitions:
      return: "done"

También puede utilizar la transición de errores para crear manejadores de errores adecuados para cada caso:

  setUpMeeting.performSchedule:
    component: "System.CreateCalendarEvent"
    properties:
      start: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.startTime.date?number_to_date?string['HH:mm:ss']}"
      end: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.endTime.date?number_to_date?string['HH:mm:ss']}"
      subject: "${newEvent.value.subject}"
      location: "${newEvent.value.location}"
      attendees: "${newEvent.value.attendees}"
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "setUpMeeting.printResults"
      error: "handleCreateEventError"

...

  handleCreateEventError:
    requiresAuthorization: false
    component: "System.Output"
    properties:
      text: "Sorry, there's a problem with the event that you wanted to create."
    transitions:
      return: "done"

System.CreateCalendarEvent

Utilice este componente para agregar un evento a un calendario de Outlook o Google. Tenga en cuenta que no puede crear eventos recurrentes o de todo el día.

El usuario debe iniciar sesión en el proveedor de calendario para acceder a este componente. Puede utilizar la función "necesita autorización" para gestionar el inicio de sesión de usuario, como se describe en Autorización de calendario.

Para obtener más información sobre cómo definir los valores start y end, consulte Trabajar con fechas y horas del calendario.

A continuación se muestra un ejemplo de cómo usar este componente. En este ejemplo, se utiliza una entidad de bolsa compuesta para obtener la fecha, las horas de inicio y finalización, el asunto, la ubicación y los asistentes.


  ####################
  # Create Meeting 
  ####################

  setUpMeeting:
    component: "System.CommonResponse"
    properties:
      keepTurn: true
      processUserMessage: true
      variable: "newEvent"
      nlpResultVariable: "iResult"     
      cancelPolicy: "immediate"
      transitionAfterMatch: "false"
      metadata:
        responseItems:       
          - type: "text"
            text: "${system.entityToResolve.value.prompt}"
            actions:
              - label: "${enumValue}"
                type: "postback"
                iteratorVariable: "system.entityToResolve.value.enumValues"
                payload:
                  variables:
                    newEvent: "${enumValue}"
        globalActions:
          - label: "Cancel"
            type: "postback"
            visible:
              onInvalidUserInput: false
            payload:
             action: "cancel"
    transitions:
      actions:
        cancel: "allDone"
      next: "setUpMeeting.askConfirm"       
  setUpMeeting.askConfirm:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      metadata:
        responseItems:
          - type: "text"
            text: |
              Create ${newEvent.value.subject} meeting on ${newEvent.value.date.date?number_to_date?string['MMM d']}
              from ${newEvent.value.startTime.date?number_to_date?string['hh:mm a']} to ${newEvent.value.endTime.date?number_to_date?string['hh:mm a']}
              at ${newEvent.value.location} with ${newEvent.value.attendees}?
            name: "confirmCreate"
            separateBubbles: true
            actions:
              - label: "Yes"
                type: "postback"
                keyword: "yes"
                payload:
                  action: "yes"
                name: "Yes"
              - label: "No"
                keyword: "no"
                type: "postback"
                payload:
                  action: "no"
                name: "No"
    transitions:
      next: "intent"
      actions:
        yes: "setUpMeeting.performSchedule"
        no: "allDone"
        textReceived: "intent"      
  setUpMeeting.performSchedule:
    component: "System.CreateCalendarEvent"
    properties:
      start: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.startTime.date?number_to_date?string['HH:mm:ss']}"
      end: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.endTime.date?number_to_date?string['HH:mm:ss']}"
      subject: "${newEvent.value.subject}"
      location: "${newEvent.value.location}"
      attendees: "${newEvent.value.attendees}"
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "setUpMeeting.printResults"
      error: "handleCreateCalendarError"
  setUpMeeting.printResults:
    component: "System.Output"
    properties:
      text: "The ${newEvent.value.date.date?number_to_date?string['MMM d']} meeting is now on your calendar."
      keepTurn: true
    transitions:
      next: "setUpMeeting.getMeetings"
...
Nota

Este componente está soportado en la versión 21.02 y posteriores de Oracle Digital Assistant.
Propiedad Descripción ¿Obligatoria?
provider Proveedor de calendario. Los valores permitidos son Google y Outlook.
calendarOwner ID de usuario del responsable del calendario. Debe ser un ID de cuenta válido para el proveedor de calendario, como el valor de la variable identificado por la propiedad authenticatedUserVariable del componente System.OAuth2AccountLink, que se define cuando el usuario se autentica.
calendarId Nombre del calendario. Para el calendario por defecto del usuario, defínalo en el mismo valor que la propiedad calendarOwner.
credential Token de acceso del proveedor. Este es el valor de la variable que se identifica mediante la propiedad accessTokenVariableName del componente System.OAuth2AccountLink, que se define cuando el usuario se autentica.
start Fecha y hora de inicio de la reunión con el formato yyyy-MM-dd'T'HH:mm:ss Por ejemplo, 2021-02-26T09:55:00.
end Fecha y hora de finalización de la reunión con el formato yyyy-MM-dd'T'HH:mm:ss. Por ejemplo, 2021-02-26T09:55:00.
subject Tema de la reunión.
attendees Lista de asistentes separada por comas. Tenga en cuenta que el proveedor de calendario no puede enviar una notificación a un asistente si el ID no es un ID de cuenta válido para ese proveedor.
timezoneOffset Cantidad de tiempo, en milisegundos, que se agrega a la hora universal (UTC) para obtener la hora estándar en la zona horaria del usuario. Por ejemplo, si la zona horaria local es UTC-2, el valor de timezoneOffset es -7200000. El valor por defecto es 0.
Nota

Puede derivar la propiedad timezoneOffset para el usuario actual según el valor de la variable de contexto de usuario profile.timezoneOffset. Sin embargo, si lo hace, debe multiplicar profile.timezoneOffset por -1.

Puede especificar timezoneOffset o timezone, pero no ambos.

No
timezone

ID de zona horaria local identificado por https://www.iana.org/time-zones. También se denomina nombre de base de datos TZ. Por ejemplo: America/Los_Angeles. El valor por defecto es UTC. Puede especificar timezoneOffset o timezone, pero no ambos.

No

System.DeleteCalendarEvent

Utilice este componente para suprimir un evento de un calendario de Outlook o Google. Tenga en cuenta que no puede suprimir eventos recurrentes o de todo el día.

El usuario debe iniciar sesión en el proveedor de calendario para acceder a este componente. Puede utilizar la función "necesita autorización" para gestionar el inicio de sesión de usuario, como se describe en Autorización de calendario.

A continuación se muestra un ejemplo de cómo usar este componente.


  ####################
  # Cancel Meeting
  ####################
  
  # Want to select from deletable meetings

  cancelMeeting:
    component: "System.SetVariable"
    properties:
      variable: "stateAfterList"
      value: "cancelMeeting.confirmCancel"
    transitions:
      next: "cancelMeeting.setListType"
  cancelMeeting.setListType:
    component: "System.SetVariable"
    properties:
      variable: "listType"
      # Only show deletable meetings
      value: "DELETE"
    transitions:
      next: "cancelMeeting.setListPrompt"
  cancelMeeting.setListPrompt:
    component: "System.SetVariable"
    properties:
      variable: "listPrompt"
      value: "to cancel"
    transitions:
      next: "listMeetings.commonEntryPoint"

  # List meetings common code returns to this state
  cancelMeeting.confirmCancel:
    component: "System.ResetVariables"
    properties:
      variableList: "confirmAction"
    transitions:
      next: "cancelMeeting.askConfirm"      
  cancelMeeting.askConfirm:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      metadata:
        responseItems:
          - type: "text"
            text: "Are you sure you want to cancel this meeting?"
            name: "confirmCcancel"
            separateBubbles: true
            actions:
              - label: "Yes"
                type: "postback"
                keyword: "yes"
                payload:
                  action: "yes"
                name: "Yes"
              - label: "No"
                keyword: "no"
                type: "postback"
                payload:
                  action: "no"
                name: "No"
    transitions:
      next: "intent"
      actions:
        yes: "cancelMeeting.performDelete"
        no: "allDone"
        textReceived: "intent"
  cancelMeeting.performDelete:
    component: "System.DeleteCalendarEvent"
    properties:
      eventId: "${eventId}"
      provider: "${system.config.calendarProvider}"
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "cancelMeeting.printSuccessMessage"
  cancelMeeting.printSuccessMessage:
    component: "System.Output"
    properties:
      text: "I've cancelled the meeting"
    transitions:
      return: "doneCancel"
  ...

  ############################
  # List Meetings Shared Code
  ############################
  
  listMeetings.commonEntryPoint:
    component: "System.SetVariable"
    properties:
      variable: "inputDate"
      value: "${iResult.value.entityMatches['DATE'][0]}"
    transitions:
      next: "listMeetings.setDate"
  listMeetings.setDate:
    component: "System.SetVariable"
    properties:
      variable: "start"
      value: "${inputDate.value?has_content?then(inputDate.value.date?number_to_date?string['yyyy-MM-dd'], (.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd'])}T00:00:00"
    transitions:
      next: "listMeetings.clearInputDate"  
  listMeetings.clearInputDate:
    component: "System.ResetVariables"
    properties:
      variableList: "inputDate"
    transitions:
      next: "listMeetings.filterByAttendees"
  listMeetings.filterByAttendees:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      metadata:
        responseItems:
          - type: "text"
            text: "Do you want to list only meetings with a particular attendee?"
            name: "confirmFilter"
            separateBubbles: true
            actions:
              - label: "Yes"
                type: "postback"
                keyword: "yes"
                payload:
                  action: "yes"
                name: "Yes"
              - label: "No"
                keyword: "no"
                type: "postback"
                payload:
                  action: "no"
                name: "No"
    transitions:
      next: "intent"
      actions:
        yes: "listMeetings.resolveAttendeesFilter"
        no: "listMeetings.clearAttendeesFilter"
        textReceived: "intent"

  # clear filter 
  
  listMeetings.clearAttendeesFilter:
    component: "System.ResetVariables"
    properties:
      variableList: "attendees"
    transitions:
      next: "listMeetings.performList"

  # resolve filter

  listMeetings.resolveAttendeesFilter:
    component: "System.CommonResponse"
    properties:
      keepTurn: true
      processUserMessage: true
      variable: "attendees"
      nlpResultVariable: "iResult"
      metadata:
        responseItems:
          - type: "text"
            text: "Who is the attendee?"
    transitions:
      next: "listMeetings.performAttendeesList"
      actions:
        textReceived: "listMeetings.performAttendeesList"

  # perform attendees list 

  listMeetings.performAttendeesList:
    component: "System.SelectCalendarEvent"
    properties:
      listType: "${listType}"
      start: "${start}"
      attendees: "${attendees}"
      prompt: "Choose the ${start?datetime.iso?long?number_to_date?string['MMM d']} meeting ${listPrompt}:"
      eventIdVariableName: "eventId"
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      actions:
        found: "${stateAfterList}"
        notfound: "listMeetings.printNotFoundMessage"
      next: "globalErrorHandler"

  # perform list 

  listMeetings.performList:
    component: "System.SelectCalendarEvent"
    properties:
      listType: "${listType}"
      start: "${start}"
      prompt: "Choose the ${start?datetime.iso?long?number_to_date?string['MMM d']} meeting ${listPrompt}:"
      eventIdVariableName: "eventId"
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      actions:
        found: "${stateAfterList}"
        notfound: "listMeetings.printNotFoundMessage"
      next: "globalErrorHandler"

  listMeetings.printNotFoundMessage:
    component: "System.Output"
    properties:
      text: "There are no meetings on ${start?datetime.iso?long?number_to_date?string['MMM d']}"
    transitions:
      return: "doneListMeetings"
...
Nota

Este componente está soportado en la versión 21.02 y posteriores de Oracle Digital Assistant.
Propiedad Descripción ¿Obligatoria?
provider Proveedor de calendario. Los valores permitidos son Google y Outlook.
calendarOwner ID de usuario del responsable del calendario. Debe ser un ID de cuenta válido para el proveedor de calendario, como el valor de la variable identificado por la propiedad authenticatedUserVariable del componente System.OAuth2AccountLink, que se define cuando el usuario se autentica.
calendarId Nombre del calendario. Para el calendario por defecto del usuario, defínalo en el mismo valor que la propiedad calendarOwner.
credential Token de acceso del proveedor. Este es el valor de la variable que se identifica mediante la propiedad accessTokenVariableName del componente System.OAuth2AccountLink, que se define cuando el usuario se autentica.
eventId ID del evento que se va a suprimir. Puede utilizar System.ListCalendarEvents o System.SelectCalendarEvent para obtener un eventId.

System.GetCalendarEventDetails

Utilice este componente para obtener los detalles de un evento de un calendario de Outlook o Google.

El usuario debe iniciar sesión en el proveedor de calendario para acceder a este componente. Puede utilizar la función "necesita autorización" para gestionar el inicio de sesión de usuario, como se describe en Autorización de calendario.

Los detalles se devuelven en la variable especificada por la propiedad eventDetailsVariableName en el siguiente formato JSON:

{
  "isAllDay": boolean,
  "subject": string,
  "inviteResponse": string,
  "attendees": [
    "string",
      ...
  ],
  "start": format yyyy-MM-dd'T'HH:mm:ss.SSSZ,
  "end":  format yyyy-MM-dd'T'HH:mm:ss.SSSZ,
  "location": string,
  "isRecurring": boolean,
  "id": string
}

Las propiedades start y end son valores UTC. Para obtener más información sobre cómo convertir los valores start y end en la hora local, consulte Trabajar con fechas y horas de calendario.

A continuación se muestra un ejemplo de cómo usar este componente.

  listMeetings.performGetDetails:
    component: "System.GetCalendarEventDetails"
    properties:
      eventId: "${eventId}"
      eventDetailsVariableName: "eventDetails"
      provider: "${system.config.calendarProvider}"
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "listMeetings.checkIfResults"
  # In case the eventId is no longer valid
  listMeetings.checkIfResults:
    component: "System.ConditionExists"
    properties:
      variable: "eventDetails"
    transitions:
      actions:
        exists: "listMeetings.printEventDetails"
        notexists: "globalErrorHandler" 
  listMeetings.printEventDetails:
    component: "System.Output"
    properties:
      text: |
        ${eventDetails.value.subject}
        ${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['MMM d']}
        ${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}-${(eventDetails.value.end?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}
        Location: ${eventDetails.value.location}        
        Attendees: ${eventDetails.value.attendees?join(', ')} 
    transitions:
      return: "doneGetDetails"
Nota

Este componente está soportado en la versión 21.02 y posteriores de Oracle Digital Assistant.
Propiedad Descripción ¿Obligatoria?
provider Proveedor de calendario. Los valores permitidos son Google y Outlook.
calendarOwner ID de usuario del responsable del calendario. Debe ser un ID de cuenta válido para el proveedor de calendario, como el valor de la variable identificado por la propiedad authenticatedUserVariable del componente System.OAuth2AccountLink, que se define cuando el usuario se autentica.
calendarId Nombre del calendario. Para el calendario por defecto del usuario, defínalo en el mismo valor que la propiedad calendarOwner.
credential Token de acceso del proveedor. Este es el valor de la variable que se identifica mediante la propiedad accessTokenVariableName del componente System.OAuth2AccountLink, que se define cuando el usuario se autentica.
eventId ID del evento que se va a recuperar. Puede utilizar System.ListCalendarEvents o System.SelectCalendarEvent para obtener un eventId.
eventDetailsVariableName Nombre de la variable de contexto en la que se almacenan los detalles.

System.ListCalendarEvents

Utilice este componente para obtener una matriz de eventos de Outlook o Google para un responsable de calendario con nombre. Puede filtrar la lista por estos atributos:

  • El evento se puede suprimir
  • El evento se puede actualizar
  • Se ha invitado al usuario al evento
  • Cómo ha respondido el usuario a una invitación
  • El evento incluye uno o varios asistentes con nombre
  • La reunión comienza después de una fecha y hora
  • La reunión finaliza antes de una fecha y hora

El usuario debe iniciar sesión en el proveedor de calendario para acceder a este componente. Puede utilizar la función "necesita autorización" para gestionar el inicio de sesión de usuario, como se describe en Autorización de calendario.

La lista se devuelve en la variable especificada por la propiedad eventListVariableName con el siguiente formato JSON:

[{
  "isAllDay": boolean,
  "subject": string,
  "inviteResponse": string,
  "start": format yyyy-MM-dd'T'HH:mm:ss.SSSZ,
  "end":  format yyyy-MM-dd'T'HH:mm:ss.SSSZ,
  "isRecurring": boolean,
  "id": string
}, …]

Para obtener más información sobre cómo definir los valores start y end, consulte Trabajar con fechas y horas del calendario. Dicho tema también muestra cómo convertir los valores de las propiedades JSON start y end en hora local.

A continuación se muestra un ejemplo de cómo usar este componente.

  ############################
  # List Invites
  ############################

  listInvites:
    component: "System.ListCalendarEvents"
    properties:
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
      listType: "INVITED"
      response: "PENDING,ACCEPTED,TENTATIVE,DECLINED"
      eventListVariableName: "eventList"
      start: "${(.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd']}T00:00:00"
    transitions:
      next: "globalErrorHandler"
      actions:
        found: "listInvites.printMeetings"
        notfound: "listInvites.notFound"
  listInvites.printMeetings:
    component: "System.CommonResponse"
    properties:
      keepTurn: true
      metadata:
        responseItems:
        - type: "text"
          # display the local time
          text: |
            ${eventList.subject} [${eventList.inviteResponse}]
            ${(eventList.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['MMM d hh:mm a']} to ${(eventList.end?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}           
          name: "event"
          separateBubbles: true
          iteratorVariable: "eventList"
      processUserMessage: false
    transitions:
      return: "listInvitesDone"
  listInvites.notFound:
    component: "System.Output"
    properties:
      keepTurn: true
      text: "You don't have any invitations for the next 14 days"
    transitions:
      return: "listInvitesDone"      
Nota

Este componente está soportado en la versión 21.02 y posteriores de Oracle Digital Assistant.
Propiedad Descripción ¿Obligatoria?
provider Proveedor de calendario. Los valores permitidos son Google y Outlook.
calendarOwner ID de usuario del responsable del calendario. Debe ser un ID de cuenta válido para el proveedor de calendario, como el valor de la variable identificado por la propiedad authenticatedUserVariable del componente System.OAuth2AccountLink, que se define cuando el usuario se autentica.
calendarId Nombre del calendario. Para el calendario por defecto del usuario, defínalo en el mismo valor que la propiedad calendarOwner.
credential Token de acceso del proveedor. Este es el valor de la variable que se identifica mediante la propiedad accessTokenVariableName del componente System.OAuth2AccountLink, que se define cuando el usuario se autentica.
listType Indica el tipo de lista. El valor debe ser uno de los siguientes:
  • ALL: todos los tipos de reuniones del responsable del calendario
  • DELETE: todas las reuniones que el responsable del calendario puede suprimir
  • UPDATE: todas las reuniones que el responsable del calendario puede actualizar
  • INVITED: todas las reuniones a las que se ha invitado al responsable del calendario
eventListVariableName Nombre de la variable de contexto en la que se almacenará la lista de eventos.
start Primera fecha y hora para las que deben incluirse las reuniones en la lista (formato: yyyy-MM-dd'T'HH:mm:ss). Por ejemplo, 2021-02-26T09:55:00.
end Última fecha y hora para las que deben incluirse las reuniones en la lista (formato: yyyy-MM-dd'T'HH:mm:ss). Por ejemplo, 2021-02-26T09:55:00.

Para el tipo de lista INVITED, el valor por defecto es 14 días después de la fecha y hora de inicio. Para todos los demás tipos, el valor por defecto es 24 horas después de la fecha y hora de inicio.

No
attendees Lista separada por comas y no sensible a mayúsculas/minúsculas de cadenas que se utiliza para filtrar la lista por asistentes. En la salida solo se incluyen las reuniones en las que uno o varios valores de asistente contienen una o varias cadenas de la lista. No
response Lista separada por comas de estados de invitación para filtrar la lista cuando el valor de listType sea INVITED. Los estados permitidos son:
  • ACCEPTED
  • TENTATIVE
  • DECLINED
  • PENDING

El valor por defecto es PENDING,TENTATIVE, que muestra solo las invitaciones que estén a la espera de una respuesta o que se hayan aceptado de forma provisionalmente.

No
timezoneOffset Cantidad de tiempo, en milisegundos, que se agrega a la hora universal (UTC) para obtener la hora estándar en la zona horaria del usuario. Por ejemplo, si la zona horaria local es UTC-2, el valor de timezoneOffset es -7200000. El valor por defecto es 0.
Nota

Puede derivar la propiedad timezoneOffset para el usuario actual según el valor de la variable de contexto de usuario profile.timezoneOffset. Sin embargo, si lo hace, debe multiplicar profile.timezoneOffset por -1.

Puede especificar timezoneOffset o timezone, pero no ambos.

No
timezone ID de zona horaria local identificado por https://www.iana.org/time-zones. También se denomina nombre de base de datos TZ. Por ejemplo: America/Los_Angeles. El valor por defecto es UTC. Puede especificar timezoneOffset o timezone, pero no ambos. No

Este componente puede devolver las siguientes acciones:

Acción Descripción
found Se han devuelto uno o varios eventos.
notfound No hay ningún evento que coincida.

System.SelectCalendarEvent

Utilice este componente para mostrar una lista de eventos de Outlook o Google que el usuario puede seleccionar. El componente guarda el ID del evento seleccionado en la variable especificada por la propiedad eventIdVariableName.

Puede filtrar la lista para permitir la selección por los siguientes atributos:

  • El evento se puede suprimir
  • El evento se puede actualizar
  • Se ha invitado al usuario al evento
  • Cómo ha respondido el usuario a una invitación
  • El evento incluye uno o varios asistentes con nombre
  • La reunión comienza después de una fecha y hora
  • La reunión finaliza antes de una fecha y hora

El usuario debe iniciar sesión en el proveedor de calendario para acceder a este componente. Puede utilizar la función "necesita autorización" para gestionar el inicio de sesión de usuario, como se describe en Autorización de calendario.

Para obtener más información sobre cómo definir los valores start y end, consulte Trabajar con fechas y horas del calendario.

A continuación se muestra un ejemplo de cómo usar este componente.

  ############################
  # Respond Invites
  ############################
      
  respondInvites.performList:
    component: "System.SelectCalendarEvent"
    properties:
      listType: "INVITED"
      response: "${inviteFilter}"
      # Note: For list type INVITED the default end date is 14 days after the start date and time.
      start: "${(.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd']}T00:00:00"
      prompt: "Select the invitation to send the response to:"
      eventIdVariableName: "eventId"
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "globalErrorHandler"
      actions:
        found: "respondInvites.resolveInviteResponse"
        notfound: "respondInvites.printNotFoundMessage"

  respondInvites.printNotFoundMessage:
    component: "System.Output"
    properties:
      text: "There are no meeting invites."
    transitions:
      return: "allDone"
  ...

Nota

Este componente está soportado en la versión 21.02 y posteriores de Oracle Digital Assistant.
Propiedad Descripción ¿Obligatoria?
provider Proveedor de calendario. Los valores permitidos son Google y Outlook.
calendarOwner ID de usuario del responsable del calendario. Debe ser un ID de cuenta válido para el proveedor de calendario, como el valor de la variable identificado por la propiedad authenticatedUserVariable del componente System.OAuth2AccountLink, que se define cuando el usuario se autentica.
calendarId Nombre del calendario. Para el calendario por defecto del usuario, defínalo en el mismo valor que la propiedad calendarOwner.
credential Token de acceso del proveedor. Este es el valor de la variable que se identifica mediante la propiedad accessTokenVariableName del componente System.OAuth2AccountLink, que se define cuando el usuario se autentica.
listType Indica el tipo de lista. El valor debe ser uno de los siguientes:
  • ALL: todos los tipos de reuniones del responsable del calendario
  • DELETE: todas las reuniones que el responsable del calendario puede suprimir
  • UPDATE: todas las reuniones que el responsable del calendario puede actualizar
  • INVITED: todas las reuniones que no están organizadas por el responsable del calendario, pero a las que el responsable está invitado.
eventIdVariableName Nombre de la variable de contexto en la que se almacenará el ID del evento.
start Primera fecha y hora para las que deben incluirse las reuniones en la lista (formato: yyyy-MM-dd'T'HH:mm:ss). Por ejemplo, 2021-02-26T09:55:00.
end Última fecha y hora para las que deben incluirse las reuniones en la lista (formato: yyyy-MM-dd'T'HH:mm:ss). Por ejemplo, 2021-02-26T09:55:00.

Para el tipo de lista INVITED, el valor por defecto es 14 días después de la fecha y hora de inicio. Para todos los demás tipos, el valor por defecto es 24 horas después de la fecha y hora de inicio.

No
attendees Lista separada por comas y no sensible a mayúsculas/minúsculas de cadenas que se utiliza para filtrar la lista por asistentes. En la salida solo se incluyen las reuniones en las que uno o varios valores de asistente contienen una o varias cadenas de la lista. No
response Lista separada por comas de estados de invitación para filtrar la lista cuando el valor de listType sea INVITED. Los estados permitidos son:
  • ACCEPTED
  • TENTATIVE
  • DECLINED
  • PENDING

El valor por defecto es PENDING,TENTATIVE, que muestra solo las invitaciones que estén a la espera de una respuesta o que se hayan aceptado de forma provisionalmente.

No
prompt Texto que aparece antes de la lista. El valor por defecto es You have the following meeting(s): no es necesario incluir esta propiedad, a menos que desee sustituir el valor por defecto.

Consejo:

En aptitudes con la versión 21.04 y posteriores de la plataforma, el valor por defecto se almacena en el grupo de recursos de la aptitud. Para cambiar el valor por defecto, abra la página Grupo de recursos de la aptitud, haga clic en Icono Grupos de recursos, seleccione el separador Configuración y cambie el mensaje de la clave SelectCalendarEvent - petición de datos.
No
allDayLabel Texto para indicar eventos de todo el día. El valor por defecto es Todo el día. No
recurringLabel Texto para indicar un evento recurrente. El valor por defecto es Recurring. No
acceptedLabel Texto para indicar que el responsable del calendario ha aceptado la invitación. El valor por defecto es Accepted. No
tentativeLabel Texto para indicar que el responsable del calendario ha aceptado provisionalmente la invitación. El valor por defecto es Tentative. No
declinedLabel Texto para indicar que el responsable de calendario ha rechazado la invitación. El valor por defecto es Declined. No
pendingLabel Texto para indicar que el responsable del calendario no ha respondido a la invitación. El valor por defecto es Pending. No
timezoneOffset Cantidad de tiempo, en milisegundos, que se agrega a la hora universal (UTC) para obtener la hora estándar en la zona horaria del usuario. Por ejemplo, si la zona horaria local es UTC-2, el valor de timezoneOffset es -7200000. El valor por defecto es 0.
Nota

Puede derivar la propiedad timezoneOffset para el usuario actual según el valor de la variable de contexto de usuario profile.timezoneOffset. Sin embargo, si lo hace, debe multiplicar profile.timezoneOffset por -1.

Puede especificar timezoneOffset o timezone, pero no ambos.

No
timezone ID de zona horaria local identificado por https://www.iana.org/time-zones. También se denomina nombre de base de datos TZ. Por ejemplo: America/Los_Angeles. El valor por defecto es UTC. Puede especificar timezoneOffset o timezone, pero no ambos. No

Este componente puede devolver las siguientes acciones:

Acción Descripción
found Se han devuelto uno o varios eventos.
notfound No hay ningún evento que coincida.

System.SendInviteResponse

Utilice este componente para aceptar, aceptar provisionalmente o rechazar una invitación para un evento de calendario de Outlook o Google.

El usuario debe iniciar sesión en el proveedor de calendario para acceder a este componente. Puede utilizar la función "necesita autorización" para gestionar el inicio de sesión de usuario, como se describe en Autorización de calendario.

A continuación se muestra un ejemplo de cómo usar este componente.


  ############################
  # Respond Invites
  ############################
      
  respondInvites:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      metadata:
        responseItems:
          - type: "text"
            text: "Which types of meeting invitations do you want to respond to?"
            name: "getInviteFilter"
            separateBubbles: true
            actions:
              - label: "Pending and tentatively accepted invitations"
                type: "postback"
                keyword: "PENDING,TENTATIVE"
                payload:
                  variables: 
                    inviteFilter: "PENDING,TENTATIVE"
              - label: "All invitations"
                keyword: "PENDING,ACCEPTED,TENTATIVE,DECLINED"
                type: "postback"                
                payload:
                  variables: 
                    inviteFilter: "PENDING,ACCEPTED,TENTATIVE,DECLINED"
              - label: "Cancel"
                keyword: "cancel"
                type: "postback"                
                payload:
                  action: "allDone" 
    transitions:
      actions:
        allDone: "allDone"
        textReceived: "intent" 
      next: "respondInvites.performList"
  respondInvites.performList:
    component: "System.SelectCalendarEvent"
    properties:
      listType: "INVITED"
      response: "${inviteFilter}"
      # Note: For list type INVITED the default end date is 14 days after the start date and time.
      start: "${(.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd']}T00:00:00"
      prompt: "Select the invitation to send the response to:"
      eventIdVariableName: "eventId"
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "globalErrorHandler"
      actions:
        found: "respondInvites.resolveInviteResponse"
        notfound: "respondInvites.printNotFoundMessage"
  respondInvites.printNotFoundMessage:
    component: "System.Output"
    properties:
      text: "There are no meeting invites."
    transitions:
      return: "allDone"

  ############################
  # Invite Response
  ############################
      
  respondInvites.resolveInviteResponse:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      metadata:
        responseItems:
          - type: "text"
            text: "Choose a response:"
            name: "getInviteResponse"
            separateBubbles: true
            actions:
              - label: "Accept"
                type: "postback"
                keyword: "ACCEPTED"
                payload:
                  variables: 
                    inviteResponse: "ACCEPTED"
              - label: "Tentatively accept"
                keyword: "TENTATIVE"
                type: "postback"                
                payload:
                  variables: 
                    inviteResponse: "TENTATIVE"
              - label: "Decline"
                keyword: "DECLINED"
                type: "postback"                
                payload:
                  variables: 
                    inviteResponse: "DECLINED"
              - label: "Don't send a response"
                keyword: "CANCEL"
                type: "postback"                
                payload:
                  action: "allDone" 
    transitions:
      actions:
        allDone: "allDone"
        textReceived: "intent" 
      next: "respondInvites.performRespond"
  respondInvites.performRespond:
    component: "System.SendInviteResponse"
    properties:
      eventId: "${eventId}"
      response: "${inviteResponse}"
      provider: "${system.config.calendarProvider}"
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions: 
      next: "respondInvites.printSuccessMessage"
  respondInvites.printSuccessMessage:
    component: "System.Output"
    properties:
      text: "I've sent the meeting invitation response"
    transitions:
      return: "doneSendInviteResponse"
Nota

Este componente está soportado en la versión 21.02 y posteriores de Oracle Digital Assistant.
Propiedad Descripción ¿Obligatoria?
provider Proveedor de calendario. Los valores permitidos son Google y Outlook.
calendarOwner ID de usuario del responsable del calendario. Debe ser un ID de cuenta válido para el proveedor de calendario, como el valor de la variable identificado por la propiedad authenticatedUserVariable del componente System.OAuth2AccountLink, que se define cuando el usuario se autentica.
calendarId Nombre del calendario. Para el calendario por defecto del usuario, defínalo en el mismo valor que la propiedad calendarOwner.
credential Token de acceso del proveedor. Este es el valor de la variable que se identifica mediante la propiedad accessTokenVariableName del componente System.OAuth2AccountLink, que se define cuando el usuario se autentica.
eventId ID del evento al que enviar la respuesta. Puede utilizar System.ListCalendarEvents o System.SelectCalendarEvent para obtener el ID de los eventos de calendario a los que se ha invitado al responsable del calendario.
response Respuesta que se debe enviar. Las respuestas permitidas son:
  • ACCEPTED
  • TENTATIVE
  • DECLINED

System.UpdateCalendarEvent

Utilice este componente para realizar cambios en un evento de calendario de Outlook o Google. Tenga en cuenta que no puede actualizar eventos recurrentes o de todo el día.

El usuario debe iniciar sesión en el proveedor de calendario para acceder a este componente. Puede utilizar la función "necesita autorización" para gestionar el inicio de sesión de usuario, como se describe en Autorización de calendario.

Para obtener más información sobre cómo definir los valores start y end, consulte Trabajar con fechas y horas del calendario.

A continuación se muestra un ejemplo de cómo usar este componente. En este ejemplo, se utiliza una entidad de bolsa compuesta para obtener la fecha, la hora de inicio y la hora de finalización.


  ####################
  # Update Meeting 
  ####################
 
  updateMeeting:
    component: "System.SetVariable"
    properties:
      variable: "stateAfterList"
      value: "updateMeeting.performGetDetails"
    transitions:
      next: "updateMeeting.setListType"
  updateMeeting.setListType:
    component: "System.SetVariable"
    properties:
      variable: "listType"
      # Only show updateable meetings
      value: "UPDATE"
    transitions:
      next: "updateMeeting.setListPrompt"
  updateMeeting.setListPrompt:
    component: "System.SetVariable"
    properties:
      variable: "listPrompt"
      value: "to update"
    transitions:
      next: "listMeetings.commonEntryPoint"

  # List meetings common code returns to this state
  updateMeeting.performGetDetails:
    component: "System.GetCalendarEventDetails"
    properties:
      eventId: "${eventId}"
      eventDetailsVariableName: "eventDetails"
      provider: "${system.config.calendarProvider}"
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "updateMeeting.checkIfResults"      
  updateMeeting.checkIfResults:
    component: "System.ConditionExists"
    properties:
      variable: "eventDetails"
    transitions:
      actions:
        exists: "updateMeeting.printEventDetails"
        notexists: "globalErrorHandler"  
  updateMeeting.printEventDetails:
    component: "System.Output"
    properties:
      keepTurn: true
      text: |
        You selected:
        ${eventDetails.value.subject}
        ${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['MMM d']}
        ${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}-${(eventDetails.value.end?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}
        Location: ${eventDetails.value.location}        
        Attendees: ${eventDetails.value.attendees?join(', ')}     
    transitions:
      next: "updateMeeting.updateTime"

  # Change meeting time
      
  updateMeeting.updateTime:
    component: "System.ResolveEntities"
    properties:
      variable: "meetingSlot"
      nlpResultVariable: "iResult"      
      maxPrompts: 5
      cancelPolicy: "immediate" 
    transitions:
      actions:
        cancel: "allDone"
      next: "updateMeeting.setStart"      
  updateMeeting.setStart:
    component: "System.SetVariable"
    properties:
      variable: "start"
      value: "${meetingSlot.value.date.date?number_to_date?string['yyyy-MM-dd']}T${meetingSlot.value.startTime.date?number_to_date?string['HH:mm:ss']}"
    transitions:
      next: "updateMeeting.setEnd"
  updateMeeting.setEnd:
    component: "System.SetVariable"
    properties:
      variable: "end"
      value: "${meetingSlot.value.date.date?number_to_date?string['yyyy-MM-dd']}T${meetingSlot.value.endTime.date?number_to_date?string['HH:mm:ss']}"
    transitions:
      next: "updateMeeting.updateTime.performUpdate"
  updateMeeting.updateTime.performUpdate:
    component: "System.UpdateCalendarEvent"
    properties:
      eventId: "${eventId}"
      start: "${start}"
      end: "${end}"
      provider: "${system.config.calendarProvider}"
      #timezone: "${system.config.timezoneID}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "updateMeeting.printSuccessMessage"
      error: "handleUpdateCalendarError"
  ...

  ############################
  # List Meetings Shared Code
  ############################
  
  listMeetings.commonEntryPoint:
    component: "System.SetVariable"
    properties:
      variable: "inputDate"
      value: "${iResult.value.entityMatches['DATE'][0]}"
    transitions:
      next: "listMeetings.setDate"
  listMeetings.setDate:
    component: "System.SetVariable"
    properties:
      variable: "start"
      value: "${inputDate.value?has_content?then(inputDate.value.date?number_to_date?string['yyyy-MM-dd'], (.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd'])}T00:00:00"
    transitions:
      next: "listMeetings.clearInputDate"  
  listMeetings.clearInputDate:
    component: "System.ResetVariables"
    properties:
      variableList: "inputDate"
    transitions:
      next: "listMeetings.filterByAttendees"
  listMeetings.filterByAttendees:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      metadata:
        responseItems:
          - type: "text"
            text: "Do you want to list only meetings with a particular attendee?"
            name: "confirmFilter"
            separateBubbles: true
            actions:
              - label: "Yes"
                type: "postback"
                keyword: "yes"
                payload:
                  action: "yes"
                name: "Yes"
              - label: "No"
                keyword: "no"
                type: "postback"
                payload:
                  action: "no"
                name: "No"
    transitions:
      next: "intent"
      actions:
        yes: "listMeetings.resolveAttendeesFilter"
        no: "listMeetings.clearAttendeesFilter"
        textReceived: "intent"

  # clear filter 
  
  listMeetings.clearAttendeesFilter:
    component: "System.ResetVariables"
    properties:
      variableList: "attendees"
    transitions:
      next: "listMeetings.performList"

  # resolve filter

  listMeetings.resolveAttendeesFilter:
    component: "System.CommonResponse"
    properties:
      keepTurn: true
      processUserMessage: true
      variable: "attendees"
      nlpResultVariable: "iResult"
      metadata:
        responseItems:
          - type: "text"
            text: "Who is the attendee?"
    transitions:
      next: "listMeetings.performAttendeesList"
      actions:
        textReceived: "listMeetings.performAttendeesList"

  # perform attendees list 

  listMeetings.performAttendeesList:
    component: "System.SelectCalendarEvent"
    properties:
      listType: "${listType}"
      start: "${start}"
      attendees: "${attendees}"
      prompt: "Choose the ${start?datetime.iso?long?number_to_date?string['MMM d']} meeting ${listPrompt}:"
      eventIdVariableName: "eventId"
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      actions:
        found: "${stateAfterList}"
        notfound: "listMeetings.printNotFoundMessage"
      next: "globalErrorHandler"

  # perform list 

  listMeetings.performList:
    component: "System.SelectCalendarEvent"
    properties:
      listType: "${listType}"
      start: "${start}"
      prompt: "Choose the ${start?datetime.iso?long?number_to_date?string['MMM d']} meeting ${listPrompt}:"
      eventIdVariableName: "eventId"
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      actions:
        found: "${stateAfterList}"
        notfound: "listMeetings.printNotFoundMessage"
      next: "globalErrorHandler"

  listMeetings.printNotFoundMessage:
    component: "System.Output"
    properties:
      text: "There are no meetings on ${start?datetime.iso?long?number_to_date?string['MMM d']}"
    transitions:
      return: "doneListMeetings"
...
Nota

Este componente está soportado en la versión 21.02 y posteriores de Oracle Digital Assistant.
Propiedad Descripción ¿Obligatoria?
provider Proveedor de calendario. Los valores permitidos son Google y Outlook.
calendarOwner ID de usuario del responsable del calendario. Debe ser un ID de cuenta válido para el proveedor de calendario, como el valor de la variable identificado por la propiedad authenticatedUserVariable del componente System.OAuth2AccountLink, que se define cuando el usuario se autentica.
calendarId Nombre del calendario. Para el calendario por defecto del usuario, defínalo en el mismo valor que la propiedad calendarOwner.
credential Token de acceso del proveedor. Este es el valor de la variable que se identifica mediante la propiedad accessTokenVariableName del componente System.OAuth2AccountLink, que se define cuando el usuario se autentica.
eventId ID del evento que se va a actualizar. Puede utilizar System.ListCalendarEvents o System.SelectCalendarEvent para obtener un eventId.
start La nueva fecha y hora de inicio con el formato yyyy-MM-dd'T'HH:mm:ss, por ejemplo, 2021-02-26T09:55:00. No
end La nueva fecha y hora de finalización con el formato yyyy-MM-dd'T'HH:mm:ss, por ejemplo, 2021-02-26T09:55:00. No
subject Nuevo tema de la reunión.
attendees Lista de asistentes separada por comas. Esta lista sustituye a la lista anterior. Tenga en cuenta que el proveedor de calendario no puede enviar una notificación a un asistente si el ID no es un ID de cuenta válido para ese proveedor.
timezoneOffset Cantidad de tiempo, en milisegundos, que se agrega a la hora universal (UTC) para obtener la hora estándar en la zona horaria del usuario. Por ejemplo, si la zona horaria local es UTC-2, el valor de timezoneOffset es -7200000. El valor por defecto es 0.
Nota

Puede derivar la propiedad timezoneOffset para el usuario actual según el valor de la variable de contexto de usuario profile.timezoneOffset. Sin embargo, si lo hace, debe multiplicar profile.timezoneOffset por -1.

Puede especificar timezoneOffset o timezone, pero no ambos.

No
timezone ID de zona horaria local identificado por https://www.iana.org/time-zones. También se denomina nombre de base de datos TZ. Por ejemplo: America/Los_Angeles. El valor por defecto es UTC. Puede especificar timezoneOffset o timezone, pero no ambos. No

Pies de Página

Utilice los pies de página de System.List y System.CommonResponse para obtener más información si el bot se ejecuta en canales de solo texto.
Imagen de tiempo de ejecución del texto de pie de página.
Este pie de página se muestra en todos los canales, incluso los que admiten botones como Facebook. Sin embargo, puede configurar una presentación específica del canal para el pie de página. Para ello:
  • Defina la variable autoNumberPostbackActions utilizando la expresión system.message.
    setAutoNumbering:
      component: "System.SetVariable"
      properties:
        variable: "autoNumberPostbackActions" 
        value: "${(system.channelType=='facebook')?then('true','false')}" 
  • Establezca la definición footerText con una directiva if de Apache FreeMarker para mostrar u ocultar el pie de página según el tipo de canal.
    footerText: <#if autoNumberPostbackActions.value>"Make your choice by entering the menu option number."</#if>
Nota

En Facebook, System.CommonResponse presenta el texto del pie de página en su propia burbuja de texto, que aparece justo antes de las acciones globales (las respuestas rápidas). El pie de página no se puede mostrar después de estas acciones, porque se necesita una segunda burbuja de texto de pie de página que provoca que las acciones desaparezcan.

Propiedad translate

La interfaz de usuario y los componentes de entrada basados en YAML tienen una propiedad translate que sustituye la configuración de la variable global autoTranslate:
  • Si se define la variable autoTranslate en false (valor por defecto), no se produce ninguna traducción automática en el componente, a menos que se defina la propiedad translate en true.

  • Si se define la variable autoTranslate en true, la propiedad translate también se define implícitamente en true, lo que significa que se traducen la etiqueta, el título, la descripción, la petición de datos y las cadenas de texto.

Por ejemplo, si se ha activado autotranslate definiendo el valor en true, y se define la propiedad translate de un componente en false, quedan excluidos de la traducción la petición de datos, el título, la descripción, la etiqueta y las cadenas de texto. Por otro lado, si no se activa autotranslate, pero la propiedad translate de un componente se define en true, la petición de datos, el título, la descripción, la etiqueta y la cadena de texto del componente se traducen al idioma de usuario detectado con el servicio de traducción configurado. (Los componentes de entrada traducen la entrada del usuario al inglés.)
Si autoTranslate se ha definido en... ... y la propiedad translate del componente está definida en... ... la entrada del usuario, la petición de datos, la etiqueta, el texto, el título y la descripción se traducen
true no definido si
true true si
true false no
false no definido no
false false no
false true si
Nota

Los flujos diseñados con el diseñador de flujos visual no tienen la propiedad translate ni la variable de contexto autoTranslate. Para configurar la traducción de esas aptitudes, utilice las propiedades Mensaje de entrada de usuario de conversión y Mensaje de respuesta de bot de conversión.

System.Feedback

Nota

En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Comentarios del usuario.

El componente System.Feedback permite recopilar datos de comentarios para Estadísticas presentando a los usuarios una escala de calificación después de que hayan completado un flujo transaccional. Si utiliza el SDK de la versión 21.10 o posterior, este componente genera un sistema de clasificación por estrellas horizontal. Si utiliza un SDK anterior, el componente genera esta escala de calificación como una lista sencilla que permite a los usuarios tocar el botón que corresponde a su calificación.

Aunque puede cambiar el comportamiento de este componente mediante las propiedades del componente, puede cambiar su aspecto al utilizar el SDK (versión 21.10 o posterior). Por ejemplo, puede sustituir los iconos de estrella por defecto utilizados para los botones de comentarios por otro icono.

System.Feedback Propiedades de Componente

Propiedad Descripción
maxRating Calificación máxima que puede enviar un usuario. Por defecto, el valor máximo es 5. Puede ajustar este valor hacia abajo.
enableTextFeedback Un valor booleano, que si se define en true, permite al usuario enviar comentarios de texto si la calificación es menor o igual que el valor threshold. Por defecto, esta propiedad está definida en false (no hay comentarios activados).
threshold Valor para evaluar la transición entre las acciones above y below. Por defecto, el umbral entre los comentarios positivos y negativos se define como 2 para el valor maxRating por defecto, que es 5.
footerText Texto que se muestra en la parte inferior del cuadro de diálogo de comentarios.

System.Feedback Transiciones de componentes

Cada acción de transición debe asignar un nombre a un estado del flujo de diálogo que termine la conversación con una transición return: "done".
Acción Descripción
above Se define cuando la entrada de usuario es un valor válido que está por encima del valor threshold.
below Se define cuando la entrada de usuario es un valor válido que es igual o inferior al valor threshold. ).
cancel Defina esta opción cuando los usuarios rechacen la calificación haciendo clic en Omitir.
Puede utilizar las siguientes variables del sistema para la salida de mensajes mediante los estados de transición:
  • system.userFeedbackRating: devuelve la calificación del usuario.
  • system.userFeedbackText: cuando enableTextFeedback está definido en true, la aptitud puede solicitar comentarios cuando las calificaciones están por debajo del valor threshold. system.userFeedbackText devuelve la entrada del usuario (${system.userFeedbackText.value}).
...
  getUserFeedback:
    component: "System.Feedback"
    properties: 
      threshold: 2
      maxRating: 5
      enableTextFeedback: true
    transitions:
      actions:
        above: "positiveFeedback"
        below: "negativeFeedback"
        cancel: "cancelFeedback"
  positiveFeedback:
    component: "System.Output"
    properties:
      text: "Thank you for your rating of ${system.userFeedbackRating.value}."
    transitions:
      return: "done"
  negativeFeedback:
    component: "System.Output"
    properties:
      text: "You gave us a score of ${system.userFeedbackRating.value} and entered ${system.userFeedbackText.value}. We appreciate your feedback."
    transitions:
      return: "done"
  cancelFeedback:
    component: "System.Output"
    properties:
      text: "Feedback canceled."
    transitions:
      return: "done"
...

System.Text

Nota

Este componente está en desuso y ya no hay una plantilla disponible para él. En su lugar, puede utilizar una de las muchas plantillas basadas en el componente Respuesta común que se ofrece en la sección Mensajería de usuario del cuadro de diálogo Agregar componente.

El componente System.Text permite al bot configurar una variable de usuario o contexto solicitando al usuario que introduzca texto.

Cuando el motor de diálogo introduce un estado System.Text por primera vez, solicita al usuario que introduzca texto. Cuando el usuario introduce un valor, el motor de diálogo vuelve a este estado. El componente procesa la respuesta del usuario y, si puede convertir la entrada de usuario en el tipo de variable, almacena el valor en la variable. El motor de diálogo pasa a otro estado cuando esta variable tiene un valor.
Nota

El motor de diálogo omite el estado System.Text si la variable ya tiene un valor.
Propiedad Descripción ¿Obligatoria?
prompt Cadena de texto que describe la entrada necesaria del usuario. Puede agregarle valores de forma dinámica con una expresión de valor. Por ejemplo: Hello ${profile.firstName}, how many pizzas do you want?
variable Nombre de la variable, que puede ser una variable de usuario o una de las variables declaradas en el nodo context.
nlpResultVariable Establece la propiedad variable en un valor de entidad, si dicho valor de entidad no se ha establecido ya para la variable de referencia. Puede activar nlpResultVariable para que devuelva un valor si la define con una variable que contenga los resultados de NLP (como iresult: "nlpresult", que se utiliza en nuestros bots de ejemplo). Al hacerlo, la propiedad nlpResultVariable sigue pudiendo rellenar el valor cuando es nula, si encuentra una entidad resuelta que coincida con aquella a la que hace referencia la variable. El cuadro de diálogo pasa al estado siguiente cuando nlpResultVariable define el valor. Puede utilizar esta propiedad en lugar del componente System.SetVariable. No
maxPrompts Número de veces que el componente solicita una entrada válida al usuario. Consulte Limitación del número de peticiones de datos de usuario. No
translate Utilice esta propiedad para sustituir el valor booleano definido para la variable de contexto autotranslate. Si no ha definido esta variable o si la ha definido en false, puede establecer esta propiedad en true para activar la traducción automática solo para este componente. Si define la variable autotranslation en true, puede establecer esta propiedad en false para excluir este componente de la traducción automática. Consulte Servicios de traducción en aptitudes. No

Consulte Transiciones para componentes de respuesta común para conocer los tipos de acción predefinidos que se pueden utilizar con este componente.

¿Cómo se utiliza el componente System.Text?

En este ejemplo, la variable type contiene los valores esperados por la entidad PizzaType, como cheese, Veggie Lover y Hawaiian. Cuando falta esta información en la entrada de usuario, el bot puede obtenerla porque su flujo de diálogo pasa al estado type, cuyo componente System.Text solicita que se indiquen explícitamente las preferencias. Tenga en cuenta que, incluso en este punto, la entrada de usuario aún debe resolverse en la entidad PizzaType para pasar al siguiente estado.

main: true
name: "PizzaBot"
parameters:
  age: 18
context:
  variables:
    size: "PizzaSize"
    type: "PizzaType"
    crust: "PizzaCrust"
    iResult: "nlpresult"

...

  type:
    component: "System.Text"
    properties:
      prompt: "What Type of Pizza do you want?"
      variable: "type"
    transitions:
      ...

System.List

Nota

Este componente está en desuso y ya no hay una plantilla disponible para él. En su lugar, puede utilizar una de las muchas plantillas basadas en el componente Respuesta común que se ofrece en la sección Mensajería de usuario del cuadro de diálogo Agregar componente.

El componente System.List está diseñado para generar una lista de opciones. En función de si se ha definido un valor de variable (o incluso definido para este componente), la navegación desde el componente se puede disparar mediante la selección del usuario o mediante el valor definido para la variable de usuario o de contexto.

Propiedad Descripción ¿Obligatoria?
options Puede especificar la propiedad options utilizando cadenas de texto separadas por comas, expresiones de Apache FreeMarker y en forma de lista de asignaciones. Las opciones Propiedad y Listas de acciones proporcionan ejemplos del último enfoque.
prompt Cadena de texto de solicitud para el usuario.
variable Nombre de la variable cuyo valor rellena la entrada de usuario. El motor de diálogo omite este estado si el valor de la variable ya se ha definido y no muestra las opciones de lista para el usuario. No
nlpResultVariable Establece la propiedad variable en un valor de entidad, si dicho valor de entidad no se ha establecido ya para la variable de referencia. Puede activar nlpResultVariable para que devuelva un valor si la define con la variable que contiene los resultados de NLP (como iResult: "nlpresult" que se utiliza en nuestras aptitudes de ejemplo). Al hacerlo, la propiedad nlpResultVariable sigue pudiendo rellenar el valor cuando es nula, si encuentra una entidad resuelta que coincida con aquella a la que hace referencia la variable. El cuadro de diálogo pasa al estado siguiente cuando nlpResultVariable define el valor. Puede utilizar esta propiedad en lugar del componente System.SetVariable. Las listas de acciones describen cómo puede utilizar las propiedades variable y nlpResultVariable para cambiar el comportamiento de visualización de la lista. No: utilice esta propiedad si la propiedad de variable nombra una variable de tipo de entidad.
maxPrompts Número de veces que el componente solicita una entrada válida al usuario. Consulte Limitación del número de peticiones de datos de usuario. No
translate Utilice esta propiedad para sustituir el valor booleano definido para la variable de contexto autotranslate. Si no ha definido esta variable o si la ha definido en false, puede establecer esta propiedad en true para activar la traducción automática solo para este componente. Si define la variable autotranslation en true, puede establecer esta propiedad en false para excluir este componente de la traducción automática. Consulte Servicios de traducción en aptitudes. No
autoNumberPostbackActions Si se define en true, esta opción prefija números a las opciones. Aunque esta opción no se defina en true, la numeración automática se puede aplicar a elementos de lista cuando la configuración de Activar numeración automática en acciones de devolución del asistente digital está definida en true. La numeración automática específica del canal se puede aplicar a cualquier aptitud registrada en un asistente digital: ${(system.channelType=='twilio')?then('true','false')} No
footerText Mejora la salida en canales de solo texto. Como se describe en Pies de página, puede utilizar expresiones de FreeMarker para condicionar el texto del pie de página en los canales de solo texto. No
Consulte Transiciones para componentes de respuesta común para conocer los tipos de acción predefinidos que se pueden utilizar con este componente.

Listas de valores

Puede utilizar el componente System.List para devolver un valor que satisfaga una variable de contexto definida como primitiva (como greeting: "string" en la plantilla de flujo de diálogo) o como entidad, como se muestra en el siguiente fragmento. En este flujo de diálogo, la definición de options: "Thick,Thin,Stuffed,Pan" devuelve un valor que coincide con la variable crust. La propiedad options definida para size es una expresión de valor (${size.type.enumValues}) que devuelve los valores de lista Large, Medium, Small y Personal como opciones. Consulte Sintaxis de lenguaje de plantilla de Apache FreeMarker.

Este ejemplo también muestra cómo la definición iResult de la propiedad nlpResultVariable permite al componente establecer los valores de entidad para las propiedades variable de los estados crust y size si estos valores no se han definido previamente. Como el componente Text, el componente System.List no requiere ninguna transición.
main: true
name: "PizzaBot"

...

context:
  variables:
    size: "PizzaSize"
    crust: "PizzaCrust"
    iResult: "nlpresult"

...

states:

...

crust:
  component: "System.List"
  properties:
    options: "Thick,Thin,Stuffed,Pan"
    prompt: "What crust do you want for your pizza?"
    variable: "crust"
main: true
name: "PizzaBot"

...

context:
  variables:
    size: "PizzaSize"
    crust: "PizzaCrust"
    iResult: "nlpresult"
...

states:

...

crust:
   component: "System.List"
   properties:
     options: "Thick,Thin,Stuffed,Pan"
     prompt: "What crust do you want for your pizza?"
     variable: "crust"
     nlpResultVariable: "iresult"
   transitions:
     next: "size"
size:
   component: "System.List"
   properties:
     options: "${size.type.enumValues}"
       prompt: "What size Pizza do you want?"
       variable: "size"
       nlpResultVariable: "iresult"
    transitions:
      ...

Componente de lista de un chat en directo.
Nota

Los usuarios no están limitados a las opciones incluidas en la lista. Pueden resolver la entidad introduciendo una palabra que la entidad reconozca, como un sinónimo. En lugar de elegir entre las opciones de tamaño de pizza de la lista, por ejemplo, los usuarios pueden introducir big, un sinónimo definido para la opción Large de la entidad PizzaSize. Consulte Entidades personalizadas.
Componente de lista con entrada de usuario.

Propiedad options

Puede definir la propiedad options mediante alguna de las siguientes opciones:
  • Una lista de asignaciones: si bien puede definir la propiedad options como una cadena de texto o una expresión de valor, también puede configurar la propiedad options como una lista de asignaciones. Cada una tiene una propiedad label, una propiedad value y una propiedad keyword opcional. Si sigue este enfoque, puede localizar las opciones de lista, ya que, como se indica en el ejemplo siguiente, puede hacer referencia a un grupo de recursos. Consulte Grupos de recursos para aptitudes para obtener más información sobre el uso de la notación de puntos. Cuando los usuarios introducen un valor que coincide con uno de los valores especificados en la propiedad keyword, el bot reacciona de la misma manera en que lo haría si el usuario tocara la opción de lista.
    askPizzaSize:
      component: "System.List" 
      properties:
        prompt: What size do you want?"
        options:
        - value: "small"
          label: "${rb.pizza_size_small}"
          keyword: "1"
        - value: "medium"
          label: "${rb.pizza_size_medium}"
          keyword: "2" 
        - value: "large"
          label: "${rb.pizza_size_large}"
          keyword: "3" 
       variable: "pizzaSize"
  • Cadena de texto de opciones separadas por comas, como "small, medium, large" en el siguiente fragmento. No puede agregar las propiedades label y value si define options como cadena.
    askPizzaSize:
      component: "System.List"
      properties: 
        prompt: "What size do you want?"
        options: "small, medium, large"
        variable: "pizzaSize"
    
  • Expresión de valor de Apache FreeMarker que realiza un bucle en una lista de cadenas o una lista de asignaciones, donde cada asignación debe contener las propiedades label y value y, opcionalmente, una propiedad keyword.
    askPizzaSize:
      component: "System.List" 
      properties:
        prompt: "What size do you want?"
        options: "${pizzaSize.value.enumValues}"
        variable: "pizzaSize"
Consulte el Manual de Apache FreeMarker para obtener más información sobre la sintaxis.

Listas de Acción

En lugar de utilizar el componente System.Switch para la navegación condicional, puede utilizar listas de acciones. Las propiedades opcionales variable y nlpResultVariable de System.List definen el comportamiento de visualización de la lista y la transición posterior en función de la entrada del usuario.
  • Cuando no configure estas propiedades, la acción de transición se basa en la opción seleccionada por el usuario de la aptitud:
    showMenu:
      component: "System.List" 
      properties:
        prompt: "Hello, this is our menu today"  
        options:
    
        - value: "pasta"
          label: "Pasta"
        - value: "pizza"
          label: "Pizza"
    
      transitions:
        actions:
          pasta: "orderPasta"
          pizza: "orderPizza"
  • Al agregar las propiedades variable y nlpResultVariable, la visualización de la lista se omite cuando se hace coincidir la entrada de usuario. En el siguiente fragmento, la lista de opciones se omite cuando nlpResultVariable define la variable size de la entrada de usuario, como Quiero una pizza grande. Se dispara la transición adecuada al valor.
    getPizzaSize:
      component: "System.List"
      properties:
        prompt: "What size of pizza"
        variable: "size"
        nlpResultVariable: "iResult"
        options:
    
        - label: "Small"
          value: "Small"
        - label: "Large"
          value: "Large"
        transitions:
          actions:
            Large: "Large"
            Small: "Small"

System.Output

Utilice el componente System.Output para mostrar un mensaje que no requiera una respuesta del usuario o que no requiera que la aptitud procese la respuesta del usuario.
Nota

Este componente está en desuso y ya no hay una plantilla disponible para él. En su lugar, puede utilizar una de las muchas plantillas basadas en System.CommonResponse que se ofrecen en la sección Mensajería de usuario del cuadro de diálogo Agregar componente.
Propiedad Descripción ¿Obligatoria?
text Cadena de texto Sí: este campo necesita un valor.
keepTurn Valor booleano para renunciar (false) o retener el control de la aptitud del flujo de diálogo (true). Utilice keepTurn: true cuando desee obtener una secuencia de mensajes de aptitud no rota en la que no se aceptan interjecciones del usuario. No
translate Utilice esta propiedad para sustituir el valor booleano definido para la variable de contexto autotranslate. Si no ha definido esa variable o si la ha definido en false, puede definir esta propiedad en true para activar la traducción automática solo para este componente. Si define la variable autotranslation en true, puede definir esta propiedad en false para excluir este componente de la traducción automática. Consulte Servicios de traducción en aptitudes. No

¿Cómo se utiliza el componente System.Output?

El componente System.Output requiere la definición de cadena para la propiedad text. Tal y como se ilustra en el siguiente ejemplo de un mensaje de confirmación, puede agregar expresiones de valor a esta cadena.
done:
    component: "System.Output"
    properties:
      text: "Your ${size.value}, ${type.value} pizza with ${crust.value} crust is on its way. Thank you for your order."
Por defecto, el motor de diálogo espera la entrada de usuario tras generar una sentencia a partir de la aptitud. Si sustituye este comportamiento, agregue la propiedad opcional keepTurn y defínala en true para dirigir el motor de diálogo al siguiente estado definido por la propiedad transitions. Si no se ha definido ninguna transición, el motor de diálogo pasa al siguiente estado de la secuencia.
  wait:
    component: "System.Output"
    properties:
      text: "Please wait, we're reviewing your order"
      keepTurn: true
    transitions:
      next: "ready"
 waitmore:
    component: "System.Output"
    properties:
      text: "Almost done..."
      keepTurn: true
    transitions:
      next: "done"
  done:
    component: "System.Output"
    properties:
      text: "Your ${size.value}, ${type.value} pizza with ${crust.value} crust is on its way. Thank you for your order."
    transitions:
      return: "done"

Definición de expresiones de valor para el componente System.Output

Puede definir una o más expresiones de valor para la propiedad text. Por ejemplo, el siguiente fragmento utiliza diferentes expresiones para mostrar el texto para una confirmación de orden (tamaño y tipo de pizza).
confirmation:
    component: "System.Output"
    properties:
      text: "Your ${size.value} ${type.value} pizza is on its way."
    transitions:
      return: "done" 
Cada expresión siempre debe devolver un valor. Si incluso una expresión devuelve un valor nulo, la aptitud genera texto sin formato para cada expresión de la cadena, ofreciendo a los usuarios una salida como esta:
Your ${size.value} ${type.value} is on its way.
Es todo o nada. Para asegurarse de que la aptitud muestre siempre texto que los usuarios puedan comprender, sustituya un valor por defecto por un valor nulo mediante el operador de valor por defecto de Apache Freemarker: ${size.value!\”piping\”} ${type.value!\”hot\”}. Las comillas dobles indican que el valor por defecto no es una referencia de variable, sino que es el valor constante que espera el operador. Por ejemplo:
text: "Your ${size.value!\"piping\"} ${type.value!\"hot\"} pizza is on its way."
Nota

No olvide incluir el carácter de escape de las comillas (\"...\") que delimitan el valor por defecto cuando utilice el operador de Freemarker. La sintaxis OBotML del flujo de diálogo no será válida a menos que utilice esta secuencia de escape cada vez que defina una operación de valor por defecto o delimite el texto de salida con comillas dobles. Por ejemplo, la siguiente definición de componente System.Output permite a los usuarios leer el mensaje tal como Ha dicho “Cancelar esta orden”.
confirmCancel:
    component: "System.Output"
    properties:
      text: "You said, \"Cancel this order.\""
    transitions:
      return: "cancelOrder"

Traducción del texto de salida

Puede suprimir o activar el texto traducido automáticamente del componente System.Output en cada componente utilizando la propiedad translate. Si la define en false, como en el siguiente fragmento, los componentes muestran el texto tal cual, sin traducirlo. Si define esta propiedad en true, podrá activar la traducción automática cuando la variable autoTranslate esté definida en false o no esté definida. Consulte Servicios de traducción en aptitudes.
Nota

Normalmente, la variable autoTranslate no se establece en true si se va a traducir texto con grupos de recursos. No se recomienda esta metodología.
setAutoTranslate:
    component: "System.SetVariable"
    properties:
      variable: "autoTranslate"
      value: "true"
    transitions: 
      ...
...
pizzaType:
   component: "System.Output"
   properties:
     text: "What type of pizza do you want?"
     translate: false
   transitions:
     ...