Vamos fazer um chatbot - Microsoft Bot Framework + Node.js - Agatetepê
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.
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ó:
Crie uma pasta para o espaço de trabalho do projeto
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 builder = require ('botbuilder');
var server = restify.createServer ();
server.listen (process.env.port || process.env.PORT || 3978,
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 ({
// 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) {
'https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment' ;,
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) {
uri: 'https://api.giphy.com/v1/gifs/translate',
s: searchString,
api_key: '9n8AIaWULVu37sA1k8eE38IwnCCjmXP9'
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', [
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',
JSON.parse (gif) .data.images.original.url
console.log ("Erro ao obter giphy:" + err);
text: "Não foi possível encontrar isso infelizmente :(",
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?");
if (results.response === "Yes" || results.response ===
"sim") {
session.beginDialog ('/ giphy');
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.
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
Configurar uma conta do Azure
Crie um aplicativo da Web no Azure
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.
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!
Construindo um bot de folga no Node.js antes que sua pipoca de microondas esteja pronta
Charmaine Lee Blocked Unblock Seguir Seguindo 6 de agosto de 2018 (E realmente sabe o que você está fazendo ao…