wit.ai Bot Engine Истории, связанные с hubot

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

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

'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);
    });
}

Скрипт слушает "hey botname" и выводит то, что было написано после этого. Моя проблема в том, что я понятия не имею, как отправить этот ввод клиенту остроумия. Использование этого скрипта в bash без hubot-вещей отлично подходит для wit, так как он основан на примере быстрого старта с wit.ai.

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

Помощь очень приветствуется!


person Gabor wraight    schedule 14.04.2016    source источник


Ответы (2)


Хорошо, немного повозившись, я сделал эту работу. Вот как сейчас выглядит мой скрипт 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
      );
  }

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

person Gabor wraight    schedule 15.04.2016

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

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

person Aswin Kumar    schedule 24.11.2016