Direct Line App Service 확장에 연결할 .NET 클라이언트 만들기Create .NET Client to Connect to Direct Line App Service Extension

적용 대상: SDK v4APPLIES TO: SDK v4

이 문서에서는 C#에서 Direct Line App Service 확장에 연결하는 .NET 클라이언트를 만드는 방법을 설명합니다.This article describes how to create a .NET client in C# which connects to the direct line app service extension. 확장을 위한 .NET 봇 구성 관련 문서도 참조하세요.Please, also read this companion article Configure .NET bot for extension.

직접 선 비밀 키 가져오기Get Direct Line secret key

  1. 브라우저에서 Azure Portal로 이동합니다.In your browser, navigate to the Azure portal

  2. Azure Portal에서 Azure Bot Service 리소스를 찾습니다.In the Azure portal, locate your Azure Bot Service resource

  3. 채널 을 클릭 하 여 봇의 채널을 구성 합니다.Click on Channels to configure the bot's channels

  4. 아직 활성화하지 않은 경우 Direct Line 채널을 클릭하여 활성화합니다.If it is not already enabled, click on the Direct Line channel to enable it.

  5. 이미 활성화된 경우 [채널에 연결] 테이블에서 Direct Line 행에 있는 편집 링크를 클릭합니다.If it is already enabled, in the Connect to channels table click on the Edit link on the Direct Line row.

  6. 사이트 섹션으로 스크롤합니다.Scroll to the Sites section. 기본 사이트를 삭제하거나 이름을 바꾸지 않는 한, 일반적으로 기본 사이트가 있습니다.There is typically a Default Site unless you have deleted or renamed it.

  7. 링크 표시 를 클릭하여 키 중 하나를 표시한 다음, 해당 값을 복사하여 저장합니다.Click on the Show link to reveal one of the keys, then copy and save its value. C # Direct Line 클라이언트 만들기섹션에서이 값을 사용 합니다.You will use this value in the section Create a C# Direct Line Client.

    App Service 확장 키

참고

이 값은 Direct Line App Service 확장에 연결하는 데 사용되는 Direct Line 클라이언트 비밀입니다.This value is your direct line client secret used to connect to direct line app service extension. 원하는 경우 추가 사이트를 만들고 해당 비밀 값도 사용할 수 있습니다.You can create additional sites if you'd like and use those secret values as well.

Preview NuGet 패키지 원본 추가Add the preview NuGet package source

C# Direct Line 클라이언트를 만드는 데 필요한 미리 보기 NuGet 패키지는 NuGet 피드에서 찾을 수 있습니다.The preview NuGet packages needed to create a C# Direct line client can be found in a NuGet feed.

  1. Visual Studio에서 도구->옵션 메뉴 항목으로 이동합니다.In Visual Studio navigate to the Tools->Options menu item.
  2. NuGet 패키지 관리자->패키지 원본 항목을 선택합니다.Select the NuGet Package Manager->Package Sources item.
  3. + 단추를 클릭하여 다음 값으로 새 패키지 원본을 추가합니다.Click on the + button to add a new package source with these values:
  4. 업데이트 단추를 클릭하여 값을 저장합니다.Click on the Update button to save the values.
  5. 확인 을 클릭하여 패키지 원본 구성을 종료합니다.Click OK to exit the Package Sources configuration.

C # Direct Line 클라이언트 만들기Create a C# Direct Line client

대부분의 통신이 WebSocket 을 통해 수행되므로 Direct Line App Service 확장과의 상호 작용은 기존 Direct Line과 다르게 수행됩니다.Interactions with the direct line app service extension happen differently than traditional Direct Line because most communication happens over a WebSocket. 업데이트된 Direct Line 클라이언트에는 WebSocket 을 열고 닫고, WebSocket을 통해 명령을 보내고, 봇으로부터 다시 작업을 수신하는 데 사용되는 도우미 클래스가 포함되어 있습니다.The updated direct line client includes helper classes for opening and closing a WebSocket, sending commands through the WebSocket, and receiving Activities back from the bot. 이 섹션에서는 봇과 상호 작용하는 간단한 C# 클라이언트를 만드는 방법을 설명합니다.This section describes how to create a simple C# client to interact with a bot.

  1. Visual Studio에서 새 .NET Core 2.2 콘솔 응용 프로그램 프로젝트를 만듭니다.In Visual Studio, create a new .NET Core 2.2 console application project.

  2. 프로젝트에 DirectLine 클라이언트 NuGet 을 추가합니다.Add the DirectLine client NuGet to your project

  3. 클라이언트를 만들고 비밀을 사용하여 토큰을 생성합니다.Create a client and generate a token using a secret. 이 단계는 다음과 같이 봇에 사용해야 하는 엔드포인트를 제외하면 다른 C# Direct Line 클라이언트를 빌드하는 단계와 동일합니다. .bot/ 경로가 추가되었습니다.This step is the same as building any other C# Direct Line client except the endpoint you need use in your bot,appended with the .bot/ path as shown next. 맨 뒤에 / 를 붙이는 것을 잊지 마세요.Do not forget the ending /.

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

    다음을 확인합니다.Notice the following:

    • 엔드포인트 값은 봇을 Azure에 배포할 때 얻은 봇 URL입니다.The endpoint value is the bot URL you obtained when you deployed the bot to Azure. 자세한 내용은 확장을 위한 .NET 봇 구성을 참조하세요.For more information, see Configure .NET bot for extension.
    • YOUR_BOT_SECRET 으로 표시된 비밀 값은 이전에 사이트 섹션 에서 저장한 값입니다.The secret value shown as YOUR_BOT_SECRET is the value you saved earlier from the sites section.
  4. 토큰을 생성하는 대화 참조가 있으면 이 대화 ID를 사용하여 DirectLineClient의 새 StreamingConversations 속성에서 WebSocket을 열 수 있습니다.Once you have a conversation reference from generating a token, you can use this conversation ID to open a WebSocket with the new StreamingConversations property on the DirectLineClient. 이렇게 하려면 봇이 클라이언트에 ActivitySets를 보내려 할 때 호출되는 콜백을 만들어야 합니다.To do this you need to create a callback that will be invoked when the bot wants to send ActivitySets to the client:

    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. 이제 StreamingConversations 대화의 토큰, 및 콜백을 사용 하 여 속성에 대해 WebSocket을 열 준비가 되었습니다 conversationId ReceiveActivities .Now you are ready to open the WebSocket on the StreamingConversations property using the conversation's token, conversationId, and your ReceiveActivities callback:

    var client = new DirectLineClient(
        new Uri(endpoint),
        new DirectLineClientCredentials(conversation.Token));
    
    await client.StreamingConversations.ConnectAsync(
        conversation.ConversationId,
        ReceiveActivities);
    
  6. 이제 클라이언트를 사용하여 대화를 시작하고 봇에 Activities를 보낼 수 있습니다.The client can now be used to start a conversation and send Activities to the 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();
    }