【问题标题】:Retrieving a Wit.ai Bot Text Response using the HTTP API Over Cross Domain使用跨域 HTTP API 检索 Wit.ai Bot 文本响应
【发布时间】:2016-11-03 05:24:05
【问题描述】:

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

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

怎么样了?

我希望在使用此消息进行 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,唯一的跨域请求方法是使用 JSONP,它只适用于 GET 请求。正如所料,上面的代码会导致 HTTP 400 错误。

谁能确认是否可以使用 HTTP API 来检索机器人对用户消息的文本响应?我目前正在做的事情有解决办法吗?

【问题讨论】:

    标签: wit.ai


    【解决方案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 配置Wit 需要。

    用户将向本地服务器发送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);
      }
    });
    

    【讨论】:

      【解决方案2】:

      同样的问题, 我确实找到了解决方法,因为我是从我的 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);
          }
      });
      

      });

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-13
        • 1970-01-01
        • 1970-01-01
        • 2019-07-07
        • 2019-12-27
        相关资源
        最近更新 更多