即使在邮件发送后,ShowTypingMiddleware仍继续显示指示器

时间:2019-10-24 09:39:52

标签: c# botframework

使用SDK V4 中的ShowTypingMiddleware,有人可以在真实示例中进一步说明延迟期间的工作方式。
例如: ShowTypingMiddleware(0,2000)

延迟:发送第一个键入指示符之前的初始延迟
期限:发送其他打字指示符的速率

据我了解:

  • 延迟

    如果 Delay为0 ,则当漫游器即将向用户发送消息时,应该没有延迟,并且指示符应该在发送消息之前立即显示。

  • 期间

    [考虑使用键入的示例]

    例如,某人在写消息时暂停而不是再次键入? />是说这个人开始打字后要等待2000毫秒才能再次发出打字指示?

    [考虑 bot 示例]]

    机器人如何翻译?该漫游器不会 暂停
    Period指示器何时对机器人有效?

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

Messenger DirectLine 频道

是由于我误解了期间延迟而导致的吗?还是还有其他问题?

更新在GIF下方检查

(观看所有内容,大约50秒,请注意并非总是如此)

enter image description here

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我遇到了类似的问题。我尝试使用 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);

答案 2 :(得分:0)

  

据我了解:延迟如果“延迟”为0,则当机器人处于   即将发送消息给用户,应该没有延迟,并且   指示器应该在发送消息之前立即显示。

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

  

期间
   [考虑人物打字示例]   例如,这是某人在写消息时暂停而不是再次输入吗?这意味着人们开始打字后会等待2000毫秒,然后再次发出打字指示吗?

是的,但这是由channel + client(当然)控制的。

  

[考虑机器人示例]   机器人如何翻译?机器人不会暂停   周期指示器对漫游器有效吗?

机器人将在2秒钟后重新发送打字活动。它将继续执行此操作,直到发送消息活动为止。

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

  

我面临的主要问题是,该机器人不断显示输入内容   指示符即使在发送消息后也是如此所以用户一直在等待   这是在Messenger和DirectLine频道上发生的   因为我误解了期间和延迟而发生或存在   还有什么?

如果您要发送消息活动,则应停止键入活动。如果没有,那是不对的。如果您可以创建此问题的样本复制品,那么我想尝试看看是否可以自我复制。

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