共用方式為


建立 .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 秘密金鑰

  1. 在瀏覽器中,移至 Azure 入口網站
  2. 在Azure 入口網站中,找出您的 Azure Bot 資源。
  3. 選取 [設定 ] 底下的 [通道 ]。
  4. 如果尚未啟用,請選取 Direct Line 通道加以啟用。
  5. 啟用後,從 通道 選取 [直接線路 ]。
  6. 移至 [ 網站] 區段。 除非您已刪除或重新命名Default_Site
  7. 選取 [ 顯示連結 ] 按鈕(眼睛圖示)以顯示其中一個金鑰,然後複製並儲存其值。 您將在建立 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 互動。

  1. 在 Visual Studio 中,建立新的 .NET Core 主控台應用程式專案。

  2. 從 GitHub 存放 庫複製 Direct Line 用戶端 ,並將其包含在您的專案中。

  3. 建立用戶端並使用秘密產生權杖。 此步驟與建置任何其他 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所示 的秘密值是您稍早從 [網站] 區段 儲存的值。
  4. 產生權杖的交談參考之後,您就可以使用此交談識別碼來開啟 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}");
                }
            }
        }
    }
    
  5. 現在您已準備好使用交談的權杖和 conversationIdReceiveActivities 呼,在 屬性上 StreamingConversations 開啟 WebSocket:

    var client = new DirectLineClient(
        new Uri(endpoint),
        new DirectLineClientCredentials(conversation.Token));
    
    await client.StreamingConversations.ConnectAsync(
        conversation.ConversationId,
        ReceiveActivities);
    
  6. 用戶端現在可以用來啟動交談並傳送 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();
    }