【问题标题】:How to send a message to user if the bot is idle for 5 mins in botframework v4如果机器人在 botframework v4 中空闲 5 分钟,如何向用户发送消息
【发布时间】:2020-04-20 05:32:40
【问题描述】:

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

它是Demo bot,所以我使用本地内存存储。

任何帮助将不胜感激。

【问题讨论】:

  • 可以在onturn活动中使用定时器功能。我希望这个逻辑对你有用。
  • 您的标题提到了重置对话,但您的问题只是提到了发送消息。 5分钟后你到底想发生什么?只是发送给用户的消息?另外,你是如何部署机器人的?如果您使用的是直接 botframework-webchat 频道与 OOTB WebChat 或 Teams 等 OOTB 频道,则有不同的解决方案。
  • 我想在用户 5 分钟后空闲时发送简单消息,我部署为 OOTB 网络聊天 @billoverton
  • 我看到cmets中提到了directline,所以我换个方式问。您是否使用频道刀片中提供的嵌入 URL?或者您是使用 webchat.render 或类似名称部署为单独的 HTML 文件?

标签: .net asp.net-core botframework


【解决方案1】:

有几种方法可以解决这个问题。如果您通过脚本调用它(使用类似 botframework-webchat 选项,使用 Directline 通道),您可以查看 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 之类的东西中使用它,您可以使用我链接的第一种方法。

【讨论】:

  • 这对你有用吗?如果是这样,请接受这个答案,或者如果您仍然遇到困难,请告诉我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-27
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 2020-09-16
相关资源
最近更新 更多