Outras Tarefas

Aqui estão alguns tópicos sobre várias outras tarefas no Visual Flow Designer, incluindo autenticação do usuário, numeração automática, pacotes de recursos, criação de formulários de entrada, criação de parâmetros personalizados e importação e exportação de fluxos.

Autorização do Usuário

Em determinados pontos de um fluxo, talvez você queira impor a autorização do usuário.

Para isso, faça o seguinte:

  1. Nos estados nos quais você deseja impor a autorização, defina a propriedade Exige Autorização como True. Essa propriedade está na guia Geral do inspetor de propriedades do estado.

    Se um usuário que atingir esse estado ainda não tiver autorizado, o estado Autorizar usando OAuth será chamado e, em seguida, o fluxo chamará o estado que exigiu autorização.

  2. Crie um componente de autorização e mapeie-o para o evento de transição padrão Autorizar Usuário do fluxo:
    1. Selecione o fluxo e, em seguida, selecione a guia Fluxo do fluxo.
    2. Clique duas vezes no mosaico Eventos do fluxo para expandi-lo.
    3. Passe o mouse sobre o mosaico Autorizar Usuário, clique no botão de reticências (...) que aparece e selecione Adicionar Estado.
    4. Na categoria Segurança do seletor de modelo, selecione um componente, forneça um nome para o estado e clique em Inserir.

      Consulte Modelos de Segurança para obter detalhes de cada um dos modelos disponíveis.

    5. No inspetor de propriedades do componente, configure as propriedades do componente, incluindo suas ações de transição.

Itens de resposta de numeração automática

Você pode usar o recurso de numeração automática para prefixar botões e listar opções com números em suas respostas.

Quando os usuários não podem usar gestos de toque, eles ainda podem acionar as ações de postback do botão digitando um número. Esse recurso é particularmente útil para canais de texto.

Você configura a numeração automática no nível da habilidade.

Para configurar a numeração automática:

  1. Na navegação esquerda da habilidade, selecione Ícone Definições.
  2. Selecione a guia Configuração.
  3. Defina o valor de Ativar Numeração Automática em Ações de Postback em Fluxos de Tarefas.

    Se quiser ativar a numeração automática para todos os canais, defina o valor como verdadeiro.

    Se você quiser ativar a numeração automática apenas para determinados canais, forneça uma expressão para determinar quais canais obterão a numeração automática. Por exemplo, para ativar a numeração automática apenas para canais Twilio, digite:

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

Limitando o Número de Prompts do Usuário

Você pode garantir que os usuários não fiquem presos em uma etapa de um fluxo de caixas de diálogo configurando esse componente para limitar o número de vezes que ele repete um prompt para o usuário.

A propriedade maxPrompts limita o número de vezes que os componentes de Resposta Comum podem solicitar ao usuário quando eles não conseguem corresponder o valor de entrada com nenhum dos valores definidos para a entidade ou o tipo de entrada referenciado pela propriedade variable. Você pode usar essa propriedade para impedir que sua caixa de diálogo gire em círculos quando os usuários digitarem repetidamente valores inválidos. Você pode definir o número máximo de prompts usando um inteiro . A caixa de diálogo será movida para o próximo estado se o usuário informar um valor válido antes de atingir esse limite. Caso contrário, a caixa de diálogo fará a transição para o estado definido pela ação cancel.

Pacotes de Recursos e o Designer de Fluxo Visual

Você pode usar pacotes de recursos para armazenar qualquer string visível ao usuário adicionada ao fluxo de caixas de diálogo.

Você faz referência a chaves de mensagem do pacote de recursos por meio da variável rb. Uma referência a uma mensagem de pacote de recursos simples assume uma das duas formas a seguir:

  • ${skill.system.rb.RB_ENTRY_NAME}
  • ${rb.RB_ENTRY_NAME}
Para obter mais informações sobre pacotes de recursos, incluindo informações sobre a criação das próprias entradas do pacote de recursos e o uso de formatos de mensagem complexos, consulte Pacotes de Recursos para Habilidades.

Dica:

O preenchimento automático ajuda a selecionar os pacotes de recursos referenciados nas expressões FreeMarker do Apache.

Modificar uma Entrada do Pacote de Recursos

  1. Na habilidade, clique em Ícone de Pacotes de Recursos para abrir o Pacote de Recursos.
  2. Selecione a guia Configuração.
  3. Usando o campo Filtro, navegue até a entrada que você deseja atualizar.
  4. Passe o mouse sobre o valor da chave e selecione o ícone Editarque aparece.
  5. No campo Texto, digite a mensagem atualizada.
  6. Clique em Atualizar Entrada.

Mensagens do Formulário de Entrada do Usuário

Em fluxos de caixas de diálogo, você também pode criar formulários de entrada de dados.

Às vezes, um formulário de entrada é a maneira mais rápida e menos propensa a erros de coletar informações do usuário. Em vez de submeter os usuários a uma série de perguntas, sua habilidade pode orientar os usuários a fornecer entrada válida enviando formulários que contenham elementos de entrada, como campos de entrada de texto, seletores de data e hora e alternâncias.
Descrição da ilustração editable-form-example.png a seguir
Descrição da ilustração editable-form-example.png

Onde quer que o fluxo de conversas chame uma mensagem contendo um formulário de entrada, você pode inserir um adicionando um estado inputForm:
  1. Na caixa de diálogo Adicionar Estado, escolha Mensagens do Usuário > Criar Tabelas e Formulários. Em seguida, escolha Criar Formulário de Entrada.
  2. Para criar o layout, as ações e os campos editáveis e somente leitura do formulário, primeiro clique em Edit Response Items e edite o modelo de metadados ResponseItems. Nesse caso, o modelo é para o item de resposta 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'}"

O Modelo Editar Metadados de Forms

Veja algumas coisas a serem observadas sobre o modelo para o tipo de resposta editForm:
  • As propriedades fornecidas para items, actions e channelCustomProperties são todas específicas dos objetos editFormMessagePayload. Entre outras coisas, esse payload contém descrições do layout geral da mensagem de formulário de entrada recebida pelo usuário, os campos de formulário (somente leitura e editável) e personalizações específicas do canal para renderização de interface de usuário específica da plataforma e comportamento de envio de formulário.
  • Para cada item e dentro do nó actions, o modelo faz referência a uma variável no nível do fluxo chamada submittedFields que contém a entrada do usuário. Esta é uma variável de mapa gerada quando você adiciona um estado inputForm ao fluxo de caixas de diálogo.
    Observação

    Dependendo de suas necessidades, você pode fazer referência a variáveis individuais ou a uma variável composta no lugar da variável submittedFields.
  • items:
    • Embora o modelo forneça propriedades para os campos editáveis (campos de seleção única e múltipla, seletores de data e hora, o campo de entrada de número e a chave de alternância), você também pode adicionar itens para os elementos somente leitura de texto e link.
    • Os campos editáveis compartilham um conjunto de propriedades comuns, incluindo a propriedade autoSubmit. Esta é uma propriedade opcional, mas ativá-la (autoSubmit: true) permite que o formulário envie um valor de campo antes que o usuário tenha realmente enviado o formulário inteiro. Você pode usar essa propriedade para campos interdependentes em seu formulário. Por exemplo, você pode definir essa propriedade quando a exibição de um campo depende de um valor inserido em outro campo ou quando um valor definido para um campo restringe a entrada permitida em outro campo.
      Observação

      O Microsoft Teams não suporta autoSubmit.
    • A propriedade clientErrorMessage opcional define a mensagem de erro específica do campo que é exibida quando há validação limitada do cliente ou quando a validação do cliente falha. Por exemplo, para mensagens enviadas por meio do canal do Slack, essa propriedade só é suportada quando o formulário está na página de conversa. Ele não é exibido quando a mensagem de formulário está em uma caixa de diálogo modal.
      Observação

      Esta propriedade destina-se principalmente a cartões adaptáveis do Microsoft Teams, o que limita você a usar uma única mensagem para todos os erros diferentes no nível do campo.
  • actions - Neste nó, o modelo descreve as ações de envio de formulário que enviam a entrada do usuário por meio do FormSubmissionMessagePayload.
  • channelCustomProperties - Para oferecer suporte a uma experiência de vários modos, em que o usuário pode usar combinações de texto e voz para preencher os campos do formulário antes de enviar o formulário, o modelo inclui a configuração da propriedade replaceMessage que instrui o canal do cliente a atualizar a mensagem do formulário de entrada atual em vez de adicionar um novo formulário de entrada à conversa.

Campos de Formulário de Entrada

Elemento Exemplo Código de Amostra: Variável de Mapa (submittedFields) Editável?
Lista de seleção única Permite que os usuários pesquisem e selecionem um item de uma lista predefinida. Você pode estilizar este componente como uma lista de opções que os usuários podem consultar e selecionar.

 - 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
Sim
Lista de Várias Seleções Uma lista que suporta várias seleções. Você pode estilizar esse componente como uma lista de opções que os usuários podem filtrar e selecionar ou como um conjunto de caixas de seleção.

 - 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
Sim
Seletor de Horário Permite que o usuário insira um valor de tempo dentro de um intervalo especificado. As propriedades maxTime e minTime do componente validam a entrada do usuário.

      - 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
Sim
Seletor de Data Um campo com um calendário suspenso que permite que os usuários selecionem um dia, mês e ano. As propriedades maxDate e minDate do componente validam a entrada do usuário.

 - 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
Sim
Entrada de Número Permite que o usuário insira um valor numérico. As propriedades minValue e maxValue validam a entrada do usuário.

     - 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
Sim
Entrada de Texto Permite que o usuário insira um 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
Sim
Alternar Apresenta uma chave de alternância (ou um agrupamento de botões de opção, dependendo do canal) para duas opções.

      - displayType: toggle
        defaultValue: "false"
        name: TipIncluded
        labelOn: Tip
        label: Tip Included?
        valueOff: "false"
        labelOff: No Tip
        valueOn: "true"
Sim
Texto Texto em linha somente leitura

      - displayType: text
        alignment: left
        value: Read our expenses policy.
Não - Somente leitura
Vincular Um link em linha

      - displayType: link
        alignment: left
        value: "http:www.oracle.com"
Não - Somente leitura
Ação Um dos tipos de Ação (link, botão ou ícone). No trecho de código a seguir, um link de ação é renderizado quando o valor da variável selectedOrder é colocado no slot com o valor da linha 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
Não - Somente leitura

Parâmetros personalizados

Na sua habilidade, você pode definir parâmetros do cliente a serem referenciados em fluxos de caixas de diálogo.

Após a publicação da habilidade, você poderá alterar os valores desses parâmetros (embora não possa alterar outros detalhes deles nem adicioná-los ou excluí-los).

Os parâmetros personalizados são expostos como variáveis skill.system.config para uso na definição do fluxo de caixas diálogo. Por exemplo, um parâmetro personalizado chamado faHostName seria acessado com a seguinte expressão:

${skill.system.config.faHostName}

Se você quiser definir o valor de um parâmetro da habilidade no assistente digital ao qual você adiciona a habilidade, prefacie o nome do parâmetro com da. (inclusive o ponto (.)). Por exemplo, da.faHostName poderia ser usado como nome de um parâmetro para um nome de host.

Usando essa abordagem, você poderá definir parâmetros com os mesmos nomes em várias habilidades, adicionar todas essas habilidades a um assistente digital e, em seguida, definir os valores dos parâmetros compartilhados em um só lugar no assistente digital.

Para acessar um parâmetro de um componente personalizado, defina um parâmetro de entrada no componente personalizado e, em seguida, informe o valor do parâmetro de habilidade para ele.

Observação

Você não pode definir os valores de parâmetros personalizados (ou qualquer outra variável prefixada com skill.system.config diretamente no fluxo de caixas de diálogo ou em componentes personalizados.

Criar um Parâmetro Personalizado

  1. Clique em ícone para abrir o menu lateral para abrir o menu lateral, selecione Desenvolvimento > Habilidades e selecione sua habilidade.
  2. Na navegação à esquerda da habilidade, clique em o ícone Definições.
  3. Clique na guia Configuração.
  4. Clique em Novo Parâmetro e preencha os campos da caixa de diálogo que é exibida.

Parâmetros Seguros

Se sua habilidade depender de um parâmetro, o valor que você não deseja que fique visível para outras pessoas que estão desenvolvendo essa habilidade ou versões ou clones dessa habilidade, você poderá designar esse parâmetro como seguro. Qualquer pessoa então que navegue até a página Definições na habilidade poderá ver o nome do parâmetro, mas não o valor.

Se você exportar a habilidade, o valor do parâmetro não será incluído na exportação.

Para criar um parâmetro seguro:

  • Na caixa de diálogo Criar Parâmetro, selecione Seguro na lista drop-down Tipo.

Modificar o Valor de um Parâmetro Personalizado em uma Habilidade Publicada

Após a publicação de uma habilidade, você não poderá adicionar ou excluir parâmetros personalizados, mas poderá alterar seus valores. Para fazer isso:

  1. Clique em ícone para abrir o menu lateral para abrir o menu lateral, selecione Desenvolvimento > Habilidades e selecione sua habilidade.

  2. Na navegação à esquerda da habilidade, clique em o ícone Definições.

  3. Selecione a guia Configuração.
  4. Selecione o parâmetro, clique em Editar e digite o valor atualizado.

Observação

Se você tiver adicionado uma habilidade com um parâmetro que tem o prefácio da. a um assistente digital e quiser atualizar o valor usado pelo assistente digital, faça isso no assistente digital. Caso contrário, o assistente digital continuará usando o valor que o parâmetro tinha no momento em que foi adicionado ao assistente digital. A alteração do valor na habilidade só a afetará se ela for usada como stand-alone ou se for adicionada posteriormente a outro assistente digital.

Definir o Valor de um Parâmetro no Assistente Digital

Depois que uma habilidade tiver sido publicada e adicionada a um assistente digital, você poderá definir o valor no assistente digital para qualquer um dos parâmetros da habilidade prefixados com da. (inclusive o período (.)).

Se um parâmetro "da." com o mesmo nome for definido em várias habilidades no assistente digital, o valor desse parâmetro será compartilhado entre as habilidades do assistente digital.

Para definir o valor de um parâmetro em um assistente digital:

  1. Clique em ícone para abrir o menu lateral para abrir o menu lateral, selecione Desenvolvimento > Assistentes Digitais e selecione seu assistente digital.
  2. Na navegação esquerda do assistente digital, clique em Ícone Habilidades.
  3. Selecione uma das habilidades que usa o parâmetro.
  4. Role para baixo até a seção Parâmetros da página e digite um valor para o parâmetro.

    O valor do parâmetro atualizado será aplicado a todas as habilidades que usam o parâmetro.

Fluxos de Importação e Exportação

Você pode importar e exportar fluxos de caixas de diálogo do Modo Visual usando as opções Fluxo de Importação e Exportar Fluxo Selecionado no menu Mais.



Exportar Fluxos

Você pode exportar um fluxo primeiro selecionando-o e clicando em Mais > Exportar Fluxo Selecionado. O fluxo de caixas de diálogo exportado é uma representação YAML da caixa de diálogo. Este documento é nomeado para a habilidade e o fluxo e anexado a -Flow ( PizzaSkill-pizza.ans.proc.veggiePizza-Flow.yaml, por exemplo). Sua sintaxe YAML está em conformidade com o Modo de Caixa de Diálogo Visual, não com o OBotML gravado para habilidades criadas no modo YAML. Ao exportar um fluxo, você exporta este documento apenas. Ele não será acompanhado por nenhuma das seguintes dependências, mesmo que elas sejam referenciadas.
  • O serviço de segurança referenciado pelos estados do componente de segurança.
  • Serviços para vários estados de integração de serviços
  • Serviços de Tradução
  • Intenções, entidades, pacotes de recursos
  • Fluxos de tarefas referenciados
Quando importado, o fluxo será executado corretamente se a habilidade já tiver os artefatos referenciados. Caso contrário, a importação gerará erros de validação.
Observação

Você pode exportar qualquer fluxo, exceto o principal.
Um exemplo da representação YAML do Modo de Diálogo Visual é o seguinte:
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"
...

Fluxos de Importação

Você pode importar um fluxo clicando em Mais > Fluxo de importação e, em seguida, navegando e selecionando um documento YAML formatado para o Modo de Caixa de Diálogo Visual. Esses fluxos podem ser os documentos YAML gerados quando você exporta um fluxo de caixas de diálogo (aqueles com nomes formatados como <skill name> - <flow name> -Flow.yaml ) ou podem ser os arquivos YAML localizados na pasta dialogs de um arquivo ZIP exportado para uma habilidade criada usando o Modo de Caixa de Diálogo Visual. Não é possível importar um documento OBotML diretamente. Você deve migrar a habilidade primeiro.

Existem algumas exceções aos fluxos que podem ser importados.
  • Não é possível importar um fluxo principal (o arquivo System.MainFlow.yaml localizado na pasta dialogs de um arquivo ZIP exportado para uma habilidade do Modo de Caixa de Diálogo Visual.
  • Não é possível importar um fluxo que já existe na habilidade ou em sua instância. Se o fluxo já existir, você poderá fazer upload do documento YAML alterando o valor do nó name.
    name: "WineryChats"
    trackingId: "D6BFE43B-D774-412A-91F6-4582D04B3375"
    type: "task"
    ...
    No entanto, talvez você queira duplicar o fluxo (Menu > Duplicar Fluxo Selecionado) em vez de editar o YAML.
Você pode importar com sucesso um fluxo mesmo que ele faça referência a artefatos como entidades, intenções, pacotes de recursos ou serviços de backend que não estão presentes na habilidade. No entanto, essas importações resultarão em erros de validaçãoEsta é uma imagem do ícone de advertência.. Para obter uma lista dos erros de validação, clique em Exibir descobertas de validação nas mensagens de erro exibidas após a importação.
Esta é uma imagem da mensagem de erro de validação do fluxo de importação.