最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何在bot框架

运维笔记admin7浏览0评论

如何在bot框架

如何在bot框架

我正在开发一个通过botbuilder JS V4使用Direct Line连接到我们的客户端应用程序的机器人。由于某些原因,会将消息以错误的顺序发送给机器人。例如:

  • 用户:你好

  • Bot:如何为您提供帮助?

  • Bot:嗨,我是机器人。

作为解决方案,我在机器人的许多对话中在消息之间添加了两秒钟的延迟。

什么是正确的方法?这是解决此问题的推荐方法吗?

使用setTimeout()

async greetUser(step) {
  ...
  await step.context.sendActivity(firstReply);
  setTimeout(() => {
    await step.context.sendActivity(secondReply);
  }, 2000);
}

使用sleep()

const sleep = require("util").promisify(setTimeout);

async greetUser(step) {
  ...
  await step.context.sendActivity(firstReply);
  await sleep(2000);
  await step.context.sendActivity(secondReply);
}

添加了许多sleep()函数后,我注意到该漫游器性能受到影响。该机器人没有在生产环境方面做出回应。并引发此错误:

[onTurnErrorStack]: Error
   at new RestError (D:\home\site\wwwroot\node_modules\@azure\ms-rest-js\dist\msRest.node.js:1397:28)
   at D:\home\site\wwwroot\node_modules\@azure\ms-rest-js\dist\msRest.node.js:1849:37
   at <anonymous>
   at process._tickDomainCallback (internal/process/next_tick.js:228:7)
[onTurnError]: {"statusCode":401,"request":{"streamResponseBody":false,"url":"","method":"POST","headers":{"_

是否有解决此问题的建议?

回答如下:

我在记录成绩单时遇到了类似的问题,响应将覆盖请求。我发现了一个简单的for循环,它允许我设置ms延迟,并且对我来说效果很好。等待功能是:

    async wait(milliseconds) {
        var start = new Date().getTime();
        for (var i = 0; i < 1e7; i++) {
            if ((new Date().getTime() - start) > milliseconds) {
                break;
            }
        }
    }

所以您应该可以这样称呼它:

async greetUser(step) {
  ...
  await step.context.sendActivity(firstReply);
  await this.wait(2000);
  await step.context.sendActivity(secondReply);
}

现在,这似乎与睡眠功能非常相似,我没有任何经验。我没有任何问题,尽管我的延迟仅为250ms,而不是2000,但它每转被调用两次以记录请求和响应。

我想知道是否有更好的方法来引入对话延迟。

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论