我想在使用 Bot Framework SDK 为 Teams 中的机器人发送任何消息之前添加 "typing" 指示符
I want to add "typing" indicator before any message is being sent for bot in Teams using Bot Framework SDK
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
await turnContext.SendActivityAsync(MessageFactory.Text($"Welcome"));
我想在为 Teams 中的机器人发送欢迎之前添加 "typing" 指示符。
使用 BotFramework。
但是,我的机器人发送的每条消息之前都没有"typing",只是在几秒钟后出现。
如何在 C# 中实现?
添加到您的Startup.cs
services.AddSingleton<ShowTypingMiddleware>();
那么你的AdapterWithErrorHandler.cs
public AdapterWithErrorHandler(ShowTypingMiddleware showTypingMiddleware)
: base(configuration, logger)
{
...
Use(showTypingMiddleware);
...
}
@GiangNguyen 的回答是部分回答;如果您想在 每条 消息之前发送打字活动,您应该使用 ShowTypingMiddleware。我说这只是部分答案,因为我不相信这实际上适用于欢迎消息。
首先,快速说明一下 Teams 频道上的欢迎消息。他们是一个巨大的痛苦来测试。团队将用户与机器人的交互与机器人的 appId
联系起来,因此用户只能从机器人那里收到一次欢迎消息——他们是否隐藏或删除对话或机器人并不重要——他们只会收到欢迎消息 一次。为了测试而绕过这个问题,您有几个选择:
- 每次要测试这个时都创建一个新的App Registration(因为它会生成一个新的AppId),或者
- 在
OnMessageAsync
中放置一些逻辑,调用您在 OnMembersAddedAsync()
中使用的相同代码。例如,如果您键入 "test welcome message",它将调用您在 OnMembersAddedAsync()
(...if (turnContext.Activity.Text === "test welcome message"...
) 中使用的相同代码,就像发送您实际的欢迎消息一样。使用它进行测试,然后您可以将其移除以进行生产。我推荐这种方法。
因此,使用 ShowTypingMiddleware 时不会为欢迎消息输入 activity 的原因是因为中间件仅在机器人收到消息时触发,而欢迎消息通常不会发生这种情况.相反,您需要手动发送输入 activity:
var typing = new Activity() { Type = ActivityTypes.Typing };
await turnContext.SendActivityAsync(typing);
话虽这么说,一些 channels/clients 与 ShowTypingMiddleware 斗争。如果您正在寻求故障排除方面的帮助并且此答案不适用,请告诉我您正在使用什么 channel/client 以及您使用什么代码来发送输入指示器,我会看看我是否仍然可以帮助。
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
await turnContext.SendActivityAsync(MessageFactory.Text($"Welcome"));
我想在为 Teams 中的机器人发送欢迎之前添加 "typing" 指示符。 使用 BotFramework。
但是,我的机器人发送的每条消息之前都没有"typing",只是在几秒钟后出现。
如何在 C# 中实现?
添加到您的Startup.cs
services.AddSingleton<ShowTypingMiddleware>();
那么你的AdapterWithErrorHandler.cs
public AdapterWithErrorHandler(ShowTypingMiddleware showTypingMiddleware)
: base(configuration, logger)
{
...
Use(showTypingMiddleware);
...
}
@GiangNguyen 的回答是部分回答;如果您想在 每条 消息之前发送打字活动,您应该使用 ShowTypingMiddleware。我说这只是部分答案,因为我不相信这实际上适用于欢迎消息。
首先,快速说明一下 Teams 频道上的欢迎消息。他们是一个巨大的痛苦来测试。团队将用户与机器人的交互与机器人的 appId
联系起来,因此用户只能从机器人那里收到一次欢迎消息——他们是否隐藏或删除对话或机器人并不重要——他们只会收到欢迎消息 一次。为了测试而绕过这个问题,您有几个选择:
- 每次要测试这个时都创建一个新的App Registration(因为它会生成一个新的AppId),或者
- 在
OnMessageAsync
中放置一些逻辑,调用您在OnMembersAddedAsync()
中使用的相同代码。例如,如果您键入 "test welcome message",它将调用您在OnMembersAddedAsync()
(...if (turnContext.Activity.Text === "test welcome message"...
) 中使用的相同代码,就像发送您实际的欢迎消息一样。使用它进行测试,然后您可以将其移除以进行生产。我推荐这种方法。
因此,使用 ShowTypingMiddleware 时不会为欢迎消息输入 activity 的原因是因为中间件仅在机器人收到消息时触发,而欢迎消息通常不会发生这种情况.相反,您需要手动发送输入 activity:
var typing = new Activity() { Type = ActivityTypes.Typing };
await turnContext.SendActivityAsync(typing);
话虽这么说,一些 channels/clients 与 ShowTypingMiddleware 斗争。如果您正在寻求故障排除方面的帮助并且此答案不适用,请告诉我您正在使用什么 channel/client 以及您使用什么代码来发送输入指示器,我会看看我是否仍然可以帮助。