2016-04-14 53 views
2

Я пытаюсь получить новый wit.ai Bot Engine, связанный с hubot с Javascript. К сожалению, я не разработчик JS, поэтому я борюсь.wit.ai Bot Engine Рассказы, связанные с hubot

Вот код, у меня есть:

'use strict'; 
const Wit = require('../../../node-wit').Wit; 

const firstEntityValue = (entities, entity) => { 
    const val = entities && entities[entity] && 
    Array.isArray(entities[entity]) && 
    entities[entity].length > 0 && 
    entities[entity][0].value 
    ; 
    if (!val) { 
    return null; 
    } 
    return typeof val === 'object' ? val.value : val; 
}; 


const actions = { 
    say: (sessionId, msg, cb) => { 
    console.log(msg); 
    cb(); 
    }, 
    merge: (context, entities, cb) => { 
    const loc = firstEntityValue(entities, "location"); 
    if (loc) context.loc = loc; 
    cb(context); 
    }, 
    error: (sessionId, msg) => { 
    console.log('Oops, I don\'t know what to do.'); 
    }, 
    'fetch-weather': (context, cb) => { 
    // Here should go the api call, e.g.: 
    // context.forecast = apiCall(context.loc) 
    context.forecast = 'sunny'; 
    cb(context); 
    }, 
}; 

const client = new Wit('MY_TOKEN_HERE', actions); 
client.interactive(); 



module.exports = function(robot) { 

    robot.respond(/hey\s+(.+$)/i, function(msg){ 

     var match = msg.match[1];  
     msg.send("I've heared: " + match); 

     console.log(match) 
     process.stdout.write(match); 
    }); 
} 

Сценарий слушает «эй ИМЯ_БОТА» и выводит то, что было написано после этого. Моя проблема: я понятия не имею, как получить этот ввод, отправленный клиенту. Использование этого скрипта в bash без материала hubot отлично работает с остроумием, поскольку это основано на примере быстрого запуска от wit.ai.

Другая проблема, с которой я сталкиваюсь, заключается в том, что я хотел бы, чтобы hubot слушал в частном канале с каждым пользователем и отвечал на каждое сообщение без префикса. Так же, как пример узла в консоли.

Помощь очень полезна!

ответ

1

Хорошо, после того, как я занялся этой работой. Вот что мой hubot сценарий выглядит сейчас:

'use strict'; 
const Wit = require('../../../node-wit').Wit; 

var room; 

const firstEntityValue = (entities, entity) => { 
    const val = entities && entities[entity] && 
    Array.isArray(entities[entity]) && 
    entities[entity].length > 0 && 
    entities[entity][0].value 
    ; 
    if (!val) { 
    return null; 
    } 
    return typeof val === 'object' ? val.value : val; 
}; 


const actions = { 
    say: (sessionId, msg, cb) => { 
    console.log(msg); 
    room.send(msg) 
    cb(); 
    }, 
    merge: (context, entities, cb) => { 
    const loc = firstEntityValue(entities, "location"); 
    if (loc) context.loc = loc; 
    cb(context); 
    }, 
    error: (sessionId, msg) => { 
    console.log('Oops, I don\'t know what to do.');  
    room.send('Oops, I don\'t know what to do.') 
    }, 
}; 

const client = new Wit('MY_TOKEN_HERE', actions); 
//client.interactive(); 


module.exports = function(robot) { 

    robot.listen(function(msg) {   

     var userID = msg.user.id; 
     var roomID = msg.user.room; 

     // is this a direct chat(private room)? 
     if(roomID.indexOf(userID) >= 0){ 
      if(typeof msg.text == "string"){ 
       client.pxMessage(msg.text); 
      }   
     }  

     return true; 
     }, 
     function(response){ 

      // save room for replys 
      room = response; 
     }); 
} 

дополнительно я сделал ужасный хак, чтобы wit.js, чтобы получить эту работу. Я добавил следующую функцию, поскольку я не смог использовать доступные методы, чтобы заставить это работать. В основном обратные вызовы и сессии держали меня:

this.pxMessage = (message) => { 
     const sessionId = uuid.v1(); 
     const context = {}; 
     const steps = 5; 

     this.runActions(
     sessionId, 
     message, 
     context, 
     (error, context) => { 
      if (error) { 
      l.error(error); 
      } 
      rl.prompt(); 
     }, 
     steps 
    ); 
    } 

Если кто-то бы это еще и реализовать это правильно, я хотел бы видеть результат. Этот хак работает, и теперь у нас есть действительно умный бот в нашем ракете. Он понимает естественный язык и учится каждый день.

0

Вы можете непосредственно использовать этот модуль, он, кажется, работает хорошо: https://www.npmjs.com/package/hubot-wit

Я только что закончил интеграцию. Вам просто нужно предоставить переменную окружения WIT_TOKEN, и она прекрасно работает!

Смежные вопросы