2016-11-03 3 views
2

私は現在、webpage in CodePen.ioのWit.aiで作業しています。私はHTTP APIを使ってWit.aiボットのテキストレスポンス( "Bot says")を取得することが可能かどうか疑問に思っていました。例えばHTTP APIを使用したWit.ai Botテキストの取得

:ユーザーがでボットを促すためだった場合:

どのようにそれが起こっているの?

私は、このメッセージでAPI呼び出しを行った後、ボットの典型的な応答を取得できるようにしたいと思います:

私は人間ありがとう、よくしています。

私はHTTP API Documentationを調べました。これはapi.wit.ai/converseへの 'POST'を使って行われたようです。 JSONレスポンスには「msg」フィールドがあります。これは私が必要とするものです。ここで私が現在使用しているコードです:

$.ajax({ 
    url: baseUrl + "converse", 
    data: { 
     'q': text, // The message to send the bot 
     'session_id': "123abc", 
     'access_token' : accessToken // Authorisation key for using our bot 
    }, 
    dataType: 'json', 
    crossDomain: true, 
    method: 'POST', 

    success: function(data) { 
     prepareResponse(data); 
    }, 
    error: function() { 
     respond(messageInternalError); 
    } 
}); 

しかし、Wit.Aiは現時点でCORSをサポートしていませんが、唯一の方法は、唯一のGETリクエストのために働くJSONPを、使用しているクロスドメインリクエストを行います。予期されるように、上記のコードはHTTP 400エラーを引き起こします。

HTTP APIを使用してボットのテキストメッセージをユーザーメッセージに取り込むことができるかどうかは誰でも確認できますか?私は現在何をしているのですか?

答えて

1

私は最近同じ問題を抱えていました。会話を成功させるためには、最初にローカルサーバーを作成しなければなりませんでした。これはすべてのユーザーの要求を処理し、Witのサーバーに送信します。

使用node.js,express,nodemonおよびsync-requestです。

ここserver.jsファイルです:

var express = require('express') 
var request = require('sync-request'); 

var port = 8001; 
var app = express() 

app.get('/converse', function (req, res) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "X-Requested-With"); 
    var message = req.query.q; 
    var sessionID = req.query.session_id; 
    var response = request('POST', 'https://api.wit.ai/converse?q=' + message + '&session_id=' + sessionID, { 
    'headers': { 
     'Content-Type': 'application/json; charset=utf8', 
     "Accept": "application/json", 
     "Authorization": "Bearer $place-app-token" 
    } 
    }); 
    res.send(JSON.parse(response.getBody('utf8'))); 
}) 
app.listen(port); 

Serverはheaders設定ウィットが必要とPOST要求を送信します。

ユーザーはGETリクエストをローカルサーバーに送信します。

$.ajax({ 
    url: 'http://127.0.0.1:8001/converse', 
    data: { 
    'q': text, 
    'session_id': sessionID 
    }, 
    method: 'GET', 
    crossDomain: true, 
    success: function(response) { 
    console.log(response, response.msg); 
    } 
}); 
:ここ https://wit.ai/docs/http/20160526#cross-domain-link

フロントエンド要求です:ドキュメントで提案されているように、jQueryを使用

1

ここで同じ問題 私はnodejsアプリケーションから呼び出していたので、回避策を見つけました。代わりに がカールしました。 ここにコードがあります。

var sys = require('util') 

var exec = require('child_process').exec; 
var child; 
child = exec("curl -XPOST 'https://api.wit.ai/converse?v=20160330&session_id=123abc&q=screw%20http%20api%20calls' \\ -H \"Content-Type: application/json\" \\ -H \"Accept: application/json\" \\ -H 'Authorization: Bearer $token'", function (error, stdout, stderr) { 
    res.send(stdout) 
    //sys.print('stderr: ' + stderr); 
    if (error !== null) { 
     console.log('exec error: ' + error); 
    } 
}); 

});

関連する問題