【发布时间】:2021-04-01 04:36:01
【问题描述】:
我正在从外部(即 Windows 窗体应用程序)向我的 MS Teams 聊天机器人发送关于现有对话的消息。
ChannelAccount userAccount = originalActivity.From;
ChannelAccount botAccount = new ChannelAccount("GenerateReport", "AzureFunction");
var message = new Activity();//Microsoft.Bot.Schema.Activity.CreateEventActivity();
message.Type = ActivityTypes.Message;
message.From = originalActivity.Recipient; //new ChannelAccount("GenerateReport", "AzureFunction");//botAccount;
message.Value = originalActivity;
((Activity)message).Text = "LongOperationResponse";
message.Recipient = originalActivity.From;// userAccount;
message.ChannelId = originalActivity.ChannelId;
message.Conversation = originalActivity.Conversation;
ResourceResponse response21= await connectorClient.Conversations.SendToConversationAsync((Activity)message);
消息活动发送成功,消息出现在聊天机器人对话中。
当 ma 团队聊天机器人收到上述消息时,我还想以某种方式捕获事件。 我在继承自 ActivityHandler 类的 DialogBot 类中附加了以下事件处理程序。
- OnMessageActivityAsync
- OnEventActivityAsync
- OnTurnAsync
但是,当使用上述逻辑从机器人外部发送消息时,上述事件处理程序都不会被触发。
这些事件处理程序仅在用户在聊天机器人中键入消息时触发。
当团队的聊天机器人收到外部消息时应该触发哪个事件以及如何处理该事件。
请帮忙。
谢谢 加根
【问题讨论】:
-
队外bot是什么意思?您如何将消息发送到机器人对话?您能否更详细地解释一下您的情况?
-
@Nikitha-MSFT 我正在使用以下文档 docs.microsoft.com/en-us/azure/bot-service/… 。在这里,一个长时间运行的任务被发送到 Azure Function,该函数在任务完成时向 Bot 发送 Activity 消息。
-
所以您正在使用代码发送消息。该消息是使用机器人代码发送的。仅当消息由用户而不是机器人发送时才会触发事件。这是设计使然。
-
@Wajeed-MSFT 是的,需要帮助。
-
@Nikitha-MSFT 是的,我正在发送消息,但不使用机器人代码,而是使用外部应用程序中的代码。 Message.From 设置为 Bot,Message.Recipient 是 My Teams AadObjectID,即 My Teams 帐户。我尝试反转 From 和 Recipient 但结果相同,即消息出现在 Teams 聊天机器人窗口中,但在机器人代码中没有触发任何事件。
标签: event-handling bots microsoft-teams botframework