javascript - 获取意图、实体、上下文和所有数据

标签 javascript rest ibm-watson watson-conversation

在这种情况下,实际上简单的对话有一个包含所有值的函数,但该函数每次在对话进行时都会更新。

我想创建一个函数或其他形式,以便能够捕获当前数据上的所有数据。

案例中有意图、上下文、实体等

conversation.message(payload, function(err, data) {
    if (err) {
      return res.status(err.code || 500).json(err);
    }
    return res.json(updateMessage(payload, data));
  });
});

updateMessage 参数内的数据包含我需要的所有数据,但如果我创建其他函数并尝试获取此值,则不起作用。

在这种情况下,我使用这些值并使用 app.js 来打开一些 REST Web 服务。 我试试:

function login (req, res) {    
      numberOrigin = null;
      sessionid = null;

      var dataLogin = {
        data:  { "userName":"xxxxx","password":"xxxxx","platform":"MyPlatform" },
        headers: { "Content-Type": "application/json" }
      };

      client.registerMethod("postMethod", "xxxxxxxxxxxxxxx/services/login", "POST");        
      client.methods.postMethod(dataLogin, function (data, response) {

        if(Buffer.isBuffer(data)){
          data = data.toString('utf8');
          console.log(data);
          var re = /(sessionID: )([^,}]*)/g;
          var match = re.exec(data);
          var sessionid = match[2]
          console.log(sessionid);              
        }
      });
    }

    function openRequest(data, sessionid, numberOrigin ){
      //console.log(data); dont show the values.. show the data response of login
         var dataRequest = {
         data: {"sessionID": sessionid,
                "synchronize":false,
        "sourceRequest":{
             "numberOrigin":numberOrigin,
             "description": JSON.stringify(data.context.email) } },
         headers: { "Content-Type": "application/json" }
         };

         numberOrigin +=1;
         client.post("xxxxxxxxxxxxxxxxxx/services/request/create", dataRequest, function (data, response) {         
          if(Buffer.isBuffer(data)){
          data = data.toString('utf8');    
          console.log(data);          
          }
        });
      }

    function updateMessage(res, input, data, numberOrigin) {
      var email = data.context.email;  // this recognize but this function is responsible for other thing        
       if (email === 'xxxxxxxxxxxx@test.com') {
        console.log(data);
        login(data);
        openRequest(data, sessionid, numberOrigin)
       }
     }

以防万一,我只想使用我的 app.js 获取值以在 REST 中使用。我通过 ajax 获得了它,但所有内容都在客户端 (index.html),这让我显示了我的凭据,所以我决定在 REST 中执行此操作,以确保我的代码安全。 如果有某种形式可以解决这个问题,请告诉我。 如果有其他形式可以做到这一点,我会很高兴知道。

提前致谢。

最佳答案

问题可能是您需要写入响应对象res。在 updateMessage 函数中,响应被传入。为了将数据发送回浏览器,您需要写入响应。我有一个演示应用程序,它调用天气 channel 来根据意图获取天气,类似于您尝试使用登录功能执行的操作。请看一下这段代码 https://github.com/doconnor78/conversation-simple-weather/blob/master/app.js#L130

您需要将原始 res(响应)对象传递到适当的函数中,然后在从第三方服务获取响应(res)后将数据写入到响应(res)中。

关于javascript - 获取意图、实体、上下文和所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42254834/

相关文章:

javascript - 使用rxjs实现指数补偿

objective-c - 如何通过json api更新服务器数据库上的数据?

python - 在 Jupyter Notebook 中使用 watson_developer_cloud 时出现错误

javascript - 有没有办法让跨平台溢出:scroll

javascript - 在 sails.js 中使用 EJS 模板

java - 基于HTTP方法的自定义验证

mongodb - 将数据发布到 Meteor 的 MongoDB 集合

ibm-cloud - Watson 视觉识别错误 400 : cannot execute learning task: no classifier name given

ibm-cloud - 如何在 IBM Conversation 中编写数学方程和符号

javascript - 如何使 <tr> 充当固定的顶部栏?