Otras Tareas

A continuación se muestran algunos temas sobre otras tareas del diseñador de flujos visual, como la autenticación de usuarios, la numeración automática, los grupos de recursos, la creación de formularios de entrada, la creación de parámetros personalizados y la importación y exportación de flujos.

Autorización del Usuario

En determinados puntos de un flujo, puede que desee aplicar la autorización de usuario.

Para ello, realice lo siguiente:

  1. En los estados en los que desea aplicar la autorización, establezca la propiedad Requiere autorización en True. Esta propiedad se encuentra en el separador General del inspector de propiedades del estado.

    Si un usuario que alcanza este estado aún no ha autorizado, se llama al estado Autorizar mediante OAuth y, a continuación, el flujo llama al estado que requiere autorización.

  2. Cree un componente de autorización y asígnelo al evento de transición estándar Autorizar usuario del flujo:
    1. Seleccione el flujo y, a continuación, seleccione el separador Flujo del flujo.
    2. Haga doble clic en el mosaico Eventos para que el flujo lo amplíe.
    3. Pase el puntero del mouse sobre el mosaico Autorizar usuario, haga clic en el botón de puntos suspensivos (...) que aparece y seleccione Agregar estado.
    4. En la categoría Seguridad del selector de plantillas, seleccione un componente, proporcione un nombre para el estado y haga clic en Insertar.

      Consulte Plantillas de seguridad para obtener detalles de cada una de las plantillas disponibles.

    5. En el inspector de propiedades del componente, configure las propiedades del componente, incluidas sus acciones de transición.

Numeración automática de elementos de respuesta

Puede utilizar la función de numeración automática para prefijar botones y opciones de lista con números en las respuestas.

Aunque los usuarios no puedan utilizar gestos de pulsación, pueden disparar las acciones de devolución de los botones introduciendo un número. Esta función es especialmente útil para los canales de texto.

La numeración automática se configura en el nivel de aptitud.

Para configurar la numeración automática:

  1. En la navegación izquierda, seleccione Icono Configuración.
  2. Seleccione el separador Configuración.
  3. Defina el valor de Activar numeración automática en acciones de devolución en flujos de tareas.

    Si desea activar la numeración automática para todos los canales, establezca el valor en true.

    Si desea activar la numeración automática solo para determinados canales, proporcione una expresión para determinar qué canales obtendrán la numeración automática. Por ejemplo, para activar la numeración automática solo para canales de Twilio, debe introducir:

    ${(system.channelType=='twilio')?then('true','false')}

Limitación del número de peticiones de datos del usuario

Puede asegurarse de que los usuarios no se queden atascados en un paso de un flujo de diálogo configurando ese componente para limitar el número de veces que repite una petición de datos al usuario.

La propiedad maxPrompts limita el número de veces que los componentes de respuesta común pueden solicitar datos al usuario cuando no pueden confrontar el valor de entrada con ninguno de los valores definidos para la entidad o el tipo de entrada al que hace referencia la propiedad variable. Puede utilizar esta propiedad para evitar que el cuadro de diálogo entre en círculo cuando los usuarios introduzcan repetidamente valores no válidos. Puede definir el número máximo de peticiones de datos mediante un entero. El cuadro de diálogo pasa al siguiente estado si el usuario introduce un valor válido antes de alcanzar este límite. De lo contrario, el cuadro de diálogo pasa al estado definido por la acción cancel.

Grupos de recursos y el diseñador de flujo visual

Puede utilizar grupos de recursos para almacenar cualquier cadena visible para el usuario que agregue al flujo de diálogo.

Puede hacer referencia a las claves de mensajes del grupo de recursos mediante la variable rb. Una referencia a un mensaje de grupo de recursos simple adopta una de las dos formas siguientes:

  • ${skill.system.rb.RB_ENTRY_NAME}
  • ${rb.RB_ENTRY_NAME}
Para obtener más información sobre los grupos de recursos, incluida información sobre la creación de las propias entradas del grupo de recursos y el uso de formatos de mensajes complejos, consulte Grupos de recursos para aptitudes.

Consejo:

La finalización automática le ayuda a seleccionar los grupos de recursos a los que se hace referencia en las expresiones FreeMarker de Apache.

Modificación de una entrada del grupo de recursos

  1. En la aptitud, haga clic en Icono Grupos de recursos para abrir el grupo de recursos.
  2. Seleccione el separador Configuración.
  3. Mediante el campo Filtro, vaya a la entrada que desea actualizar.
  4. Pase el mouse sobre el valor de la clave y seleccione el icono Editar que aparece.
  5. En el campo Texto, introduzca el mensaje actualizado.
  6. Haga clic en Actualizar entrada.

Mensajes de formulario de entrada de usuario

En los flujos de diálogo, también puede crear formularios de entrada.

A veces, un formulario de entrada es la forma más rápida y menos propensa a errores de recopilar información del usuario. En lugar de someter a los usuarios a una serie de preguntas, la aptitud puede guiar a los usuarios a proporcionar una entrada válida enviándoles formularios que contengan elementos de entrada como campos de entrada de texto, selectores de fecha y hora y conmutadores de conmutador.
A continuación se describe editable-form-example.png
Descripción de la ilustración editable-form-example.png

Dondequiera que el flujo de conversación llame a un mensaje que contenga un formulario de entrada, puede insertar uno agregando un estado inputForm:
  1. En el cuadro de diálogo Agregar estado, seleccione Mensajería de usuario > Crear tablas y formularios. A continuación, seleccione Crear formulario de entrada.
  2. Para crear el diseño del formulario, las acciones y los campos editables y de solo lectura, primero haga clic en Edit Response Items y, a continuación, edite la plantilla de metadatos ResponseItems. En este caso, la plantilla es para el elemento de respuesta editForm.
    responseItems:
      - type: editForm
        title: Input Form
        formColumns: 2
        items:
          - autoSubmit: false
            displayType: textInput
            defaultValue: "${(submittedFields.value.myText)!''}"
            multiLine: false
            minLength: 5
            name: myText
            label: Text
            placeholder: Enter free text
            clientErrorMessage: Field is required and must be between 5 and 50 characters
            required: true
            maxLength: 50
          - validationRegularExpression: "^[a-zA-Z\\s]*$"
            autoSubmit: false
            displayType: textInput
            defaultValue: "${(submittedFields.value.myTextArea)!''}"
            multiLine: true
            name: myTextArea
            label: Text Area
            placeholder: Enter free text
            clientErrorMessage: Numbers are not allowed
          - autoSubmit: false
            displayType: datePicker
            minDate: "1970-01-01"
            defaultValue: "${(submittedFields.value.myDate)!''}"
            name: myDate
            maxDate: "${.now?iso_utc[0..9]}"
            label: Date
            placeholder: Pick a date in the past
            clientErrorMessage: Date is required and must be in the past.
            required: true
          - autoSubmit: false
            maxTime: "12:00"
            displayType: timePicker
            minTime: "00:00"
            defaultValue: "${(submittedFields.value.myTime)!''}"
            name: myTime
            label: Time
            placeholder: Pick a time in the morning
            clientErrorMessage: Time must be in the morning.
            required: false
          - autoSubmit: false
            displayType: numberInput
            minValue: 5
            maxValue: 500
            defaultValue: "${(submittedFields.value.myNumber)!''}"
            name: myNumber
            label: Number
            placeholder: Enter a number between 5 and 500
            clientErrorMessage: Number is required and must be between 5 and 500.
            required: true
          - autoSubmit: false
            displayType: singleSelect
            defaultValue: "${(submittedFields.value.mySingleSelect)!''}"
            name: mySingleSelect
            options:
              - label: Label 1
                value: Value 1
              - label: Label 2
                value: Value 2
              - label: Label 3
                value: Value 3
            layoutStyle: list
            label: Single Select
            clientErrorMessage: Field is required
            required: true
          - autoSubmit: false
            displayType: multiSelect
            defaultValue: "${(submittedFields.value.myMultiSelect?join(','))!''}"
            name: myMultiSelect
            options:
              - label: Label 1
                value: Value 1
              - label: Label 2
                value: Value 2
              - label: Label 3
                value: Value 3
            layoutStyle: list
            label: Multi Select
            clientErrorMessage: Field is required
            required: true
          - displayType: toggle
            defaultValue: "${(submittedFields.value.myToggle)!'true'}"
            name: myToggle
            labelOn: "Yes"
            label: Toggle
            valueOff: "false"
            labelOff: "No"
            valueOn: "true"
        actions:
          - label: Submit
            type: submitForm
        channelCustomProperties:
          - channel: "${system.channelType}"
            properties:
              replaceMessage: "${system.message.messagePayload.type == 'formSubmission'}"

Plantilla Editar Metadatos de Forms

A continuación, se muestran algunos aspectos que se deben tener en cuenta sobre la plantilla para el tipo de respuesta editForm:
  • Las propiedades proporcionadas para los objetos items, actions y channelCustomProperties son específicas de los objetos editFormMessagePayload. Entre otras cosas, esta carga útil contiene descripciones del diseño general del mensaje del formulario de entrada que recibe el usuario, los campos del formulario (de solo lectura y editables) y las personalizaciones específicas del canal para la representación de la interfaz de usuario específica de la plataforma y el comportamiento de envío del formulario.
  • Para cada elemento y dentro del nodo actions, la plantilla hace referencia a una variable de nivel de flujo denominada submittedFields que contiene la entrada del usuario. Se trata de una variable de asignación que se genera al agregar un estado inputForm al flujo de diálogo.
    Nota

    Según sus necesidades, puede hacer referencia a variables individuales o a una variable de bolsa compuesta en lugar de la variable submittedFields.
  • items:
    • Si bien la plantilla proporciona propiedades para los campos editables (campos de selección única y múltiple, selectores de fecha y hora, el campo de entrada de número y el conmutador), también puede agregar elementos para el texto y los elementos de solo lectura de enlace.
    • Los campos editables comparten un juego de propiedades comunes, incluida la propiedad autoSubmit. Esta propiedad es opcional, pero su activación (autoSubmit: true) permite al formulario enviar un valor de campo antes de que el usuario haya enviado realmente todo el formulario. Puede utilizar esta propiedad para campos interdependientes dentro del formulario. Por ejemplo, puede definir esta propiedad cuando la visualización de un campo depende de un valor introducido en otro campo o cuando un valor definido para un campo restringe la entrada permitida en otro campo.
      Nota

      Microsoft Teams no soporta autoSubmit.
    • La propiedad opcional clientErrorMessage define el mensaje de error específico del campo que se muestra cuando hay una validación limitada del lado del cliente o cuando falla la validación del lado del cliente. Por ejemplo, para los mensajes enviados a través del canal de Slack, esta propiedad solo está soportada cuando el formulario está en la página de conversación. No se muestra cuando el mensaje de formulario está en un cuadro de diálogo modal.
      Nota

      Esta propiedad está destinada principalmente a tarjetas adaptables de Microsoft Teams, lo que limita el uso de un único mensaje para todos los errores de nivel de campo diferentes.
  • actions: en este nodo, la plantilla describe las acciones de envío de formulario que envían la entrada del usuario a través de FormSubmissionMessagePayload.
  • channelCustomProperties: para soportar una experiencia de varios modos, en la que el usuario puede utilizar combinaciones de texto y voz para rellenar los campos del formulario antes de enviar el formulario, la plantilla incluye la configuración de la propiedad replaceMessage que indica al canal de cliente que actualice el mensaje del formulario de entrada actual en lugar de agregar un nuevo formulario de entrada a la conversación.

Campos de formulario de entrada

Elemento Ejemplo Código de ejemplo: Variable de asignación (submittedFields) Editable?
Lista de selección única Permite a los usuarios buscar y seleccionar un elemento de una lista predefinida. Puede aplicar un estilo a este componente como una lista de opciones que los usuarios pueden consultar y seleccionar.

 - displayType: singleSelect
        defaultValue: "${(submittedFields.value.Type)!''}"
        name: Type
        options:
          - iteratorVariable: option
            iteratorExpression: "${expenseType.type.enumValues?split(',')}"
            label: "${option}"
            value: "${option}"
        layoutStyle: list
        label: Expense Type
        placeholder: Select expense type
        clientErrorMessage: Expense type is required
        required: true
Lista de selección múltiple Lista que admite varias selecciones. Puede aplicar estilo a este componente como una lista de selección que los usuarios pueden filtrar y seleccionar, o como un juego de casillas de control.

 - displayType: multiSelect
        defaultValue: "${(submittedFields.value.Attendees?join(','))!''}"
        name: Attendees
        options:
          - iteratorVariable: option
            iteratorExpression: "${attendee.type.enumValues?split(',')}"
            label: "${option}"
            value: "${option}"
        layoutStyle: list
        label: Attendees
        placeholder: Select attendees
Selector de hora Permite al usuario escribir un valor de hora dentro de un intervalo especificado. Las propiedades maxTime y minTime del componente validan la entrada del usuario.

      - displayType: timePicker
        defaultValue: "${(submittedFields.value.Time.value?time.xs?string['hh:mm a'])!''}"
        maxTime: "23:00"
        minTime: "13:00"
        name: Time
        label: Expense Time
        placeholder: What time was the expense?
        clientErrorMessage: This time is outside the limits.
        required: true
Selector de Fecha Campo con un calendario desplegable que permite a los usuarios seleccionar un día, un mes y un año. Las propiedades maxDate y minDate del componente validan la entrada del usuario.

 - displayType: datePicker
        defaultValue: "${(submittedFields.value.Date)!''}"
        name: Date
        maxDate: "${.now?iso_utc[0..9]}"
        label: Expense Date
        placeholder: Pick a date in the past
        clientErrorMessage: Expense date is required and must be in the past.
        required: true
Entrada de número Permite al usuario escribir un valor numérico. Las propiedades minValue y maxValue validan la entrada del usuario.

     - displayType: numberInput
        minValue: 5
        serverErrorMessage: "${(amountError.value)!''}"
        maxValue: 500
        defaultValue: "${(submittedFields.value.Amount)!''}"
        name: Amount
        label: Amount
        placeholder: Enter expense amount
        clientErrorMessage: Amount is required and must be between 5 and 500.
        required: true
Introducción de Texto Permite al usuario escribir un valor de texto.

      - displayType: textInput
        multiLine: true
        defaultValue: "${(submittedFields.value.Description)!''}"
        minLength: 10
        name: Description
        label: Description
        placeholder: What is the expense justification?
        clientErrorMessage: "Description must be 10 characters minimum, 50 characters maximum."
        maxLength: 50
        required: true
      - displayType: textInput
        multiLine: true
        defaultValue: "${(submittedFields.value.Notes)!''}"
        minLength: 10
        name: Notes
        inputStyle: email
        label: Notes
        placeholder: Expense notes (optional)
        maxLength: 50
        required: false
Alternar Presenta un conmutador (o una agrupación de botones de radio, según el canal) para dos opciones.

      - displayType: toggle
        defaultValue: "false"
        name: TipIncluded
        labelOn: Tip
        label: Tip Included?
        valueOff: "false"
        labelOff: No Tip
        valueOn: "true"
Texto Texto en línea de sólo lectura

      - displayType: text
        alignment: left
        value: Read our expenses policy.
No - Sólo lectura
Enlace Un enlace en línea

      - displayType: link
        alignment: left
        value: "http:www.oracle.com"
No - Sólo lectura
Acción Uno de los tipos de acción (enlace, botón o icono). En el siguiente fragmento, se representa un enlace de acción cuando el valor de la variable selectedOrder se coloca con el valor de la fila item.
- displayType: action
  action:
    displayType: link
    payload:
      variables:
        selectedOrder: "${item.SO_CUSTOMER_PO_NUMBER}"
        action: order
       label: "${item.SO_CUSTOMER_PO_NUMBER}"
       type: postback
       label: CUSTOMER PO NUMBER
No - Sólo lectura

Parámetros personalizados

En la aptitud, puede definir los parámetros del cliente a los que se hará referencia desde los flujos de diálogo.

Una vez publicada la aptitud, puede cambiar los valores de estos parámetros (aunque no puede cambiar otros detalles de los parámetros ni agregar o suprimir parámetros).

Los parámetros personalizados se muestran como variables skill.system.config para su uso en la definición del flujo de diálogo. Por ejemplo, se accedería a un parámetro personalizado denominado faHostName con la siguiente expresión:

${skill.system.config.faHostName}

Si quiere establecer el valor de un parámetro de la aptitud en el asistente digital al que se agrega la aptitud, anteponga da. (con el punto incluido (.)) al nombre del parámetro. Por ejemplo, puede utilizar da.faHostName como nombre de un parámetro para un nombre de host.

Con este enfoque, puede definir parámetros con los mismos nombres en varias aptitudes, agregar todas esas aptitudes a un asistente digital y, a continuación, definir los valores para los parámetros compartidos en un único lugar del asistente digital.

Para acceder a un parámetro desde un componente personalizado, defina un parámetro de entrada en el componente personalizado y, a continuación, transfiera el valor del parámetro de la aptitud.

Nota

no puede definir los valores de parámetros personalizados (ni ninguna otra variable con el prefijo skill.system.config directamente en el flujo de diálogo ni en los componentes personalizados).

Creación de un parámetro personalizado

  1. Haga clic en icono para abrir el menú lateral para abrir el menú lateral, seleccione Desarrollo > Aptitudes y elija la aptitud.
  2. En la navegación izquierda de la aptitud, haga clic en icono Configuración.
  3. Haga clic en el separador Configuración.
  4. Haga clic en Nuevo parámetro y rellene los campos del cuadro de diálogo que aparece.

Parámetros seguros

Si la aptitud se basa en un parámetro, cuyo valor no desea que puedan ver otras personas que estén desarrollando esa aptitud o versiones o clonaciones de ella, puede designar ese parámetro como un parámetro seguro. Cualquiera que navegue a la página Configuración de la aptitud podrá ver el nombre del parámetro, pero no el valor.

Si exporta la aptitud, el valor del parámetro no se incluye en la exportación.

Para crear un parámetro seguro:

  • En el cuadro de diálogo Crear parámetro, seleccione Seguro en la lista desplegable Tipo.

Modificación del valor de un parámetro personalizado en una aptitud publicada

Una vez publicada una aptitud, no puede agregar ni suprimir parámetros personalizados, pero puede cambiar sus valores. Para ello:

  1. Haga clic en icono para abrir el menú lateral para abrir el menú lateral, seleccione Desarrollo > Aptitudes y elija la aptitud.

  2. En la navegación izquierda de la aptitud, haga clic en icono Configuración.

  3. Seleccione el separador Configuración.
  4. Seleccione el parámetro, haga clic en Editar e introduzca el valor actualizado.

Nota

Si ha añadido a un asistente digital una aptitud con un parámetro al que se ha antepuesto da. y quiere actualizar el valor que utiliza el asistente digital, tiene que hacerlo en el asistente digital. De lo contrario, el asistente digital seguirá utilizando el valor que tenía el parámetro en el momento en el que se agregó al asistente digital. La modificación del valor de la aptitud solo afectará a la aptitud si se utiliza de forma autónoma o si se agrega más adelante a un asistente digital diferente.

Definición del valor de un parámetro en Digital Assistant

Después de publicar una aptitud y agregarla a un asistente digital, puede definir el valor en el asistente digital para cualquiera de los parámetros de la aptitud con el prefijo da. (incluido el punto (.)).

Si se define un parámetro" da." con el mismo nombre en varias aptitudes del asistente digital, el valor de dicho parámetro se compartirá entre las aptitudes del asistente digital.

Para definir el valor de un parámetro en un asistente digital:

  1. Haga clic en icono para abrir el menú lateral para abrir el menú lateral, seleccione Desarrollo > Asistentes digitales y elija su asistente digital.
  2. En la navegación izquierda del asistente digital, haga clic en Icono Aptitudes.
  3. Seleccione una de las aptitudes que utiliza el parámetro.
  4. Desplácese hacia abajo, a la sección Parámetros de la página, e introduzca un valor para el parámetro.

    Se aplicará el valor del parámetro actualizado a todas las aptitudes que utilicen el parámetro.

Flujos de importación y exportación

Puede importar y exportar flujos de diálogo de modo visual mediante las opciones Importar flujo y Exportar flujo seleccionado del menú Más.



Exportar flujos

Puede exportar un flujo seleccionándolo primero y, a continuación, haciendo clic en Más > Exportar flujo seleccionado. El flujo de diálogo exportado es una representación YAML del cuadro de diálogo. Este documento lleva el nombre de la aptitud y el flujo y se agrega con -Flow (PizzaSkill-pizza.ans.proc.veggiePizza-Flow.yaml, por ejemplo). Su sintaxis YAML se ajusta al modo de diálogo visual, no al OBotML escrito para las aptitudes creadas en el modo YAML. Al exportar un flujo, se exporta solo este documento. No irá acompañado de ninguna de las siguientes dependencias, incluso si se hace referencia a ellas.
  • Servicio de seguridad al que hacen referencia los estados del componente de seguridad.
  • Servicios para varios estados de integración de servicios
  • Servicios de traducción
  • Intenciones, entidades, grupos de recursos
  • Flujos de tareas de referencia
Cuando se importa, el flujo se ejecutará correctamente si la aptitud ya tiene los artefactos a los que se hace referencia. De lo contrario, la importación devolverá errores de validación.
Nota

Puede exportar cualquier flujo, excepto el principal.
Un ejemplo de la representación YAML del modo de diálogo visual es el siguiente:
name: "WineryChats"
trackingId: "D6BFE43B-D774-412A-91F6-4582D04B3375"
type: "task"
version: "2.0"
interface:
  returnActions:
  - "done"
variables:
- name: "redWineCard"
  type: "map"
  system: false
defaultTransitions:
  actions:
    system.outOfOrderMessage: "outOfOrderMessageHandler"
    system.startTaskFlow: "buildRedWineMenu"
states:
  buildRedWineMenu:
    component: "System.SetVariable"
    properties:
      variable: "redWineCard"
      value: 
        Cabernet Sauvignon:
          image: "https://cdn.pixabay.com/photo/2016/05/24/16/16/wine-1412603__340.jpg"
          price: 35
          description: "Flavor of dark fruits like black cherry and blackberry along with a warm spice, vanilla and black pepper"
          title: "Cabernet Sauvignon"
...

Importar flujos

Puede importar un flujo haciendo clic en Más > Importar flujo y, a continuación, navegando y seleccionando un documento YAML formateado para el modo de diálogo visual. Estos flujos pueden ser los documentos YAML generados al exportar un flujo de diálogo (los que tienen nombres con el formato <skill name> - <flow name> -Flow.yaml ) o pueden ser los archivos YAML ubicados en la carpeta dialogs de un archivo ZIP exportado para una aptitud creada mediante el modo de diálogo visual. No puede importar un documento OBotML directamente. Primero debe migrar la aptitud.

Hay algunas excepciones a los flujos que se pueden importar.
  • No puede importar un flujo principal (el archivo System.MainFlow.yaml ubicado en la carpeta dialogs de un archivo ZIP exportado para una aptitud del modo de diálogo visual).
  • No puede importar un flujo que ya exista en la aptitud o en la instancia. Si el flujo ya existe, puede cargar el documento YAML cambiando el valor del nodo name.
    name: "WineryChats"
    trackingId: "D6BFE43B-D774-412A-91F6-4582D04B3375"
    type: "task"
    ...
    Sin embargo, puede que desee duplicar el flujo (Menú > Duplicar flujo seleccionado) en lugar de editar el YAML.
Puede importar correctamente un flujo incluso si hace referencia a artefactos como entidades, intenciones, paquetes de recursos o servicios de backend que no están presentes en la aptitud. Sin embargo, estas importaciones generarán errores de validaciónEsta es la imagen del icono Advertencia.. Para obtener una lista de los errores de validación, haga clic en Ver conclusiones de validación en los mensajes de error que se muestran después de la importación.
Imagen del mensaje de error de validación de flujo de importación.