Creación de un cliente de .NET para conectarse a la extensión de App Service para Direct LineCreate .NET Client to Connect to Direct Line App Service Extension

se aplica a: SDK V4APPLIES TO: SDK v4

En este artículo se describe cómo crear un cliente de .NET en C# que se conecta a la extensión de App Service para Direct Line.This article describes how to create a .NET client in C# which connects to the direct line app service extension. Consulte también el artículo complementario Configuración del bot de .NET para la extensión.Please, also read this companion article Configure .NET bot for extension.

Obtener clave secreta de línea directaGet Direct Line secret key

  1. En el explorador, vaya a Azure Portal.In your browser, navigate to the Azure portal

  2. En Azure Portal, busque el recurso de Azure Bot Service.In the Azure portal, locate your Azure Bot Service resource

  3. Haga clic en canales para configurar los canales del bot.Click on Channels to configure the bot's channels

  4. Si aún no está habilitado, haga clic en el canal de Direct Line para habilitarlo.If it is not already enabled, click on the Direct Line channel to enable it.

  5. Si ya está habilitado, en la tabla Conectar a canales, haga clic en el vínculo Editar en la fila de Direct Line.If it is already enabled, in the Connect to channels table click on the Edit link on the Direct Line row.

  6. Desplácese a la sección Sitios.Scroll to the Sites section. Normalmente, hay un Sitio predeterminado a menos que se haya eliminado o cambiado de nombre.There is typically a Default Site unless you have deleted or renamed it.

  7. Haga clic en el vínculo Mostrar para mostrar una de las claves y, a continuación, copie y guarde su valor.Click on the Show link to reveal one of the keys, then copy and save its value. Usará este valor en la sección creación de un cliente de línea de C#.You will use this value in the section Create a C# Direct Line Client.

    Claves de la extensión de App Service

Nota

Este valor es el secreto de cliente de Direct Line que se usa para conectarse a la extensión de App Service para Direct Line.This value is your direct line client secret used to connect to direct line app service extension. Puede crear sitios adicionales si lo desea y usar también esos valores de secreto.You can create additional sites if you'd like and use those secret values as well.

Agregar el origen del paquete NuGet de la versión preliminarAdd the preview NuGet package source

Los paquetes de NuGet de la versión preliminar necesarios para crear un cliente de Direct Line en C# se pueden encontrar en una fuente de NuGet.The preview NuGet packages needed to create a C# Direct line client can be found in a NuGet feed.

  1. En Visual Studio, vaya al elemento de menú Herramientas->Opciones.In Visual Studio navigate to the Tools->Options menu item.
  2. Seleccione el elemento Administrador de paquetes de NuGet->Orígenes del paquete.Select the NuGet Package Manager->Package Sources item.
  3. Haga clic en el botón + para agregar un nuevo origen del paquete con estos valores:Click on the + button to add a new package source with these values:
  4. Haga clic en el botón Actualizar para guardar los valores.Click on the Update button to save the values.
  5. Haga clic en Aceptar para salir de la configuración de orígenes del paquete.Click OK to exit the Package Sources configuration.

Creación de un cliente de línea de C#Create a C# Direct Line client

Las interacciones con la extensión de App Service para Direct Line se producen de manera diferente al modo tradicional de Direct Line porque la mayoría de las comunicaciones se producen mediante un WebSocket.Interactions with the direct line app service extension happen differently than traditional Direct Line because most communication happens over a WebSocket. El cliente de Direct Line actualizado incluye clases auxiliares para abrir y cerrar un WebSocket, enviar comandos a través del WebSocket y recibir las actividades del bot.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. En esta sección se describe cómo crear un cliente simple en C# para interactuar con un bot.This section describes how to create a simple C# client to interact with a bot.

  1. En Visual Studio, cree un nuevo proyecto de aplicación de consola de .NET Core 2,2.In Visual Studio, create a new .NET Core 2.2 console application project.

  2. Agregue el cliente de Direct Line de NuGet al proyecto.Add the DirectLine client NuGet to your project

  3. Cree un cliente y genere un token con un secreto.Create a client and generate a token using a secret. Este paso equivale a crear cualquier otro cliente de Direct Line en C# excepto por el punto de conexión que necesita usar en el bot, anexado con la ruta de acceso .bot/ , como se muestra a continuación.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. No olvide la barra / final.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();
    

    Tenga en cuenta lo siguiente:Notice the following:

    • El valor del punto de conexión es la dirección URL del bot que obtuvo al implementar el bot en Azure.The endpoint value is the bot URL you obtained when you deployed the bot to Azure. Para más información, consulte Configuración del bot de .NET para la extensión.For more information, see Configure .NET bot for extension.
    • El valor secreto que se muestra como YOUR_BOT_SECRET es el valor que guardó anteriormente en la sección Sitios.The secret value shown as YOUR_BOT_SECRET is the value you saved earlier from the sites section.
  4. Una vez que tenga una referencia de conversación de la generación de un token, puede usar este identificador de conversación para abrir un WebSocket con la nueva propiedad StreamingConversations en DirectLineClient.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. Para ello, debe crear una devolución de llamada que se invocará cuando el bot quiera enviar ActivitySets al cliente: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. Ahora está listo para abrir el WebSocket en la StreamingConversations propiedad mediante el token de la conversación, conversationId y la ReceiveActivities devolución de llamada: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. Ahora se puede usar el cliente para iniciar una conversación y enviar Activities al bot: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();
    }