首页 > 解决方案 > 通过 IBM Watson Chatbot 触发身份验证

问题描述

我有一个小型聊天机器人,它会对“测试”这个词做出反应。在阅读这个词时,他应该调用一个 IBM Cloud Function,作为回报,它会尝试注册返回令牌的用户。问题是,身份验证 API 需要大约 30 秒才能响应,并且 IBM Cloud 功能会立即执行。所以我的反应总是这样

    {
        "body": {},
        "headers": {"Content-Type": "application/json" },
        "status": 200
    }

But it should actually return the token in the body
    {
        "body": { "token": ... },
    ...
    }

我已经尝试将超时设置为 5 分钟,但这并没有帮助。我也在邮递员中尝试过,在那里我得到了正确的回应。然后我导出了对 javascript 的请求并将其修改为在 Cloud Function 中工作,但它再次返回一个空正文。

var request = require("request");

function main({id=123}) {
    var options = { method: 'POST',
      url: 'ip:port/v1/authentication',
      headers: 
       {
         "Host": "ip:port",
         "Content-Type": "application/json" },
      body: { username: '---', password: '---' },
      json: true };

    var result = { error: "No result was received" };
    request(options, function (error, response, body) {
      if (error) throw new Error(error);
      console.log(`Response body is: ${response.body}`);
      result = { token: response.body.token };
    });


    return {
        statusCode: 200,
        headers: { "Content-Type": "application/json" },
        body: { token: result["token"] }
    };
}

在下面你可以看到我收到的消息

Activation ID:
...
Results:
{
  "body": {},
  "headers": {
    "Content-Type": "application/json"
  },
  "statusCode": 200
}
Logs:
[]

遗憾的是,日志没有显示任何错误消息,因为一切正常。

标签: javascriptibm-cloudwatson-assistantibm-cloud-functions

解决方案


调用 Cloud Function 或 webhook 时往返的总时间限制为 5 秒。这是由 Watson Assistant 强加的,因此更改 Cloud Functions 中的任何超时都无济于事。

您可以优化流程(为什么要花这么长时间?)或将其拆分为两个操作。第一个调用将启动身份验证,第二个调用检查它是否成功。有一个对话框选项可以告诉用户正在发生某些事情,而无需等待用户输入(跳过用户输入)。使用它来缩短用户通过身份验证的时间。


推荐阅读