Construção de Chatbots
Editor do Fluxo
Ciclo de Vida do Fluxo
o botpress usa o que chamamos de mecanismo de diálogo para lidar com as conversas, que é responsável por cada interação ele lida com a entrada do usuário e a resposta do chatbot o mecanismo de diálogo usa fluxos que representam a lógica geral de conversação de um chatbot um fluxo é então composto de nós que executam uma série de instruções as instruções fazem parte de um ciclo de vida do node e podem executar ações uma ação é um trecho de código, geralmente código que você mesmo escreveu, código fornecido pelo botpress ou outros fluxos um fluxo de trabalho permite dividir um chatbot complexo em vários fluxos menores dividir o chatbot em vários fluxos facilita a manutenção e é possível reutilizar esses fluxos ao criar outros fluxos de trabalho ou até mesmo outros chatbots vamos dar uma olhada no nosso bot de suporte do botpress blitz podemos adicionar três fluxos para lidar com problemas, tíquetes e solução de problemas ciclo de vida do fluxo um fluxo sempre começa no início startnodede seu flow\ jsonarquivo , sendo o fluxo principal o primeiro a ser executado no início de cada conversa o nó inicial aponta para o nó que deve ser executado primeiro pelo nome uma vez que o nó é selecionado, o mecanismo de diálogo enfileirará as instruções do nó ativo e executará as instruções sequencialmente o mecanismo de diálogo é baseado em eventos e não é bloqueante por padrão, o que significa que um fluxo executará tudo o que puder gerenciar até precisar esperar 🖊️ nota atualmente, existem dois motivos para um fluxo aguardar um nó é marcado como aguardando entrada do usuário; um nó não pode corresponder a uma condição para fazer a transição para outro nó; um nó não possui instrução de transição depois que o primeiro nó for processado, o mecanismo de diálogo prosseguirá para o próximo nó no fluxo até chegar ao final os fluxos são bastante simples os nós também têm um ciclo de vida próprio eles fazem o trabalho pesado em um fluxo armazenamento os fluxos são armazenados como arquivos json nos arquivos de origem do chatbot no contexto deste tutorial, os fluxos são armazenados na data/bots/blitz/flows/pasta cada fluxo é dividido em dois arquivos a lógica ( flow\ json ) e as propriedades visuais específicas ( ui json ) o motivo para dividi los é facilitar a manutenção e a revisão das alterações ui json os arquivos quase sempre podem ser ignorados nas revisões de código, pois não agetam a funcionalidade do chatbot flow\ json os arquivos também poderiam, em teoria, ser criados manualmente pelos desenvolvedores em vez de usar a gui este é o caso das habilidades , que serão abordadas adiante nós os nós são as unidades primárias da lógica conversacional do seu chatbot uma conversação ativa (que chamamos de sessão ) sempre tem um e apenas um nó ativo um nó geralmente faz a transição para outro nó ou fluxo quando não houver mais transições, a conversa termina a seguinte mensagem do usuário fará parte de uma sessão totalmente nova um nó é separado em três estágios diferentes onenter (a), onreceive (b) e onnext (c) onenter onenter é uma lista de instruções executadas quando o nó é inserido se várias ações forem definidas, seu chatbot executará todas elas sequencialmente onreceive onreceive é uma lista de instruções executadas quando o nó recebe uma mensagem do usuário enquanto ele está ativo assim que uma ação for definida, o nó estará automaticamente aguardando a entrada do usuário (nó laranja) quando esta propriedade é deixada sem uso, o nó é não bloqueante (preto), o que significa que fluirá direto do onenter para o onnext onnext onnext (também chamado de transitions ) é exatamente a mesma coisa que flow wide transitions, exceto que as condições são avaliadas apenas após onreceive ou onenter serem executadas 🖊️ nota casos especiais 1 se nenhuma condição for definida, o comportamento padrão será o fim da conversa 2\ se houver condições definidas, mas nenhuma corresponder, nada acontecerá o nó atual permanece ativo e fluirá quando uma condição for correspondida por padrão, o onnext só será repetido após onreceive ser invocado novamente uma transition sempre tem um alvo que chamamos de destination pode ser um nó diferente; um fluxo diferente; o fluxo anterior; em si (loopback em si); o fim da conversa estado cada conversa tem um estado associado o estado é criado quando a sessão de conversação é iniciada e é destruído quando a sessão é encerrada um estado é criado antes que o nó de entrada seja inserido 🖊️ nota o estado é global para a conversa, portanto, se a conversa abranger vários fluxos, todos eles compartilharão o mesmo estado tempo limite da sessão o mecanismo de diálogo aguardará a entrada de um usuário depois de um tempo, se o usuário não responder, a sessão terá timeout o tempo limite permite encerrar a conversa normalmente, se necessário também pode ser útil fazer algum processamento antes de excluir a sessão por exemplo , é possível salvar as informações de contato do usuário em um banco de dados externo ou informar ao usuário como entrar em contato consigo ou informar ao usuário que sua sessão expirou fluxo de tempo limite é possível utilizar um fluxo de tempo limite para lidar com sua lógica de tempo limite funciona como um fluxo regular adicione um flow chamado timeout flow\ json ao seu chatbot e especificar um nó inicial em seguida, o mecanismo de diálogo detectará seu fluxo de tempo limite na próxima vez que um usuário atingir o tempo limite nó de tempo limite muito semelhante ao timeout flow , o timeout node deve ser chamado timeout e deve pertencer ao fluxo atual não é necessário vinculá lo a nenhum outro nó o mecanismo de diálogo detectará o nó com base em seu nome transição de tempo limite outra opção que requer alguma codificação é adicionar a propriedade timeout node ao seu flow\ json arquivo e atribuí la ao nome do nó que deve lidar com o tempo limite novamente, pode ser qualquer nó; ele não precisa ser chamado de uma maneira o mecanismo de diálogo aguardará a entrada de um usuário depois de um tempo, se o usuário não responder, a sessão terá timeout o tempo limite permite encerrar a conversa normalmente, se necessário também pode ser útil fazer algum processamento antes de excluir a sessão por exemplo , é possível salvar as informações de contato do usuário em um banco de dados externo ou informar ao usuário como entrar em contato consigo ou informar ao usuário que sua sessão expirou ⚠ atenção ! depois que o mecanismo de diálogo tiver processado o tempo limite, excluirá a sessão ações uma ação é um código javascript que é executado em uma node jsvm pode ser o que desejar chamar uma api, armazenar algo no banco de dados ou armazenar algo no key value store as ações são chamadas por onenter e onreceive instruções existem dois tipos de ações script uma ação definida pelo usuário que é usada para executar um código personalizado saída uma ação de saída que é usada para fazer um chatbot produzir algo 🖊️ nota para saber mais sobre ações, consulte a seção editor de código habilidades depois de criar alguns fluxos e bots, será notado rapidamente que existem alguns padrões comuns que são implementados repetidamente assim, as habilidades vêm à ajuda as habilidades são abstrações de nível superior sobre fluxos que servem como geradores de fluxo dinâmico podem ser vistos como componentes reutilizáveis entre vários fluxos ou até vários chatbots habilidades de instalação um módulo deve expor todas as habilidades os módulos podem hospedar qualquer número de habilidades instale o módulo necessário e terá acesso às suas habilidades usando habilidades as habilidades devem ser usadas pela gui do botpress flows depois instale o módulo de habilidade desejado; navegue até o fluxo selecionado; localize a barra de ferramentas inserir habilidade à esquerda da interface do construtor de fluxo; selecione sua habilidade; preencher o formulário; clique em qualquer lugar no fluxo para inserir a habilidade persistência as habilidades são armazenadas como fluxos na data/bots/your bot/flows/skillspasta os nós de habilidade na interface do studio têm o nome da habilidade anexado ao nome do nó, tornando os facilmente identificáveis habilidades de edição depois que um nó de habilidade for gerado, clique sobre ele e em editar no painel direito para editá lo, o que atualizará o fluxo gerado automaticamente nos bastidores 🖊️ nota embora seja possível renomear sua habilidade para qualquer nome que desejar, é considerado uma prática recomendada anexar o tipo de habilidade ao nome do nó, por exemplo, choice choose topping