C# 在MS Team Bot中管理长期运行的操作

C# 在MS Team Bot中管理长期运行的操作,c#,events,botframework,microsoft-teams,long-running-processes,C#,Events,Botframework,Microsoft Teams,Long Running Processes,我正在使用以下示例/文章来管理MS Team Bot中的一个长时间运行的操作 在步骤5中,将创建DirectLineClient,并使用PostActivityAsync将事件活动发送给Bot var responseActivity = new Activity("event"); responseActivity.Value = originalActivity; responseActivity.Name = "LongOperationRespon

我正在使用以下示例/文章来管理MS Team Bot中的一个长时间运行的操作

在步骤5中,将创建DirectLineClient,并使用PostActivityAsync将事件活动发送给Bot

 var responseActivity =  new Activity("event");
 responseActivity.Value = originalActivity;
 responseActivity.Name = "LongOperationResponse";
 responseActivity.From = new ChannelAccount("GenerateReport", "AzureFunction");
 var directLineSecret = Environment.GetEnvironmentVariable("DirectLineSecret");
 using(DirectLineClient client = new DirectLineClient(directLineSecret))
 {
    var conversation = await client.Conversations.StartConversationAsync();
    await client.Conversations.PostActivityAsync(conversation.ConversationId, responseActivity);
 }
但是,我需要上面的示例来为MS Team Bot而不是DirectLineClient工作

我使用了Microsoft.Bot.Connector.ConnectorClient,但StartconversationAsync和PostActivityAsync方法不可用。 我尝试了Microsoft.Bot.Connector.ConnectorClient中可用的方法

  • connectorClient.Conversations.CreateConversationAsync(conversationparameters)
  • connectorClient.ConversationsCreateDirectConversationAsync(botAccount、userAccount、(活动)newActivity)
  • connectorClient.Conversations.SendToConversationAsync(conversationid,(Activity)newActivity)
但所有方法都失败,请求错误,错误如响应中所示: {“错误”:{“代码”:“BadArgument”,“消息”:“未知活动类型”}

新建活动的创建如下所示:

var messagnewActivity = new Activity("event");
newActivity.Value = originalActivity;
newActivity.From = new ChannelAccount("GenerateReport", "AzureFunction");
newActivity.Type = "event";
newActivity.Conversation = new ConversationAccount {  Id = originalActivity.Conversation.Id  };
newActivity.ChannelId = originalActivity.ChannelId;
有人能建议我如何将活动(活动类型)传递给MS团队机器人吗

谢谢
Gagan

我对Direct Line不太熟悉,但我认为它实际上是团队的一种替代机器人类型,因此,如果您试图在团队内部实现这一点,它可以解释这个问题。原则上,基本思想非常简单:

  • 您以某种方式(例如,在内存或数据库中)存储状态,以指示用户正在执行长时间运行的操作
  • 当长时间运行的过程完成时,您的代码(可能存在于您的bot之外,例如,在Azure函数中)可以向用户发送一条消息,就像它是bot一样-这称为主动消息传递,您可以在网站上阅读有关它的更多信息

  • 我不太熟悉Direct Line,但我认为它是一种有效的团队机器人的替代类型,因此如果您试图在团队内部实现这一点,它可以解释这个问题。原则上,基本思想非常简单:

  • 您以某种方式(例如,在内存或数据库中)存储状态,以指示用户正在执行长时间运行的操作
  • 当长时间运行的过程完成时,您的代码(可能存在于您的bot之外,例如,在Azure函数中)可以向用户发送一条消息,就像它是bot一样-这称为主动消息传递,您可以在网站上阅读有关它的更多信息

  • 这是为了通知您,在调试代码时,我在代码中发现了一个调整,在此之前的某个时候我也遇到了同样的问题。当它递归调用两次时,活动Id与前一个相同。您可以检查活动id是否相同,然后返回请求,否则继续执行。

    这是为了通知您,在调试代码时,我在某个时候遇到了相同的问题。当它递归调用两次时,活动Id与前一个相同。您可以检查活动id是否相同,然后返回请求,否则请继续。

    感谢您分享信息。如果可能的话,你可以通过分享代码片段来帮助我确切地知道需要做什么。谢谢你分享信息。如果可能的话,你能通过分享一段代码片段来帮助我确切地知道需要做什么吗。