2016-12-24 63 views
0

我目前的实现不会返回任何有用的信息,如错误消息,所以我有点卡住了。如何让MS bot与Hapi一起工作

method: "POST", 
path: '/api/messages', 
handler: status 

我的状态功能是一个简单的函数:

const status = function (request, reply){ 
return connector.listen(request.raw.req, request.raw.res); 
}; 

也使用模拟器中的消息似乎只是没有日志信息发送和超时。

Full code can be seen here

回答

0

溶液从Microsoft BotBuilder框架GitHub的回购给我的Maxpert。

<!-- language: lang-js --> 
'use strict'; 

const Hapi = require('hapi'); 
const botbuilder = require('botbuilder'); 

const server = new Hapi.Server(); 
server.connection({ port: 3000 }); 

/** 
* interface IWebResponse { 
*  end(): this; 
*  send(status: number, body?: any): this; 
*  send(body: any): this; 
*  status(code: number): this; 
* } 
*/ 
function responseWrapper(res) { 
    return { 
     end() { 
      res.end(); 
      return this; 
     }, 

     send(statusOrBody, maybeBody, callback) { 
      var responseCode = 200; 
      var responseBody = maybeBody; 

      if (typeof statusOrBody == 'number') { 
       responseCode = statusOrBody; 
       responseBody = maybeBody; 
      } else { 
       responseBody = statusOrBody; 
      } 

      if (typeof responseBody != 'string') { 
       responseBody = JSON.stringify(responseBody); 
      } 

      res.writeHead(responseCode); 
      res.setHeader("Content-Type", "application/json"); 
      res.write(responseBody, callback); 
      res.end(); 
      return this; 
     }, 

     status(code) { 
      res.writeHead(code); 
      return this; 
     } 
    } 
} 

/** 
* 
* interface IWebRequest { 
*  body: any; 
*  headers: { 
*   [name: string]: string; 
*  }; 
*  on(event: string, ...args: any[]): void; 
* } 
* 
*/ 
function requestWrapper(request) { 
    return { 
     body: request.payload, 
     headers: request.headers, 
     on(event, listener) { 
      request.raw.req.on(event, listener) 
      return this; 
     } 
    } 
} 

// Initialize your connector 
const connector = new botbuilder.ChatConnector({ 
    appId: 'YOUR APP ID', 
    appPassword: 'YOUR APP PASSWORD' 
}); 

const bot = new botbuilder.UniversalBot(connector); 
const botHandler = connector.listen(); 
//========================================================= 
// Bots Dialogs 
//========================================================= 

bot.dialog('/', function (session) { 
    session.send("Hello World"); 
}); 

server.route({ 
    method: 'POST', 
    path: '/api/messages', 
    handler: function (request, reply) { 
     var wrappedResponse = responseWrapper(request.raw.res); 
     var wrappedRequest = requestWrapper(request); 
     botHandler(wrappedRequest, wrappedResponse); // Forwarded!!! 
    } 
}); 

server.route({ 
    method: 'GET', 
    path: '/', 
    handler: function (request, reply) { 
     var req = request.raw.req, 
      res = request.raw.res; 
     reply('Hello, world!'); 
    } 
}); 

server.start((err) => { 
    if (err) { 
     throw err; 
    } 

    console.log(`Server running at: ${server.info.uri}`); 
});