拡張機能に接続する .NET クライアントDirect Line App Service作成する
適用対象: SDK v4
この記事では、Direct Line App Service拡張機能に接続する .NET クライアントを C# で作成する方法について説明します。 また、「拡張機能のための .NET ボットの構成」という関連記事もお読みください。
前提条件
- Azure アカウント。
- Azure portal にデプロイされたボット。
Direct Lineシークレット キーを取得する
- ブラウザーで、Azure portal に移動します。
- Azure portalで、Azure Bot リソースを見つけます。
- [設定] で [チャネル] を選択します。
- まだ有効になっていない場合は、Direct Line チャネルを選択して有効にします。
- 有効にした後、チャネルからDirect Lineを選択します。
- [サイト] セクションに移動します。 通常、削除または名前変更を行わない限り、 Default_Site があります。
- [ リンクの表示 ] ボタン (目のアイコン) を選択して、いずれかのキーを表示します。をクリックし、その値をコピーして保存します。 この値は、「C# Direct Line クライアントの作成」セクションで使用します。
Note
この値は、Direct Line App Service拡張機能への接続に使用されるDirect Lineクライアント シークレットです。 これらのシークレット値を使用する場合は、追加のサイトを作成することもできます。
C# Direct Line クライアントを作成する
ほとんどの通信は WebSocket 経由で行われるため、Direct Line App Service拡張機能との対話は従来のDirect Lineとは異なります。 更新されたDirect Line クライアントには、WebSocket を開いたり閉じたり、WebSocket を介してコマンドを送信したり、ボットからアクティビティを受信したりするためのヘルパー クラスが含まれています。 このセクションでは、ボットと対話するための単純な C# クライアントを作成する方法について説明します。
Visual Studio で、新しい .NET Core コンソール アプリケーション プロジェクトを作成します。
Direct Line クライアントを GitHub リポジトリから複製し、プロジェクトに含めます。
クライアントを作成し、シークレットを使用してトークンを生成します。 この手順は、ボットで使用する必要があるエンドポイントを除き、他の C# Direct Line クライアントを構築する場合と同じです。次に示すように、.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();
次に注意してください。
- エンドポイント値は、ボットを 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
とコールバックを使用して、プロパティでStreamingConversations
WebSocket を開く準備ができましたReceiveActivities
。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(); }