【问题标题】:ShowTypingMiddleware keeps showing indicator even after the message is sent即使在发送消息后,ShowTypingMiddleware 仍然显示指示器
【发布时间】:2021-03-10 00:15:34
【问题描述】:

使用 SDK V4 中的 ShowTypingMiddleware ,有人可以在一个真实的例子中进一步解释 delayperiod 是如何工作的。
例如:ShowTypingMiddleware(0, 2000)

延迟:发送第一个输入指示符之前的初始延迟
周期:发送额外输入指示符的速率

据我了解:

  • 延迟

    如果 延迟为 0,那么当机器人将要向用户发送消息时,应该没有延迟,并且指示器应该在发送消息之前立即显示。

  • 期间

    [考虑一个人打字示例]

    这是不是例如当某人在写消息时暂停而不是再次开始打字?
    含义在这个人开始打字后,它会等待 2000 毫秒,然后再次发送打字指示器?

    [考虑 bot 示例]

    这对机器人来说是如何翻译的?机器人不会暂停
    周期指示器何时对机器人生效?

我面临的主要问题是,即使在发送消息后,机器人也会继续显示打字指示器。所以用户一直在等待

MessengerDirectLine 频道都发生这种情况

这是因为我误解了 Period & Delay 还是有其他原因?

更新: 检查下面的 GIF

(观看全部,大约 50 秒,注意它并不总是发生)

【问题讨论】:

    标签: c# botframework


    【解决方案1】:

    在机器人发送消息后有一个活跃的打字指示器可能与: https://github.com/microsoft/botbuilder-dotnet/issues/3047

    如果您在OnTurnAsync 方法中有额外的工作,ShowTypingMiddleware 的取消将不会被及时调用。因此,在您的机器人发送消息活动后,它仍然能够发送打字指示器活动。

    您可以创建ShowTypingMiddleware 的副本并对其进行修改,以便在检查取消时检查机器人是否已经响应。 https://github.com/jvanderbiest/echo-bot-typing-indicator/blob/master/CustomShowTypingMiddleware.cs#L90

    【讨论】:

      【解决方案2】:

      据我了解:延迟 如果延迟为 0,那么当机器人 即将向用户发送消息,应该没有延迟,并且 指示符应在发送消息之前立即显示。

      正确。发送打字指示符之前的延迟。

      时期
      [考虑一个人打字的例子] 例如,当有人在写信息时暂停而不是再次开始输入?意思是在这个人开始打字后,它会等待 2000 毫秒,然后再发出打字指示器?

      是的,但这是由通道+客户端控制的(当然)。

      [考虑机器人示例] 这对机器人来说是如何翻译的?机器人不暂停时 Period 指示器对机器人有效吗?

      机器人将在 2 秒后重新发送打字活动。它将一直这样做,直到它发送消息活动。

      我发现 Microsoft.Bot.Builder.ShowTypingMiddleware 类中的 summary 非常有用。

      我面临的主要问题是,机器人一直显示打字 即使在消息发送后也会显示。所以用户一直在等待 这发生在 Messenger 和 DirectLine 频道上 发生是因为我误解 Period & Delay 还是存在 还有什么?

      如果您正在发送消息活动,则应该停止打字活动。如果没有,那就有问题了。如果您可以创建此问题的示例复现,我将有兴趣尝试看看我是否可以自己复现。

      您可以找到有关打字活动架构here 的更多信息。

      【讨论】:

      • 我正在使用虚拟助手模板,您可以安装该模板并使用它。发送消息活动一段时间后,打字指示器会继续显示然后停止,但在停止之前仍会显示一段时间(几秒钟)。我使用它的延迟 = 0 和周期 = 300 毫秒。因此,当用户收到一条消息时,打字指示器会持续几秒钟然后停止,让用户一直等待,以为会发送其他内容
      • 嗯,这很奇怪。你在使用网络套接字吗?您是否在 DefaultAdapaterDefaultWebSocketAdapter 或其他地方进行了相同的更改(针对 ShowTypingMiddleware)? 300ms 远低于建议的最小值。这不应该是原因(但同样,它应该按预期工作)。我无法在我的 VA 中重现该问题。您是否人为地导致代码延迟以测试此行为(我是)?
      • DefaultAdapter 和 DefaultWebSocketAdapter 具有相同的设置。我没有人为造成任何延迟,请检查我更新的问题,我添加了一个 GIF 来展示这个问题
      • 嗯,很奇怪。感谢您添加。它的行为是否与延迟相同[如默认值 (500,2000)]?
      【解决方案3】:

      我遇到了类似的问题。我尝试使用ShowTypingMiddlewareCustomShowTypingMiddleware,但它们并没有像预期的那样对我有用。该消息是在显示打字指示器之前和之后发送的。也就是说,机器人结束了两次发送相同的消息(在显示输入指示器之前和显示输入指示器之后)。

      我能够使用在OnMessageActivityAsync 处理程序中实现的Send a typing indicator code example 解决此问题。

      await turnContext.SendActivitiesAsync(new Activity[] {
              new Activity { Type = ActivityTypes.Typing },
              new Activity { Type = "delay", Value= 3000 },
              MessageFactory.Text("Finished typing", "Finished typing"),
              }, cancellationToken);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-27
        • 1970-01-01
        • 1970-01-01
        • 2020-09-21
        • 2019-05-16
        • 1970-01-01
        • 2022-01-26
        • 1970-01-01
        相关资源
        最近更新 更多