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.
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.
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.
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 . 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.
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 , 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
- Selecione Fluxo Principal > Variável de Habilidade.
- Clique em + Adicionar Variável e preencha a caixa de diálogo.
- 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. - Se necessário, insira um valor inicial (padrão). Pode ser um valor único (por exemplo,
false
, para um booliano ou4
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:
Este trecho de código ilustra o valor padrão de uma variável de tipo de lista em uma matriz.[ { "pizzaType":"Veggie", "price":"10 USD" } ]
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

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
Descrição da ilustração df-2-0-initial-flow.png
No nó inicial Fluxo, você pode criar seu estado clicando primeiro no menu e, em seguida, inserindo um estado selecionado na caixa de diálogo Adicionar Estado, aberto clicando em Adicionar estado inicial.
Descrição da ilustração df-2-0-add-state-dialog.png
Inserir um estado entre estados
- Clique na linha de transição que conecta os dois estados e abra o menu Adicionar Estado clicando em
. Observe que a linha de transição observa o tipo de transição entre os estados (
next
, por exemplo). - Crie um estado rapidamente escolhendo Adicionar Estado no menu Próxima Transição ou no menu Transição para para ações.
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.
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.
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 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.- Escolha Deletar estados no menu.
- Clique em Excluir na caixa de diálogo de confirmação.
Se você tiver excluído os estados com erro, clique em 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:
- 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:
- 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:
- 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.
- 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.
- No inspetor de propriedades, selecione a guia Transições.
- Se você estiver usando a Próxima transição, selecione o estado desconectado na lista drop-down Próxima Transição.
- Se você estiver usando uma transição de ação, clique em 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

- Passe o mouse sobre o estado do nó inicial para chamar o menu
.
- Escolha Adicionar estado anterior.
- 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. - Depois de inserir o estado anterior, você poderá atribuí-lo como o nó inicial escolhendo Tornar estado inicial no menu.
Copiar Estados
- Clique no menu
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.
- 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.
- 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 decancelOrder
écancelOrder1
.