如果在Directline网络聊天频道中说了5分钟后仍未收到用户的任何消息,我想发送一个提示(我正在等待)。
这是演示机器人,所以我正在使用本地内存存储。
任何帮助将不胜感激。
答案 0 :(得分:0)
有两种方法可以解决此问题。如果您通过脚本调用此命令(使用Directline通道使用botframework-webchat选项),则可以签出this answer on SO,它向您展示了如何在HTML文件中进行设置。
如果您想直接在漫游器中实现此功能,可以使用提到的Sainath Reddy这样的时间函数。但是,我注意到上下文对象变得无效,因此您必须改为使用主动消息传递。我不确定这是否是最有效的方法,但是这就是我能够完成此操作的方式。
首先,您必须从botbuilder导入TurnContext和BotFrameworkAdapter
const { TurnContext, BotFrameworkAdapter } = require('botbuilder');
然后,在onMessage函数中添加以下代码(如果使用的是较早的设置,则添加onTurn)。 setTimeout
将只运行一次。如果您想重复,可以改用setInterval
。
// Save the conversationReference
var conversationReference = TurnContext.getConversationReference(context.activity);
// Reset the inactivity timer
clearTimeout(this.inactivityTimer);
this.inactivityTimer = setTimeout(async function(conversationReference) {
console.log('User is inactive');
try {
const adapter = new BotFrameworkAdapter({
appId: process.env.microsoftAppID,
appPassword: process.env.microsoftAppPassword
});
await adapter.continueConversation(conversationReference, async turnContext => {
await turnContext.sendActivity('Are you still there?');
});
} catch (error) {
console.log(error);
}
}, 300000, conversationReference);
我更喜欢这种方法,因为如果您使用的是botframework-webchat或类似工具,它也可以使用。实际上,它将在每个频道中运行。如果某些通道您不希望发生这种情况,则必须向该函数添加一些其他逻辑。或者,如果仅在botframework-webchat之类的环境中需要它,则可以使用我链接的第一种方法。