簡體   English   中英

在 MS Teams Bot 中管理長期運行的操作

[英]Manage a long-running operation in MS Teams Bot

我正在使用以下示例/文章來管理 MS Teams Bot 中的長時間運行的操作。

https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-long-operations-guidance?view=azure-bot-service-4.0

在第 5 步中,正在創建 DirectLineClient,並使用 PostActivityAsync 將 Event Activity 發送到 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 Teams Bot 而不是 DirectLineClient 工作。

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

  • connectorClient.Conversations.CreateConversationAsync(conversationparameters)
  • connectorClient.ConversationsCreateDirectConversationAsync(botAccount, userAccount, (Activity)newActivity);
  • connectorClient.Conversations.SendToConversationAsync(conversationid, (Activity)newActivity);

但是所有方法都因錯誤請求而失敗,錯誤如響應中所示:{"error":{"code":"BadArgument","message":"Unknown activity type"}}

newActivity 創建如下:

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 Teams Bot。

謝謝加根

我對 Direct Line 不是很熟悉,但我認為它實際上是 Teams 的一種替代類型的機器人,因此如果您嘗試在 Teams 內部執行此操作,它可以解釋問題。 原則上,基本思想很簡單:

  1. 您以某種方式存儲 state(例如在 memory 或數據庫中)以指示用戶正在進行長時間運行的操作
  2. 當長時間運行的過程完成后,您的代碼(可能位於您的機器人之外,例如在 Azure 函數中)可以向用戶發送一條消息,就像它是機器人一樣 - 這稱為主動消息傳遞,您可以閱讀更多在https://docs.microsoft.com/en-us/graph/teams-proactive-messaging關於它。

這是為了通知您,在此之前的某個時候我遇到了同樣的問題,然后我在調試時發現了代碼中的一個調整。 當它遞歸調用兩次時,Activity Id 與前一個相同。 您可以檢查活動 id 是否相同,然后返回請求,否則返回請求 go 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM