2016-04-14 1 views
2

私は新しいwit.aiボットエンジンをハブトにJavascriptで接続しようとしています。 残念ながら私はJS開発者ではないので、苦労しています。wit.aiボットエンジンストーリーがハブットに接続

は、ここに私が持っているコードです:

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

スクリプトは、「botnameねえ」リッスンし、この後に書かれたものを出力します。私の問題は、私はこの入力をウィットクライアントに送るための手がかりがないということです。このスクリプトをbashで使用すると、wit.aiのクイックスタートの例に基づいているので、ハッボットのものはうまく動作しません。

私が直面しているもう一つの問題は、私がハプットにプライベートチャンネルですべてのユーザを聞いて、プレフィックスなしですべてのメッセージに応答させたいということです。コンソールのノードの例と同じです。

ヘルプは非常に便利です!

答えて

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を提供する必要があり、それは美しく動作します!