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 秘密鍵を取得する
- ブラウザーで、Azure portal に移動します。
- Azure portal で、目的の Azure Bot リソースを見つけます。
- [設定] で [チャンネル] を選択します。
- Direct Line チャンネルがまだ有効になっていない場合は、選択して有効にします。
- 有効にした後、[チャンネル] から [Direct Line] を選択します。
- [サイト] セクションに移動します。 通常、削除または名前を変更していない限り、「既定のサイト」があります。
- [リンクを表示] ボタン (目のアイコン) を選択していずれかのキーを表示し、その値をコピーして保存します。 この値は、「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# クライアントを作成する方法について説明します。
Visual Studio で、新しい .NET Core コンソール アプリケーション プロジェクトを作成します。
GitHub リポジトリから Direct Line クライアントを複製し、これをプロジェクトに含めます。
クライアントを作成し、シークレットを使用してトークンを生成します。 この手順は、次に示すように .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 として表示されるシークレット値は、前に "[サイト] セクション" から保存した値です。
トークンの生成から会話の参照を取得したら、この会話 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}"); } } } }
これで、会話のトークン、
conversationId
とReceiveActivities
コールバックを使用してStreamingConversations
プロパティで WebSocket を開く準備ができました。var client = new DirectLineClient( new Uri(endpoint), new DirectLineClientCredentials(conversation.Token)); await client.StreamingConversations.ConnectAsync( conversation.ConversationId, ReceiveActivities);
これで、クライアントを使用して会話を開始し、
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(); }