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

適用対象: 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. [サイト] セクションに移動します。 通常、削除または名前変更を行わない限り、 Default_Site があります。
  7. [ リンクの表示 ] ボタン (目のアイコン) を選択して、いずれかのキーを表示します。をクリックし、その値をコピーして保存します。 この値は、「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# クライアントを作成する方法について説明します。

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

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

  3. クライアントを作成し、シークレットを使用してトークンを生成します。 この手順は、ボットで使用する必要があるエンドポイントを除き、他の 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 として表示されるシークレット値は、前に " [サイト] セクション" から保存した値です。
  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. これで、会話のトークンconversationIdとコールバックを使用して、プロパティで StreamingConversations WebSocket を開く準備ができましたReceiveActivities

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