建立 .NET 用戶端以連線至 Direct Line App Service 擴充功能
從 2023 年 9 月 1 日起,強烈建議採用 Azure 服務標籤 方法來隔離網路。 DL-ASE 的使用率應僅限於高度特定的案例。 在生產環境中實作此解決方案之前,建議您諮詢您的支援小組以取得指引。
適用于: SDK v4
本文說明如何在 C# 中建立 .NET 用戶端,以連線到 Direct Line App Service 延伸模組。 另請閱讀此隨附文章 設定 .NET Bot 以取得延伸模組 。
必要條件
- Azure 帳戶。
- 部署至 Azure 入口 網站的 Bot。
取得 Direct Line 秘密金鑰
- 在瀏覽器中,移至 Azure 入口網站。
- 在Azure 入口網站中,找出您的 Azure Bot 資源。
- 選取 [設定 ] 底下的 [通道 ]。
- 如果尚未啟用,請選取 Direct Line 通道加以啟用。
- 啟用後,從 通道 選取 [直接線路 ]。
- 移至 [ 網站] 區段。 除非您已刪除或重新命名Default_Site 。
- 選取 [ 顯示連結 ] 按鈕(眼睛圖示)以顯示其中一個金鑰,然後複製並儲存其值。 您將在建立 C# Direct Line 用戶端 一節 中使用此值。
注意
此值是您用來連線到 Direct Line App Service 延伸模組的 Direct Line 用戶端密碼。 如果您想要並使用這些秘密值,也可以建立其他網站。
建立 C# Direct Line 用戶端
與 Direct Line App Service 延伸模組的互動方式與傳統 Direct Line 不同,因為大部分的通訊都是透過 WebSocket 進行。 更新的 Direct Line 用戶端包含協助程式類別,可用來開啟和關閉 WebSocket、透過 WebSocket 傳送命令,以及從 Bot 接收活動。 本節說明如何建立簡單的 C# 用戶端來與 Bot 互動。
在 Visual Studio 中,建立新的 .NET Core 主控台應用程式專案。
從 GitHub 存放 庫複製 Direct Line 用戶端 ,並將其包含在您的專案中。
建立用戶端並使用秘密產生權杖。 此步驟與建置任何其他 C# Direct Line 用戶端相同,但您需要在 Bot 中使用的端點,並附加 .bot/ 路徑,如下所示。 別忘了結尾 / 。
string endpoint = "https://<your_bot_name>.azurewebsites.net/.bot/"; string secret = "<your_bot_direct_line_secret_key>"; var tokenClient = new DirectLineClient( new Uri(endpoint), new DirectLineClientCredentials(secret)); var conversation = await tokenClient.Tokens.GenerateTokenForNewConversationAsync();
請注意:
- 端點值是您將 Bot 部署至 Azure 時取得的 Bot URL。 如需詳細資訊,請參閱 設定 .NET Bot 以取得擴充功能 。
- YOUR_BOT_SECRET所示 的秘密值是您稍早從 [網站] 區段 儲存的值。
產生權杖的交談參考之後,您就可以使用此交談識別碼來開啟 WebSocket,並在 上開啟具有新
StreamingConversations
屬性的DirectLineClient
WebSocket。 若要這樣做,您必須建立要在 Bot 傳送至用戶端時叫ActivitySets
用的回呼:public static void ReceiveActivities(ActivitySet activitySet) { if (activitySet != null) { foreach (var a in activitySet.Activities) { if (a.Type == ActivityTypes.Message && a.From.Id.Contains("bot")) { Console.WriteLine($"<Bot>: {a.Text}"); } } } }
現在您已準備好使用交談的權杖和
conversationId
回ReceiveActivities
呼,在 屬性上StreamingConversations
開啟 WebSocket:var client = new DirectLineClient( new Uri(endpoint), new DirectLineClientCredentials(conversation.Token)); await client.StreamingConversations.ConnectAsync( conversation.ConversationId, ReceiveActivities);
用戶端現在可以用來啟動交談並傳送
Activities
至 Bot:var startConversation = await client.StreamingConversations.StartConversationAsync(); var from = new ChannelAccount() { Id = "123", Name = "Fred" }; var message = Console.ReadLine(); while (message != "end") { try { var response = await client.StreamingConversations.PostActivityAsync( startConversation.ConversationId, new Activity() { Type = "message", Text = message, From = from }); } catch (OperationException ex) { Console.WriteLine( $"OperationException when calling PostActivityAsync: ({ex.StatusCode})"); } message = Console.ReadLine(); }