Code Monkey home page Code Monkey logo

n1-support-chatbot's Introduction

N1 Support

NodeJS Express.js MongoDB Heroku Notion

Diagrama de Fluxo

Diário de bordo

  • 27/12/2021 - Início do desenvolvimento do Webhook, definição de rotas e funções, criação do banco de dados, intenção básicas no webhook e no dialogflow, bem como as integrações requeridas, e documentação inicial.
  • 28/12/2021 - Segui implementando a atividade, criando a intenção de Chamado para N2, com tratamento das informações a serem coletadas via slot filling. Também implementei da intenção de diagnóstico de Hardware, abordei a identificação do problema do usuário de forma um pouco diferente, identificando o problema com sinônimos da entidade, e agrupando em subtipos, permitindo que dependendo do subtipo, ofereça soluções mais apropriadas ao problema. Também procurei formas de aplicar o feedback de entregas passadas, melhorando todo o código já escrito.
  • 29/12/2021 - Tive a idéia de consumir a NotionAPI, lançando os chamados no website, que usufrui de ferramentas para busca e organização para o N2. Continuei com a implementação das intenções requeridas, terminando o diagnóstico de Hardware, e também o diagnóstico de Software.
  • 30/12/2021 - Foquei boa parte do dia reestruturando meu código. Além da separação das funções em um arquivo separado, também separei as respostas do dialogflow em outro arquivo. Aproveitei o tempo restante para melhorar a documentação.
  • 01/01/2022 - Alterei como estava abordando as funções no controller, que necessitavam passar os mesmos parâmetros constantemente, então criei classes para funções do dialogflow e resposta(strings). Com todas intenções principais prontas, e o webhook funcional, executei diversos testes, tratei mais algumas intenções de fallback, e treinei o bot no dialogflow. Por fim, adicionei maior variedade de respostas ao bot, e esclareci outras, para melhorar o entendimento do usuário. Por fim, fiz o deploy no Heroku e finalizei a documentação para entrega.

Dificuldades

  • Tive dificuldade inicial com os contextos dentro do dialogflow, porém rapidamente resolvi as duvidas pendentes, e não tive mais problemas.
  • Tentei bastante encontrar uma solução mais abstrata para não ter que usar if/else ou switch/case na chamada de métodos, e embora chegar a algumas, nenhuma me satisfez, ou tratou de forma tão eficar e legível quanto o switch/case, então por hora mantive a estruturação via este.
  • Fiquei com umas dúvidas em relação ao último feedback que não foram possíveis de conversar sobre antes do fim de semana, porém tirei o máximo que entendi, e apliquei ao meu código. No entanto, ainda pretendo revisar esse feedback junto ao instrutor, para aprimorar também na próxima entrega.

Tecnologias:

Config: Definição de parâmetros locais.
Express: Framework de gestão de rotas e requisições/respostas.
Heroku: Upload do webhook, para uso no fulfillment do DialogFlow.
Mongoose: Comunicação com o banco do MongoDB Atlas.
NodeJS: Ambiente de execução com JavaScript, base da execução do webhook.
NotionAPI: API para comunicação com database do Notion, front-end para leitura das chamadas para N2 pelos funcionários.

Instalação

  • Aplicação em NodeJS, requer que este esteja instalado na máquina/container utilizado.

  • Faça download/clone do repositório, caso necessário extraia para uma pasta local. Importe o bot para o DialogFlow; Isso pode ser feito ao criar um novo agente no console do DialogFlow, e nas configurações deste acessar "Import and Export" e importar o zip contido no repositório.

  • Execução local:

    • É necessário conectar com um banco de dados do MongoDB, recomendado utilizar o Atlas. Aqui você pode encontrar um passo à passo de como criar um cluster gratuito no Atlas e conseguir sua string de conexão. Com sua string em mãos, navegue para config.example/default.json, e cole em "Add your connection string here".
    • Como o webhook consome a NotionAPI, é preciso configurar as variáveis notion -> key e notion -> db no arquivo config.example/default.json. O guia Getting started with NotionAPI ensina como criar sua chave, criar a integração no notion, e pegar o ID do database de forma muito explicativa e visual. Você deve duplicar o template de lista de clientes(canto superior direito da página), ou recriar o banco com as mesmas propriedades para integração.
      • Após esses passos, renomeie config.example para config e está tudo certo.
    • Utilize de uma aplicação como o ngrok para estabelecer conexão com o webhook. Instale e execute o ngrok, crie conta caso necessário. Execute o comando ngrok http 3001, e caso necessário copie o link após "Fowarding" (com final ngrok.io) e cole na página de Fulfillment no console do Dialogflow (Fulfillment -> Webhook -> URL*) com a rota "/webhook" (Ex: 123-456-789.ngrok.io/webhook). Salve no final da página.
    • Instale as dependências do pacote antes da primeira execução com npm install --production dentro da pasta raiz.
    • Execute o projeto com npm start dentro da pasta raiz do projeto. Após esses passos, o bot estará em execução, exibindo a mensagem 'Webhook running' como confirmação. É possível executar o bot no painel direito, ou integrar com algum serviço. Para fazer a integração, siga os passos especificados no Console do DialogFlow.
  • Execução via Heroku Webhook:

    • Na página de Fulfillment no console do Dialogflow, utilize o link (https://aqueous-sierra-28306.herokuapp.com/webhook) para executar a webhook hospedada no heroku.
    • Agora, o bot pode ser executado no painel direito do console. Ainda, é possível adicionar integrações novas através do menu Integrations.

Intents

  • Implementadas:
    • Default Welcome Intent: Dá boas vindas ao usuário, com mensagem customizada caso já tenha usado o sistema anteriormente.
    • Default Goodbye Intent: Se despede do usuário, quando identifica que ele não quer mais conversar com o bot.
    • Default Fallback Intent: Intenção que é chamada sempre que o bot não entende algo. Ela sugere que o usuário chame a Help Intent, para aprender a navegar pelo bot.
    • Nickname Intent: Intenção extra, que permite o usuário escolher um apelido, e caso tenha um, este é referenciado em outras intenções.
    • Help Intent: Ensina ao usuário como utilizar o bot, sugerindo frases de como iniciar o fluxo.
    • Nickname Intent: Pergunta ao usuário como quer ser chamado.
    • Nickname Intent Next: Caso o usuário não tenha um apelido, adiciona no banco, relacionando com o ID/Session.
    • Report Intent: Tenta adicionar um chamado à ser tratado pelo suporte N2 no banco e na interface de front-end através da API do Notion. Caso falhe, informa que não foi possível criar um chamado no momento.
    • Diagnose Intent: Pede confirmação do tipo de problema.
    • Diagnose Intent Fallback: Caso a resposta de confirmação do tipo de problema não seja compreendida, tenta ajudar o usuário a responder mais objetivamente.
    • Diagnose Confirmation Intent: Chama Diagnose Intent - Software ou Diagnose Intent - Hardware, dependendo da resposta de confirmação do problema.
    • Diagnose Intent - Software: Generaliza o problema informado pelo usuário dentro da entidade @softwareProblem entre 5 parâmetros, para ajudar no diagnóstico do problema, já que pelo escopo, todos problemas de software são passados via chamado.
    • Diagnose Intent - Hardware: Tenta tratar o problema informado pelo usuário com propostas de soluções paliativas. Caso o problema seja de uma peça/computador quebrado ou defeituoso, abre um chamado.
    • Diagnose Intent - Hardware - Yes: Se o usuário confirma que teve seu problema resolvido pela solução paliativa, finaliza o atendimento.
    • Diagnose Intent - Hardware - No: Se o problema ainda não foi resolvido, abre um chamado para N2 tentar solucionar.

Contexts

  • goodbyeContext: Não é desejavel que, caso o usuário esteja inserindo alguma resposta e o bot entenda como fim de conversa por alguma razão, então criei o contexto para permitir que o usuário possa chamar o Default Goodbye Intent de forma restrita.
  • diagnoseContext: Contexto para começar o diagnóstico, tem seu propósito similar ao goodbyeContext, ja que não é desejado que o usuário chame por acidente a intenção quando, por exemplo, está alterando seu apelido.

Integração

  • O bot está integrado com o LINE, e para acessar ele, é necessário entrar no aplicativo e procurar pelo ID @@532yhotx, ou escaneie o QR Code.
  • O bot também tem integração com o Telegram, que pode ser acessada via este link.
  • Por fim, o bot também foi integrado com o Dialogflow Messenger, para acessar, basta ir em 'Integrations' após importar e configurar o bot no Dialogflow, 'Text Based -> DialogFlow Messenger -> Try it Now' e a janela aparecerá no canto inferior direito. Alternativamente, acesse o Glitch.me contendo o script do mensageiro.
  • Você pode ver a Lista de Chamados aqui. Ela é automaticamente atualizada sempre que um chamado é criado.

n1-support-chatbot's People

Contributors

mashirok avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.