2017-09-12 6 views
0

J'essaye de créer une application qui enverrait des messages à un chat sur le framework Microsoft Bot basé sur lib Directline, et répondra avec la réponse. L'application est une application Web qui devrait envoyer une requête POST qui devrait transmettre le message au client bot, et répondre avec la réponse du bot de Microsoft bot framework.Comment démarrer une conversation depuis le client nodejs vers le robot microsoft

Un exemple de requête HTTP POST:

http://host:port/api/message CORPS: {message: "Salut"}

Il devrait envoyer le "Salut" comme un texte au robot de chat pertinent le cadre de Microsoft Bot et répondre avec quoi jamais le cadre répond.

J'ai mis le secret et fait tout ce que je devrais avoir fait pour que cela fonctionne, mais j'ai un problème pour générer une conversation qui devrait parler avec le bot de discussion.

Voici comment je l'ai fait:

"use strict"; 

require('dotenv').config(); 

var express = require('express'); 
var app = express(); 
var fs = require("fs"); 
var bodyParser = require("body-parser"); 
var http = require('http'); 
var postLib = require("./lib"); 

var messageFilePath="message.out"; 

var cors = require('cors'); 
var uuid = require('uuid'); 

//new botclient 
var client = require('directline-api'); 

// config items 

var pollInterval = 1000; 
var directLineSecret = 'secret'; 
var directLineClientName = 'DirectLineClient'; 
var directLineSpecUrl = 'https://docs.botframework.com/en-us/restapi/directline3/swagger.json'; 

///bot client end 


var sendmail = require('sendmail')({silent: true}) 

app.use(bodyParser.urlencoded({extended: true})); 
app.use(bodyParser.json()); 

app.options('*', cors()); // include before other routes 
var corsOptions = { 
    origin: '*', 
    optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204 
}; 

    app.post('/interact/message', cors(corsOptions), function(req, res) { 
       var uuid1 = uuid.v1(); 
       var bodyMessage = JSON.stringify(req.body); 
       var log = uuid1 + ', ' + new Date().getTime() + ", " + bodyMessage; 
       if (req.query.botId == 1) { 
         emailMessage(log); 
         res.send(postLib.reply.reply); 
       } 
       if (req.query.botId == 2) { 
         botMessage(bodyMessage.message); 
         res.send(postLib.reply.reply); 
       } 

}); 




function emailMessage(log){ 

       sendmail({ 
         from: postLib.mail.from, 
         to: postLib.mail.to, 
         subject: postLib.mail.subject, 
         html: 'this is the log: [' + log + ']', 
         }, function(err, reply) { 
         console.log(err && err.stack); 
         console.dir(reply); 
       }); 


       fs.appendFile(messageFilePath, "\n" + log, function(error){ 
         if (error) throw error; 
       }); 
} 


function botMessage(message){ 

var token = client.getToken(directLineSecret); 

// create a conversation 
var conversationId = client.createConversation(token); 

// post a message in a conversation 
client.postMessage(token, conversationId, { 
       text: message 
      }); 
return client.getMessage(token, conversationId, 0); 
} 

var server = app.listen(8082, function() { 

    var host = server.address().address 
    var port = server.address().port 

    console.log("interact post server listening at http://%s:%s", host, port) 

}) 

Répondre

2

On ne sait pas la question que vous avez, mais je vous recommande de vérifier l'Node.js Direct Line sample.

+0

Je l'ai déjà vérifié et je n'ai pas réussi à résoudre ce que je voulais. Laissez-moi essayer de vous expliquer. Je veux être en mesure d'envoyer à partir du client http une requête de poste avec le texte dans le corps comme json, donc il passera le message à travers le client bot et devrait répondre avec le bot répondre. – user4860092

+0

Mais en utilisant DirectLine? ou l'API REST pour parler avec des robots? vous n'expliquez pas quel est votre problème –

+0

Je souhaite que mon propre service d'API de repos soit disponible pour prendre en charge une conversation simple. Ainsi, lorsque vous envoyez une simple requête POST standard avec le message qui s'y trouve, le message est transmis au client bot. Le client bot devrait parler avec le bot de frameworks Microsoft avec l'API de ligne directe. C'est une autre couche de conversation, une couche plus simple que j'essaie de construire. – user4860092