Fluxos

Um fluxo é uma parte do fluxo de caixas de diálogo de habilidades que define a interação com o usuário para concluir uma tarefa ou parte de uma tarefa que o usuário deseja executar.

Exemplos típicos de fluxos incluem:

  • Fluxos orientados por intenções, em que cada intenção definida na habilidade tem um fluxo associado, por exemplo, 'Pizza de Pedidos', 'Enviar Dinheiro' ou 'Criar Despesa'.
  • Suporte ou fluxos de utilitários para tarefas como autorização de usuário, integração de novo usuário, registro em log ou fornecimento de assistência ao usuário. Tais fluxos podem ser chamados a partir de múltiplos fluxos.

    Por exemplo, você pode ter um subfluxo Criar Conta que você chama dos fluxos, como Pedir Pizza ou Enviar Dinheiro.

Tipos de Fluxo

De um modo geral, os fluxos se dividem nos seguintes tipos:

  • Fluxo Principal.
  • Fluxos de intenções.
  • Fluxos para eventos incorporados e transições do sistema.
  • Subfluxos que podem ser usados por fluxos de nível superior.

Fluxo Principal

Com fluxos de caixas de diálogo criados no Visual Flow Designer, cada fluxo de caixas de diálogo tem um único fluxo principal que é usado para configurar:

  • Os mapeamentos entre eventos e fluxos.
  • Variáveis de contexto globais que podem ser usadas em todos os fluxos da habilidade.

    Ao acessar essa variável com uma expressão Freemarker, você prefixa o nome da variável com skill. na expressão.

    Essas variáveis de nível de habilidade são limpas depois que a sessão do usuário expira. A expiração da sessão é configurada no nível do canal e geralmente é de 24 horas por padrão.

O fluxo principal não é realmente um fluxo como tal. Em vez disso, é o centro de controle da habilidade, de onde os usuários são direcionados para fluxos especializados que são mapeados para as intenções resolvidas. A configuração do fluxo principal inclui a variável skill.system.nlpresult predefinida que é preenchida com resultados de correspondência de intenção e entidade sempre que uma intenção é resolvida, o que permite que o controle seja passado para fluxos individuais.

Fluxos de Intenções

Ao projetar fluxos de caixas de diálogo com o Designer de Fluxo Visual, você cria fluxos que mapeia para suas intenções. Todas as intenções regulares (ou seja, intenções que não são intenções de resposta) devem ser vinculadas a um fluxo.

Para intenções de resposta, você pode usar (ou uma combinação) das seguintes abordagens:

  • Crie um único fluxo e mapeie-o para o evento incorporado Intenção de Resposta.
  • Crie fluxos individuais para intenções de resposta específicas.

    Essa abordagem permite que você tenha prompts ou perguntas específicos para preceder e/ou seguir cada resposta.

Observação

Você também tem a opção de não fornecer nenhum fluxo para intenções de resposta; nesse caso, a resposta é fornecida ao usuário sem que o fluxo de caixas de diálogo esteja diretamente envolvido.

Fluxos de Utilitários para Eventos Incorporados e Transições do Sistema

Você pode criar fluxos que são acionados pelos eventos incorporados da habilidade (como Intenção de Resposta e Erro de Caixa de Diálogo), eventos personalizados e transições do sistema (como Autorizar Usuário e Erro de Caixa de Diálogo).

Subfluxos Personalizados

Você também pode criar fluxos que não são mapeados para uma intenção específica ou com base em eventos incorporados (ou transições do sistema), mas que podem ser chamados por outros fluxos.

Por exemplo, em uma habilidade de um restaurante, talvez você queira ter um fluxo Mostrar Menu que possa ser chamado no meio de um fluxo de pedidos, se um usuário o solicitar.

Variáveis e Escopo

No Designer de Fluxo Visual, as variáveis para podem ser definidas em dois níveis:

  • em um fluxo individual. As variáveis definidas neste nível só podem ser acessadas de dentro do fluxo em que são definidas.

    Uma variável de escopo de fluxo não pode ser acessada diretamente fora do fluxo em que está definida, mesmo de subfluxos ou fluxos de chamada. No entanto, você pode definir parâmetros de entrada e saída para que um fluxo passe valores de e para variáveis definidas no fluxo.

    Quando o fluxo termina, os valores das variáveis são redefinidos.

    A maioria das variáveis deve ser definida nesse nível. Ao fazer uso regular de variáveis de fluxo, você torna seus fluxos mais autocontidos, o que os torna mais fáceis de reutilizar, mais fáceis de testar isoladamente e menos propensos a serem afetados negativamente por bugs em outros fluxos.

  • No Fluxo Principal. As variáveis definidas aqui têm um escopo (global) de toda a habilidade, o que significa que elas podem ser acessadas por todos os fluxos da habilidade.

    Os valores dessas variáveis globais persistem durante a sessão do usuário com a habilidade. As variáveis são limpas quando a sessão do usuário com a habilidade termina, o que acontece quando ocorre uma das seguintes coisas:

    • O usuário fecha a janela de chat.
    • A sessão expira após um período de inatividade (cujo valor é definido no nível do canal e geralmente é de 24 horas).
    • No contexto de um assistente digital, o usuário sai da habilidade ou atinge um estado que chama diretamente outra habilidade.
      Observação

      Quando o usuário interrompe uma conversa com uma entrada não sequitur e é roteada temporariamente para outra habilidade, a assistanta digital permanece no contexto da habilidade original e suas variáveis não são limpas automaticamente. Nesse caso, se o usuário retornar à habilidade original após a interrupção, as variáveis manterão seus valores. Se o usuário optar por não retornar à habilidade original, a habilidade original será encerrada e as variáveis serão apagadas.

    Você deve limitar o uso dessas variáveis de escopo de habilidade a variáveis que exijam um contexto compartilhado. Por exemplo, em uma habilidade de entrega de alimentos, talvez você precise de uma variável de nível de habilidade para a lista de todos os pedidos que um usuário fez em uma sessão.

Observação

Nos componentes Resposta Comum e Definir Variável, você também pode criar variáveis do escopo do usuário ou do perfil. Nesses casos, você cria as variáveis usando a lista suspensa diretamente na propriedade Variável do componente (não o botão Criar ao lado da propriedade). Consulte Outros Tipos de Variáveis.

Os valores de variáveis devem corresponder ao tipo declarado para a variável. Se for atribuído um valor a uma variável que não corresponda ao seu tipo declarado, ocorrerá um erro de runtime.

Observação

No Designer de Fluxo Visual, as variáveis podem receber um valor inicial quando são declaradas. (Isso é diferente nos fluxos de caixas de diálogo baseados em YAML, nos quais você precisa usar um componente System.SetVariable para definir o valor inicial.)

Observações para Desenvolvedores Usados para Fluxos de Caixas de Diálogo Baseados em YAML

Se você for usado para projetar fluxos de caixas de diálogo usando o editor de código OBotML, precisará saber o seguinte sobre fluxos que você cria com o Designer de Fluxo Visual:

  • Não há transição return disponível no Designer de Fluxo Visual.

    Quando o último estado de um fluxo é atingido, as variáveis do fluxo são apagadas automaticamente (embora quaisquer variáveis no nível da habilidade permaneçam ativas até o final da sessão).

  • As transições de estado só podem ser definidas por meio das ações de transição ou transição next.

    Quando você usa o designer para inserir um estado em um fluxo, as transições next apropriadas são inseridas nesse estado e no estado anterior.

    Transições implícitas baseadas na sequência dos estados não são permitidas. Se nenhuma transição correspondente puder ser encontrada, um erro de runtime será gerado.

  • Não é possível usar diretamente expressões FreeMarker para definir condicionalmente os estados de destino para transições em um componente. Para especificar condicionalmente o estado de destino, insira um componente Alternar no fluxo para conter a expressão e definir as transições de ação com base no resultado da expressão.

Projetando Fluxos

Criar um Fluxo

Para que você possa mapear qualquer tipo de evento, seja um evento de intenção para um fluxo transacional ou um evento incorporado para um fluxo de serviço público, primeiro crie o próprio fluxo. O mapeamento que você eventualmente atribui a um fluxo determina se seu escopo se estende a toda a habilidade ou apenas a um fluxo.

Para criar um fluxo, clique em + Adicionar Fluxo.

O editor é preenchido com um nó inicial do Fluxo O ícone Iniciar Caixa de Diálogo.. Você constrói o fluxo a partir daqui. O editor também inclui o nó Eventos, no qual você define os subfluxos para os eventos de transição do sistema que lidam com erros de caixa de diálogo, mensagens do usuário fora da ordem, entrada inesperada do usuário e autenticação.
A seguir, descrição de df-2-0-inicial-flow.png
Descrição da ilustração df-2-0-initial-flow.png

Seu fluxo pode terminar sem um estado de fluxo final real (implicitamente), mas se você tiver definido parâmetros de saída que transmitem os valores necessários para outro fluxo, precisará adicionar um estado de fluxo final O ícone Fluxo Final., que especifique esses parâmetros de saída.

Dica:

Clique em Validar e revise as descobertas à medida que cria um fluxo.

.

Criar Variáveis no Nível da Habilidade

Se você precisar criar uma variável que seja acessada por todos os fluxos, sua primeira parada antes de criar qualquer um dos fluxos reais será criar uma variável de habilidade na página Variáveis de Habilidade do Fluxo Principal:
  1. Selecione Fluxo Principal > Variável de Habilidade.
  2. Clique em + Adicionar Variável e preencha a caixa de diálogo.
  3. Selecione o tipo de variável como uma entidade, um tipo primitivo, ou como uma lista (matriz JSON) ou mapa (objeto JSON). Se a variável fizer referência a uma entidade (personalizada ou incorporada), conclua a caixa de diálogo nomeando a variável para a entidade selecionada.
    Observação

    Você precisa criar variáveis para qualquer variável definida ou criada em handlers de eventos de entidade ou componentes personalizados.
  4. Se necessário, insira um valor inicial (padrão). Pode ser um valor único (por exemplo, false, para um booliano ou 4 para um inteiro), uma expressão (por exemplo, list.ManageAccounts.addAccount para uma string) ou um objeto JSON, um que inclua as chaves e os valores entre aspas duplas ("), conforme ilustrado pelo seguinte objeto de lista:
    [
     {
      "pizzaType":"Veggie",
      "price":"10 USD"
      } 
    ]
    Este trecho de código ilustra o valor padrão de uma variável de tipo de lista em uma matriz.

    Dica:

    Se você definir um valor inicial para uma variável, não precisará adicionar um estado Definir Variável no fluxo para dar a ela um valor inicial.

Designar um Estado Inicial

Você pode usar o menu para continuar a adicionar ou excluir estados, ou para reatribuir o estado inicial ou o nó inicial Esta é uma imagem do ícone do nó inicial. do fluxo. Por exemplo, se você estiver adicionando um estado anterior ao nó inicial, poderá designá-lo como o estado inicial.
Observação

O estado inicial é o primeiro estado a ser executado em um fluxo. Se qualquer outro estado preceder o estado inicial, o fluxo ignorará esses estados, deixando-os não executados.


Adicionar um Estado


A seguir, descrição de df-2-0-inicial-flow.png
Descrição da ilustração df-2-0-initial-flow.png

No nó inicial Fluxo, você pode criar seu estado clicando primeiro no menu o ícone do menu Adicionar Estado e, em seguida, inserindo um estado selecionado na caixa de diálogo Adicionar Estado, aberto clicando em Adicionar estado inicial.
A seguir, descrição de df-2-0-add-state-dialog.png
Descrição da ilustração df-2-0-add-state-dialog.png

Inserir um estado entre estados

Para inserir um estado entre dois estados existentes:

Editar as Propriedades de um Estado

Clicar em um estado abre seu editor de propriedades, no qual você define a configuração e as transições do componente.
A seguir, descrição de df-2-0-start-state-properties.png
Descrição da ilustração df-2-0-start-state-properties.png

O editor de propriedades do estado de saída, por exemplo, é um componente de mensagem de envio para gerar uma string.
A seguir, descrição de df-2-0-start-state-component-page.png
Descrição da ilustração df-2-0-start-state-component-page.png

Excluindo Estados

Você pode excluir um estado passando o mouse sobre seu mosaico, clicando em ícone de menu e selecionando Excluir.

ADVERTÊNCIA:

A exclusão de um estado pode ter consequências não intencionais. Se você excluir um estado, ele será totalmente removido de todos os locais que aparecerem no fluxo. Se você excluir o estado errado, poderá restaurá-lo.
Se você quiser excluir uma sequência de estados:
  1. Escolha Deletar estados no menu.

  2. Clique em Excluir na caixa de diálogo de confirmação.

    Se você tiver excluído os estados com erro, clique em Desfazer.
    Esta é uma imagem da caixa de diálogo Desfazer.

Dica:

Se você quiser apenas remover uma ocorrência de um estado em um fluxo, poderá desconectá-lo dessa parte do fluxo alterando o valor da transição para ele do estado anterior.

Restaurar um Estado Excluído

Se você excluir acidentalmente um estado e perceber que deseja recuperá-lo, poderá restaurá-lo enquanto permanecer no Designer de Fluxo Visual e não tiver feito outras alterações. Para fazer isso:

  1. Localize a caixa de diálogo confirmando que o estado foi excluído. Isso deve aparecer no canto inferior esquerdo da tela e parecer algo como a seguinte captura de tela:

  2. Clique em Desfazer.

Reconectar um Estado Desconectado

No curso do desenvolvimento, você pode causar uma ruptura entre estados, alterando uma transição. Nesse ponto, a parte do fluxo que é interrompida do fluxo é estacionada em um mosaico chamado Desconectado, que aparece abaixo do mosaico Eventos.



Você pode reconectar uma parte de um fluxo desconectado a um fluxo de trabalho especificando o nome de um estado desconectado como uma transição no fluxo de trabalho. Para fazer isso:

  1. Se você não tiver certeza de quais estados foram desconectados, clique duas vezes no mosaico Desconectado para exibir os estados que foram desconectados do fluxo.
  2. Selecione o bloco do estado do qual você deseja fazer a transição para o estado desconectado no momento para abrir seu inspetor de propriedades.
  3. No inspetor de propriedades, selecione a guia Transições.
  4. Se você estiver usando a Próxima transição, selecione o estado desconectado na lista drop-down Próxima Transição.
  5. Se você estiver usando uma transição de ação, clique em Editar (Ícone Editar) para a transição que deseja usar para o estado e altere o valor Transição para para o estado ao qual deseja se conectar.

Inserir um novo primeiro estado

Talvez você precise inserir um estado antes do nó inicial.Esta é uma imagem do ícone de nó inicial.. Por exemplo, depois de construir seu fluxo, você pode descobrir que precisa revisá-lo porque ele está começando no ponto errado. Por exemplo, seu fluxo começa abruptamente: seu nó inicial é um estado que chama um serviço REST que requer entrada do usuário, mas não há estado anterior para coletar essa entrada do usuário. E como é um nó inicial, não há linha de transição que permita inserir um estado. Para adicionar um estado antes do nó inicial, você precisa usar a opção Adicionar estado anterior. Para adicionar um estado com esta opção:
  1. Passe o mouse sobre o estado do nó inicial para chamar o menu o ícone do menu.
  2. Escolha Adicionar estado anterior.

  3. Selecione um modelo na caixa de diálogo Adicionar Estado. Você pode escolher a transição Next padrão ou criar uma ação de transição, que poderá ser configurada posteriormente no editor de propriedades.

  4. Depois de inserir o estado anterior, você poderá atribuí-lo como o nó inicial escolhendo Tornar estado inicial no menu.

Copiar Estados

Você pode copiar e colar um estado (ou estados) em outra parte do fluxo ou em um fluxo separado dentro da habilidade.
  1. Clique no menu o ícone do menu Adicionar Estado no estado que você deseja copiar e escolha Copiar estados. Sua seleção pode incluir um único estado, ou uma ramificação inteira, dependendo da posição do estado e da relação com outros estados.
    A opção Copiar estados

  2. Selecione o fluxo de destino (o fluxo atual ou outro fluxo dentro da habilidade). Em seguida, clique em Copiar. Se você estiver selecionando um fluxo separado, todas as variáveis associadas à seleção serão copiadas para esse fluxo.

  3. Abra o nó Desconectado e, em seguida, defina uma transição que conecte o(s) estado(s) ao fluxo. Se você estiver criando um novo fluxo com base nos estados copiados, escolha Tornar estado inicial para o estado selecionado.

    Observação

    Os estados copiados para o fluxo atual são diferenciados dos originais com um 1. Por exemplo, a cópia de cancelOrder é cancelOrder1.