Vamos fazer um chatbot – Microsoft Bot Framework + Node.js

Beriwan Ravandi Blocked Desbloquear Seguir Seguindo 3 de dezembro de 2017

Ontem mesmo eu assisti ao dia do Hack Local da universidade. Como o título sugere, eu criei um chatbot usando o Bot Framework da Microsoft, o seu Bot Builder SDK for Node.js. Também usei a API Cognitive Services da Microsoft para análise de sentimentos e a API do GIPHY para GIFs, é claro. Por fim, implantei o bot no Azure.

Meus amigos estagiários do trabalho e eu decidi fazer um chatbot que quer saber como você está indo e animá-lo, ou se é mais sério, encontrar recursos profissionais e números de linha direta para ajudá-lo a cuidar da sua saúde mental. Nós o chamamos de careBOTyou e o criamos em 12 horas.

Vamos começar.

O quadro

O Bot Framework da Microsoft é incrível porque você pode usá-lo em diferentes canais como Facebook, Slack, Skype e assim por diante.

Para começar, você precisa configurar o projeto do nó e instalar os módulos e emulador do nó:

  1. Crie uma pasta para o espaço de trabalho do projeto
  2. Instalar o Node.js

Execute o seguinte comando: npm init para iniciar o projeto do nó e seguir o prompt no seu terminal, que criará um arquivo package.json .

3. Instale o Bot SDK (para o Node.js especificamente! Há também um SDK para .NET)

Executar npm install --save botbuilder

4. Instale o Restify (ou Express, se desejar)

Executar npm install --save restify

5. Baixe o emulador de bots

6. Crie um arquivo app.js no diretório do projeto

Adicione o seguinte código ao seu arquivo app.js para configurar o bot e o conector que atendem em um endpoint da API.

 var restify = require ('restify'); 
var builder = require ('botbuilder');
 // Setup Restify Server 
var server = restify.createServer ();
server.listen (process.env.port || process.env.PORT || 3978,
function () {
console.log ('% s está ouvindo% s', server.name, server.url);
});
 // conector de chat para se comunicar com o Bot Framework Service 
conector var = construtor new.ChatConnector ({
appId: process.env.MICROSOFT_APP_ID,
appPassword: process.env.MICROSOFT_APP_PASSWORD
});
 // Ouça as mensagens dos usuários 
server.post ('/ api / messages', connector.listen ());
 // Recebe mensagens do usuário e responde ecoando cada mensagem de volta (prefixado com 'You said:') 
 var bot = new builder.UniversalBot (conector, função (sessão) { 
session.send ("Você disse:% s", session.message.text);
});

7. Teste seu bot no emulador

Executar node app.js para executar o seu bot localmente. Inicie o emulador e conecte seu bot a ele. Digite http://localhost:3978/api/messages (endpoint padrão quando executado localmente) na barra de endereço, por enquanto, deixe MICROSOFT_APP_ID e MICROSOFT_APP_PASSWORD em branco por enquanto. Clique em Conectar!

Por enquanto, o seu bot deve responder com "Você disse:" para qualquer coisa que o usuário envie ao bot.

Em seguida, adicionando diálogos para encapsular a lógica de conversação e as duas APIs que usamos.

O código e as APIs

Usando o SDK, aproveitei os reconhecedores integrados e os manipuladores de eventos que orientam o usuário durante a conversa.

Eu usei a API de serviços cognitivos da Microsoft, especificamente sua API de análise de texto para análise de sentimentos. Basicamente, a API retorna uma pontuação entre 0 e 1. Pontuações próximas a 1 indicam sentimento positivo e pontuações próximas a 0 indicam sentimento negativo. A pontuação do sentimento é produzida usando técnicas de classificação, incluindo n-grams, marcação de parte da fala e incorporação de palavras.

Para construir uma chamada de API, o código a seguir inclui os terminais da API (URL base) com os argumentos transmitidos como JSON no corpo da solicitação com o cabeçalho HTTP do tipo de conteúdo definido como application / json. Certifique-se também de definir um cabeçalho válido de Agente do Usuário.

 var header = {'Content-Type': 'aplicativo / json', 
'Ocp-Apim-Subscription-Key': '6fb7959510a84e389985fd3343705e6b'}
 function sendGetSentimentRequest (message) { 
var options = {
método: 'POST',
uri:
'https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment' ;,
body: {
documentos: [{id: '1', idioma: 'en', texto: mensagem}]
}
json: true, // Automaticamente vincula o corpo ao JSON
cabeçalhos: cabeçalho
};
return rp (opções)
;}
 function getGiphy (searchString) { 
var options = {
método: 'GET',
uri: 'https://api.giphy.com/v1/gifs/translate',
qs: {
s: searchString,
api_key: '9n8AIaWULVu37sA1k8eE38IwnCCjmXP9'
}
}
return rp (opções)
;}

Para chamar a API do Google Analytics de texto, o bot solicita que o usuário fale sobre como está se sentindo hoje. A chamada da API retorna a pontuação do sentimento com base na resposta do usuário e, em seguida, inicia uma nova caixa de diálogo, dependendo da pontuação do sentimento, seja '/ happy' , '/ stressed' ou '/ crisis' .

Diálogos são usados para gerenciar a conversa de bots com um usuário. A caixa de diálogo raiz é '/', que é a primeira coisa que o bot dirá quando o usuário enviar uma mensagem.

O parâmetro de sessão é passado para manipuladores de diálogo sempre que seu bot receber uma mensagem do usuário. Ele é usado para gerenciar mensagens enviadas para e do usuário.

 // Bot se apresenta e diz olá no início da conversa 
bot.on ('conversationUpdate', function (message) {
if (message.membersAdded [0] .id === message.address.bot.id) {
var reply = new builder.Message ()
.address (message.address)
.text ("Olá, estou bem, como vai o seu dia?");
bot.send (resposta);
}
});
 bot.dialog ('/', function (session) { 
sendGetSentimentRequest (session.message.text) .then (function (parsedBody) {
console.log (parsedBody);
var score = parsedBody.documents [0] .score.toString ();
se (pontuação> 0,80) {// feliz
session.beginDialog ("/ feliz");
} else if (score> 0.1) {// estressado
session.beginDialog ("/ stressed");
} else {// crise
session.beginDialog ("/ crisis");
}
})
.catch (função (err) {
console.log ("POST FAILED:" + err);
});
});

Com a pontuação do sentimento, um novo diálogo será iniciado. Se a pontuação do sentimento estiver acima de 0,8, presumimos que o usuário está feliz. O código a seguir é como você adicionaria o diálogo com o Bot SDK. Aqui, a chamada da API GIPHY é feita.

 bot.dialog ('/ feliz', [ 
function (session) {
builder.Prompts.text (sessão, "Isso é incrível! O que faria você ainda mais feliz?");
}
função (sessão, resultados) {
getGiphy (results.response). then (function (gif) {
// session.send (gif.toString ());
console.log (JSON.parse (gif) .data);
session.send ({
texto: "Aqui está!",
anexos: [
{
contentType: 'image / gif',
contentUrl:
JSON.parse (gif) .data.images.original.url
}
]
});
}). catch (function (err) {
console.log ("Erro ao obter giphy:" + err);
session.send ({
text: "Não foi possível encontrar isso infelizmente :(",
anexos: [
{
contentType: 'image / gif',
contentUrl: 'https://media.giphy.com/media/ToMjGpt4q1nF76cJP9K/giphy.gif',
nome: 'Chicken nugz are life'
}
]
});
então) (function (idk) {
builder.Prompts.text (sessão, "Você gostaria de ver mais?");
});
}
função (sessão, resultados) {
if (results.response === "Yes" || results.response ===
"sim") {
session.beginDialog ('/ giphy');
} outro {
session.endDialog ("Tenha um bom descanso do seu dia !!!");
}
}
]);

No trecho de código acima, você pode ver uma matriz de funções dentro da caixa de diálogo. Essa implementação do diálogo é chamada de cascata . É usado para guiar o usuário durante a conversa, através de uma série de mensagens. Em cada etapa, o bot solicita ao usuário uma entrada, aguarda uma resposta e, em seguida, passa o resultado para a próxima etapa. Cada etapa é representada por cada função na matriz.

O que também é ótimo sobre o framework Bot são prompts . builder.Prompts.text() é usado para coletar a entrada do usuário. No código acima, o bot pergunta ao usuário feliz “O que faria você ainda mais feliz?” . A entrada é então usada para recuperar um GIF com a API do GIPHY.

Para ver o resto do código que minha equipe e eu escrevemos, clique aqui .

Registrar e implantar

Todo esse tempo o bot está rodando localmente com um emulador. Agora vamos usar o Azure para implantar nosso bot.

  1. Empurre todo o seu código para o GitHub (você também pode implantar a partir de um git repo local ou Visual Studio) e siga estes passos
  2. Configurar uma conta do Azure
  3. Crie um aplicativo da Web no Azure
  4. Cadastre seu bot

Ao registrar seu bot, o ponto de extremidade de mensagens HTTPS é o URL do seu aplicativo da Web do Azure (encontrado na seção Visão geral de aplicativos da Web). Você precisará adicionar / api / messages ao final do URL.

Você também precisará adicionar o MICROSOFT_APP_ID e o MICROSOFT_APP_PASSWORD gerados às Configurações do Aplicativo do seu Web App. Você pode fazer isso indo para a seção Configurações do aplicativo em que a chave é MICROSOFT_APP_ID e Value é o ID gerado. Repita para MICROSOFT_APP_PASSWORD.

Finalmente, adicione MICROSOFT_APP_ID e MICROSOFT_APP_PASSWORD do seu bot ao seu código onde você declara sua variável de conector de chat, substituindo process.env.MICROSOFT_APP_ID
e process.env.MICROSOFT_APP_PASSWORD.

Finalmente

A partir do portal Bot Framework, onde você registrou seu bot, agora você pode adicionar vários canais com os quais você pode conversar com seu bot. Você pode começar com os canais Skype e Web Chat, desde que esses dois estejam ativados por padrão.

Precisa de uma ideia para um chatbot? Confira esta lista sempre crescente!