Compartir a través de


Creación de un cliente de .NET para conectarse a la extensión de App Service para Direct Line

A partir del 1 de septiembre de 2023, se recomienda encarecidamente emplear el método de etiqueta de servicio de Azure para el aislamiento de red. El uso de DL-ASE debe limitarse a escenarios muy específicos. Antes de implementar esta solución en un entorno de producción, se recomienda consultar al equipo de soporte técnico para obtener instrucciones.

SE APLICA A: 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. Consulte también el artículo complementario Configuración del bot de .NET para la extensión.

Requisitos previos

  • Una cuenta de Azure.
  • Un bot implementado en Azure Portal.

Obtener la clave secreta de Direct Line

  1. En el explorador, vaya a Azure Portal.
  2. En Azure Portal, busque el recurso de Azure Bot.
  3. Seleccione Canales en Configuración.
  4. Si aún no está habilitado, haga clic en el canal de Direct Line para habilitarlo.
  5. Seleccione Direct Line de Canales tras habilitarlo.
  6. Desplácese a la sección Sitios. Normalmente, hay un Default_Site a menos que se haya eliminado o cambiado de nombre.
  7. Haga clic en el botón Mostrar vínculo (icono de ojo) para mostrar una de las claves y, a continuación, copie y guarde su valor. Usará este valor en la sección Creación de un cliente de Direct Line de C#.

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. Puede crear sitios adicionales si lo desea y usar también esos valores de secreto.

Creación de un cliente de Direct Line en C#

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. 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. En esta sección se describe cómo crear un cliente simple en C# para interactuar con un bot.

  1. En Visual Studio, cree un nuevo proyecto de aplicación de consola de .NET Core.

  2. Clone el cliente de Direct Line desde el repositorio de GitHub e inclúyalo en el proyecto.

  3. Cree un cliente y genere un token con un secreto. 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. No olvide la barra / final.

    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:

    • El valor del punto de conexión es la dirección URL del bot que obtuvo al implementar el bot en Azure. Para más información, consulte Configuración del bot de .NET para la extensión.
    • El valor secreto que se muestra como YOUR_BOT_SECRET es el valor que guardó anteriormente en la sección Sitios.
  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. Para ello, debe crear una devolución de llamada que se invocará cuando el bot quiera enviar ActivitySets al cliente:

    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 propiedad StreamingConversations mediante el token de la conversación, conversationId, y la devolución de llamada ReceiveActivities:

    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:

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