Direct Line App Service 拡張機能に接続する .NET クライアントを作成する

2023 年 9 月 1 日から、ネットワークの分離に Azure サービス タグ メソッドを使用することを強くお勧めします。 DL-ASE の稼働率は、非常に具体的なシナリオに限定する必要があります。 運用環境でこのソリューションを実装する前に、サポート チームに相談してガイダンスを受けることをお勧めします。

この記事の対象: SDK v4

この記事では、Direct Line App Service 拡張機能に接続する .NET クライアントを C# で作成する方法について説明します。 また、「拡張機能のための .NET ボットの構成」という関連記事もお読みください。

前提条件

  • Azure アカウント。
  • Azure portal にデプロイされたボット。

Direct Line 秘密鍵を取得する

  1. ブラウザーで、Azure portal に移動します。
  2. Azure portal で、目的の Azure Bot リソースを見つけます。
  3. [設定] で [チャンネル] を選択します。
  4. Direct Line チャンネルがまだ有効になっていない場合は、選択して有効にします。
  5. 有効にした後、[チャンネル] から [Direct Line] を選択します。
  6. [サイト] セクションに移動します。 通常、削除または名前を変更していない限り、「既定のサイト」があります。
  7. [リンクを表示] ボタン (目のアイコン) を選択していずれかのキーを表示し、その値をコピーして保存します。 この値は、「C# Direct Line クライアントの作成」セクションで使用します。

Note

この値は、Direct Line App Service 拡張機能に接続するために使用される Direct Line クライアント シークレットです。 必要に応じて追加のサイトを作成でき、それらのシークレット値も使用できます。

C# Direct Line クライアントを作成する

Direct Line App Service 拡張機能との対話は、従来の Direct Line とは異なる方法で行われます。これは、ほとんどの通信が WebSocket で行われるためです。 更新された Direct Line クライアントには、WebSocket の開始/終了、WebSocket 経由でのコマンドの送信、およびボットから返される Activity の受信のためのヘルパー クラスが含まれています。 このセクションでは、ボットと対話するための単純な C# クライアントを作成する方法について説明します。

  1. Visual Studio で、新しい .NET Core コンソール アプリケーション プロジェクトを作成します。

  2. GitHub リポジトリから Direct Line クライアントを複製し、これをプロジェクトに含めます。

  3. クライアントを作成し、シークレットを使用してトークンを生成します。 この手順は、次に示すように .bot/ パスが付加された、ボットで使用する必要があるエンドポイントを除き、他のあらゆる C# Direct Line クライアントの構築と同じです。 末尾の / を忘れないでください。

    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();
    

    次に注意してください。

    • エンドポイント値は、ボットを Azure にデプロイしたときに取得したボットの URL です。 詳細については、「拡張機能のための .NET ボットの構成」を参照してください。
    • YOUR_BOT_SECRET として表示されるシークレット値は、前に "[サイト] セクション" から保存した値です。
  4. トークンの生成から会話の参照を取得したら、この会話 ID を使用して、DirectLineClient の新しい StreamingConversations プロパティで WebSocket を開くことができます。 これを行うには、ボットが 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 をボットに送信できるようになりました。

    
    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();
    }