如果Botframework v4中的Bot闲置5分钟,如何向用户发送消息

时间:2020-04-20 05:32:40

标签: .net asp.net-core botframework

如果在Directline网络聊天频道中说了5分钟后仍未收到用户的任何消息,我想发送一个提示(我正在等待)。

这是演示机器人,所以我正在使用本地内存存储。

任何帮助将不胜感激。

1 个答案:

答案 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之类的环境中需要它,则可以使用我链接的第一种方法。