如何在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,但它每转被调用两次以记录请求和响应。
我想知道是否有更好的方法来引入对话延迟。