你好,我正在向每个回合发送这样的打字指示器。 它正在工作,但是有没有更好或更有效的方法呢? 我要发送几次,因为如果只发送一次,则打字指示将不会显示。
AddStep(async (stepContext, cancellationToken) =>
{
var typingMsg = stepContext.Context.Activity.CreateReply();
typingMsg.Type = ActivityTypes.Typing;
typingMsg.Text = null;
await stepContext.Context.SendActivityAsync(typingMsg);
await stepContext.Context.SendActivityAsync(typingMsg);
await stepContext.Context.SendActivityAsync(typingMsg);
await stepContext.Context.SendActivityAsync(typingMsg);
await stepContext.Context.SendActivityAsync(typingMsg);
await stepContext.Context.SendActivityAsync(MessageFactory.Text($"I have some important questions to ask you."), cancellationToken: cancellationToken);
await stepContext.Context.SendActivityAsync(MessageFactory.Text($"This will not take long."), cancellationToken: cancellationToken);
return await stepContext.NextAsync(cancellationToken: cancellationToken);
});
编辑:是否可以在要添加2秒打字指示器的转弯上执行此操作?因为有些转弯有很长的对话,我希望它感觉自然。我是否应该将其添加到所有具有而没有task.delay的地方?不会影响上一步结果的传递吗?
AddStep(async (stepContext, cancellationToken) =>
{
var typingMsg = stepContext.Context.Activity.CreateReply();
typingMsg.Type = ActivityTypes.Typing;
typingMsg.Text = null;
await stepContext.Context.SendActivityAsync(typingMsg);
await Task.Delay(2000);
await stepContext.Context.SendActivityAsync(MessageFactory.Text($"I have some important questions to ask you."), cancellationToken: cancellationToken);
await stepContext.Context.SendActivityAsync(MessageFactory.Text($"This will not take long."), cancellationToken: cancellationToken);
return await stepContext.NextAsync(cancellationToken: cancellationToken);
});
答案 0 :(得分:2)
您不必发送类似的多个打字活动。如果您上面包含的代码现在可以代表您的确切代码,那么您将不会真正看到打字指示符,因为您正在有效地发送一条消息,立即替换了该指示符。连续添加多个后可能会看到它的原因是,它会延迟清除最终发送第一条消息时发生的指示符。
要对此进行测试,只需还原为发送单个打字活动,然后通过放置await Task.Delay(3000);
来模拟一个小暂停来模拟完成工作所需的时间。这应该使客户端有时间在延迟结束之前显示键入指示符,然后您的消息就会通过发送。
更新
是的,如果您想在响应中引入某种自然的停顿,则等待Task::Delay
很好。我们已经看到一种模式是使用一块中间件来完成此任务,该中间件使用基于字符数的算法来合成延迟。
UPDATE2
我不知道我怎么忘了这个,但是实际上包装盒中有一个名为ShowTypingMiddleware
的中间件,其中包括基于响应活动之前转弯需要多长时间的类似功能。送出。我以为它只是作为示例在某处发布的,但是今天早上我才再次遇到它,并希望确保更新此答案。它与我上面描述的不完全相同,但是可能是某些人正在寻找的行为。