使用SDK V4 中的ShowTypingMiddleware,有人可以在真实示例中进一步说明延迟和期间的工作方式。
例如: ShowTypingMiddleware(0,2000)
延迟:发送第一个键入指示符之前的初始延迟
期限:发送其他打字指示符的速率
据我了解:
延迟
如果 Delay为0 ,则当漫游器即将向用户发送消息时,应该没有延迟,并且指示符应该在发送消息之前立即显示。
期间
[考虑使用键入的示例]
例如,某人在写消息时暂停而不是再次键入? />是说这个人开始打字后要等待2000毫秒才能再次发出打字指示?
[考虑 bot 示例]]
机器人如何翻译?该漫游器不会 暂停
Period指示器何时对机器人有效?
我面临的主要问题是,即使在发送消息后,该机器人仍会继续显示打字指示。因此,用户一直在等待
Messenger 和 DirectLine 频道
是由于我误解了期间和延迟而导致的吗?还是还有其他问题?
答案 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)
我遇到了类似的问题。我尝试使用 ShowTypingMiddleware
和 CustomShowTypingMiddleware
但它们没有按预期工作。该消息是在显示打字指示符之前和之后发送的。也就是说,机器人结束发送两次相同的消息(在显示输入指示器之前和显示输入指示器之后)。
我能够使用在 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的更多信息。