將專員發佈到 Azure Bot Service 個頻道
您可以將專員連線到現有的 Azure Bot Service 頻道 ,如果您想將專員連線給 Azure Bot Service 頻道上的最終使用者,這會很有説明。
將專員添加到 Azure Bot Service 頻道需要大量的開發人員專業知識。 本文是為具備開發和撰寫程式碼的 IT 系統管理員或開發人員所撰寫。
提示
您無需跟隨此文件即可將您的專員添加到您的 Copilot Studio 網站, Facebook或 Microsoft Teams。 如果您的目標是連線自定義的基於 Web 的應用程式或本機應用程式,您的開發人員可以在將專員發佈到移動或自定義應用程式中 瞭解更多資訊。
重要
本節中的指示需要由您或您的開發人員進行軟體開發。 它適用於有經驗的 IT 專業人員,例如 IT 系統管理員或開發人員,他們深刻了解開發人員工具、公用程式及 IDE。
先決條件
- Azure Bot Service 訂閱。
- 使用 v4 SDK 的 Azure Bot Service 機器人。
- .NET Core SDK 版本 2.1。
- Nuget 套件 Microsoft.Bot.Connector.DirectLine。
- 創建 Copilot Studio 了一個專員,您希望連線 Azure Bot Service 頻道。
- 將專員發佈到行動裝置或自訂應用程式。
程式碼範例
本文所用的程式碼片段來自於中繼機器人範例程式碼。
推薦人
本文中的指示參考了以下文件:
- 將您的機器人部署至 Azure,取得部署 Azure Bot Service 機器人的指示。
- Azure Bot Service 管道,以連接至任何 Azure Bot Service 支援的管道。
- 使用模擬器進行 Azure Bot Service 偵錯,以取得偵錯 Azure Bot Service 機器人的指示。
建立或使用現有的 Azure Bot Service 機器人
您需要一個 Azure Bot Service 機器人,它可以在您的專員和 Azure Bot Service 頻道之間 Copilot Studio 中繼對話。
如果您不具備現有的 Azure Bot Service 機器人,中繼機器人範例程式碼是一個好起點。 它是由 Microsoft Bot Framework 機器人範例程式碼所建置,可以編譯並部署至 Azure Bot Service。 範例程式碼是用做為起始點,而不是要直接用於生產中。 您需要新增程式碼和最佳化來滿足您的業務需求。
如果您已經有 Azure Bot Service 機器人,則需要新增 Copilot Studio 連接器和程式碼,才能管理交談工作階段。 然後,您可以將機器人部署至 Azure Bot Service,並使用 Azure 入口網站連接至管道。
獲取 # Copilot Studio 專員參數
要連線您構建的 Copilot Studio 專員,您需要檢索專員的名稱和令牌端點。
複製你的專員的名字 Copilot Studio。
在導覽功能表的設定底下,選取管道。
選取您要連接的管道。 此案例使用 Slack 做為範例。
若要複製並儲存權杖端點值,請選取複製。 您需要端點將您的專員連線到 Azure Bot Service 頻道。
使用 your Copilot Studio # 管理對話工作階段專員
Azure Bot Service 頻道與 Direct Line 與 your Copilot Studio 專員的連接之間可以有多個對話。
您的 Azure Bot Service 機器人需要映射和中繼從 Azure Bot Service 頻道到 Direct Line 與專員頻道的 Copilot Studio 對話,反之亦然。
範例程式碼
下列範例使用中繼機器人範例程式碼中的範例。
在每次新的外部 Azure Bot Service 頻道對話開始時,開始 # Copilot Studio 專員對話。 請參閱獲取 Direct Line 令牌 和 用於 Direct Line 與專員 通信有關開始與機器人的新對話的說明。
using (var httpRequest = new HttpRequestMessage()) { httpRequest.Method = HttpMethod.Get; UriBuilder uriBuilder = new UriBuilder(TokenEndPoint); httpRequest.RequestUri = uriBuilder.Uri; using (var response = await s_httpClient.SendAsync(httpRequest)) { var responseString = await response.Content.ReadAsStringAsync(); string token = SafeJsonConvert.DeserializeObject<DirectLineToken>(responseString).Token; } } /// <summary> /// class for serialization/deserialization DirectLineToken /// </summary> public class DirectLineToken { public string Token { get; set; } }
// Use the retrieved token to create a DirectLineClient instance using (var directLineClient = new DirectLineClient(token)) { var conversation = await directLineClient.Conversations.StartConversationAsync(); string conversationtId = conversation.ConversationId; }
要管理多個會話,您需要維護外部 Azure Bot Service 頻道對話到相應的 Copilot Studio 專員對話的對應。 A Copilot Studio 專員對話可以與兩個屬性
ConversationtId
Token
and.Dictionary<string, PowerVirtualAgentsConversation> ConversationRouter = new Dictionary<string, PowerVirtualAgentsConversation>();
若要管理交談生命週期,請重新整理 Direct Line 權杖或清除已閒置交談。 如需深入了解權仗重新整理的資訊,請移至重新整理 Direct Line 權杖。 支援刷新 Copilot Studio 權杖的 A Direct Line 專員對話定義如下:
/// <summary> /// Data model class for Copilot Studio agent conversation /// </summary> public class PowerVirtualAgentsConversation { public string ConversationtId { get; set; } // The Copilot Studio agent conversation ID retrieved from step 1 public string Token { get; set; } // The DirectLine token retrieved from step 1 public string WaterMark { get; set; } // Identify turn in a conversation public DateTime LastTokenRefreshTime { get; set; } = DateTime.Now; // Timestamp of last token refresh public DateTime LastConversationUpdateTime { get; set; } = DateTime.Now; // Timestamp of last active user message sent to agent }
當 new Copilot Studio 專員對話開始時,將鍵值對 (
external_Azure_Bot_Service_channel_conversationID
,PowerVirtualAgentsConversation
) 添加到對應表中。// After new Copilot Studio agent conversation starts ConversationRouter[external_Azure_Bot_Service_channel_conversationID] = new PowerVirtualAgentsConversation() { Token = token, ConversationtId = conversationId, WaterMark = null, LastConversationUpdateTime = DateTime.Now, LastTokenRefreshTime = DateTime.Now, };
要繼續現有對話,請在收到新的外部 Azure Bot Service 頻道消息後,從對應表中檢索現有對話,將外部對話活動中繼到 your Copilot Studio 專員,然後獲取回覆。
下列範例透過覆寫 ActivityHandler.OnMessageActivityAsync((ITurnContext<IMessageActivity>, CancellationToken) 方法來顯示中繼交談
// Invoked when a message activity is received from the user // Send the user message to Copilot Studio agent and get response protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken) { // Retrieve agent conversation from mapping table // If not exists for the given external conversation ID, start a new Copilot Studio agent conversation ConversationRouter.TryGetValue(externalCID, out PowerVirtualAgentsConversation currentConversation) ? currentConversation : /*await StartBotConversationAsync(externalCID)*/; // Create DirectLine client with the token associated to current conversation DirectLineClient client = new DirectLineClient(currentConversation.Token); // Send user message using directlineClient await client.Conversations.PostActivityAsync(currentConversation.ConversationtId, new DirectLineActivity() { Type = DirectLineActivityTypes.Message, From = new ChannelAccount { Id = turnContext.Activity.From.Id, Name = turnContext.Activity.From.Name }, Text = turnContext.Activity.Text, TextFormat = turnContext.Activity.TextFormat, Locale = turnContext.Activity.Locale, }); // Update LastConversationUpdateTime for session management currentConversation.LastConversationUpdateTime = DateTime.Now; }
有關如何獲取 專員的回覆,請參閱 Direct Line 使用 與專員 Copilot Studio 通信。 Copilot Studio 收到專員的回覆后,請參閱 解析專員 中的對話有效負載,瞭解如何將回覆解析到外部 Azure Bot Service 通道回覆。
您可以在中繼機器人範例程式碼 ResponseConverter.cs 中找到回覆剖析範例。
部署至 Azure Bot Service
在您將 Azure Bot Service 中繼機器人準備好之後,您需要將機器人部署到 Azure Bot Service。
設定 Azure Bot Service 管道
可以透過登入 Azure 入口網站並選擇部署到的 Azure Bot Service 資源群組,來設定要連線的管道。 查看 Azure Bot Service 管道上每個管道的特定指示。