- 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.
- 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.
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.
-
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
enotion -> db
no arquivoconfig.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
paraconfig
e está tudo certo.
- Após esses passos, renomeie
- 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.
- É 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
-
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.
- 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 aHelp 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
: ChamaDiagnose Intent - Software
ouDiagnose 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.
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 oDefault Goodbye Intent
de forma restrita.diagnoseContext
: Contexto para começar o diagnóstico, tem seu propósito similar aogoodbyeContext
, ja que não é desejado que o usuário chame por acidente a intenção quando, por exemplo, está alterando seu apelido.
- 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.