使用HTTP API Over Cross Domain检索Wit.ai Bot文本响应

时间:2016-11-03 05:24:06

标签: wit.ai

我目前正在webpage in CodePen.io与Wit.ai合作。我想知道是否可以使用HTTP API检索Wit.ai bot的文本响应(“Bot说”)。

例如:如果用户要提示机器人:

  

怎么回事?

我希望在使用此消息进行API调用后,能够检索机器人的典型响应:

  

我很好,谢谢你。

我查看了HTTP API Documentation。这似乎是使用api.wit.ai/converse的“POST”完成的。 JSON响应包含一个“msg”字段,这正是我需要的!这是我目前正在使用的代码:

{{1}}

但是,Wit.Ai目前不支持CORS,制作跨域请求的唯一方法是使用JSONP,它只适用于GET请求。可以预料,上面的代码会导致HTTP 400错误。

任何人都可以确认是否可以使用HTTP API检索机器人对用户消息的文本响应?我目前在做什么工作?

2 个答案:

答案 0 :(得分: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);
    }
});

});

答案 1 :(得分:1)

我最近遇到了同样的问题。为了成功地进行对话,我必须首先创建一个本地服务器,它将处理所有用户请求并将它们发送到Wit的服务器。

已使用node.jsexpressnodemonsync-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);

服务器将发送POST请求,其中headers配置需要。

用户将向本地服务器发送GET请求。已使用jQuery,如文档中所述:https://wit.ai/docs/http/20160526#cross-domain-link

这是前端请求:

$.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);
  }
});