Conectar un bot a Direct Line

En este artículo se describe cómo conectar un bot al canal Direct Line. Use este canal para comunicarse con un bot a través de la aplicación cliente.

Nota:

Direct Line es un canal estándar a través del protocolo HTTPS para permitir la comunicación entre una aplicación cliente y un bot. Si necesita aislamiento de red en su lugar, use la extensión de App Service de Direct Line a través de WebSockets.

Requisitos previos

  • Una cuenta de Azure. Si aún no tiene una, cree una cuenta gratuita antes de empezar.
  • Un bot existente publicado en Azure.

Agregar el canal de Direct Line

Lo primero que debe hacer es agregar el canal de Direct Line al bot.

  1. Vaya a Azure Portal.
  2. Vaya al recurso de Azure Bot. En Configuración del bot, seleccione Canales.
  3. Seleccione Direct Line en la lista de Canales disponibles.

El bot ahora está configurado para usar Direct Line mediante el Sitio predeterminado.

Como alternativa, puede agregar un nuevo sitio en lugar de usar el sitio predeterminado. Seleccione el botón Nuevo sitio en la página del canal de Direct Line para crear un nuevo sitio. Direct Line new site button in Azure portal

Administrar claves secretas

Al agregar el Direct Channel, Bot Framework genera claves secretas. Su aplicación cliente usa estas claves para autenticar las solicitudes de Direct Line API que emite para comunicarse con el bot. Para más información, consulte Autenticación.

  1. Para visualizar el secreto de Direct Line de un sitio en texto sin formato, vaya a la página del canal de Direct Line.

  2. Seleccione la pestaña Direct Line y, a continuación, el sitio para el que desea obtener la clave, como Default_Site. Azure abrirá un panel Configurar el sitio.

  3. En Claves secretas, seleccione el icono de ojo situado junto a la clave correspondiente.

    Show Direct Line keys

  4. Copie y almacene de forma segura la clave. Utilice la clave para autenticar las solicitudes de Direct Line API que emite su aplicación cliente para comunicarse con el bot.

    Nota:

    Los secretos no deben exponerse ni insertarse en aplicaciones cliente. Vea el paso siguiente.

  5. El procedimiento recomendado es usar Direct Line API para intercambiar la clave de un token. A continuación, la aplicación cliente usará el token para autenticar sus solicitudes dentro del ámbito de una sola conversación.

Configurar las opciones

Para configurar los ajustes del sitio:

  1. En la página del canal de Direct Line, seleccione el sitio que desea configurar en la lista Sitios. Se abrirá el panel Configurar el sitio, que se muestra a continuación: Configure site pane

  2. Seleccione la versión de protocolo de Direct Line que la aplicación cliente usará para comunicarse con el bot.

    Sugerencia

    Si va a crear una conexión nueva entre la aplicación cliente y un bot, use Direct Line API 3.0.

  3. Cuando termine, haga clic en Aplicar para guardar la configuración del sitio. Repita este proceso, comenzando con un nuevo sitio para cada aplicación cliente que quiera conectar al bot.

Configuración de la autenticación mejorada

Una de las configuraciones de sitio disponibles es Opciones de autenticación mejoradas, lo que ayuda a mitigar los riesgos de seguridad al conectarse a un bot (mediante el control Chat en web, por ejemplo). Para obtener más información, consulte Autenticación mejorada de Direct Line.

Para añadir autenticación mejorada:

  1. Habilite Mejorar las opciones de autenticación. Aparecerá un mensaje que indica "Debe tener al menos un origen de confianza" con un vínculo Agregar un origen de confianza. Si habilita la autenticación mejorada, debe especificar al menos un origen de confianza.

    Un origen de confianza es un dominio utilizado por el sistema para autenticar a los usuarios. En este caso, Direct Line usa el dominio para generar un token.

    • Si configura orígenes de confianza como parte de la página de la UI de configuración, esta configuración siempre se utilizará como el único ajuste para la generación de un token. Se ignorará el envío de orígenes de confianza adicionales (o configurará orígenes de confianza en ninguno) al generar un token o al iniciar una conversación (no se han anexado a la lista o realizado la validación cruzada).
    • Si no habilitó la autenticación mejorada, se usará cualquier dirección URL de origen que envíe como parte de las llamadas API. Add trusted origin
  2. Después de agregar una dirección URL de dominio de confianza, seleccione Aplicar.

Bot de ejemplo de Direct Line

Puede descargar un ejemplo de .NET desde esta ubicación: Ejemplo de bot de Direct Line.

Este ejemplo contiene dos proyectos:

  • DirectLineBot. Crea un bot para conectarse a través de un canal de Direct Line.
  • DirectLineClient. Se trata de una aplicación de consola que se comunica con el bot anterior a través del canal de Direct Line.

Direct Line API

  • Las credenciales de Direct Line API deben obtenerse del registro de Azure Bot y solo permitirán que el autor de la llamada se conecte al bot para el que se generaron. En el proyecto de bot, actualice el archivo appsettings.json con estos valores.

    {
    "MicrosoftAppId": "",
    "MicrosoftAppPassword": ""
    }
    
  • En Azure Portal, habilite Direct Line en la lista de canales y, a continuación, configure el secreto de Direct Line. Asegúrese de que la casilla de la versión 3.0 esté activada. En el proyecto de cliente de consola, actualice el archivo App.config con la clave secreta de Direct Line y el identificador de bot (Id. de bot).

    <appSettings>
        <add key="DirectLineSecret" value="YourBotDirectLineSecret" />
        <add key="BotId" value="YourBotHandle" />
    </appSettings>
    

Los mensajes de usuario se envían al bot mediante el método cliente Conversations.PostActivityAsync de Direct Line mediante el ConversationId generado anteriormente.

while (true)
{
    string input = Console.ReadLine().Trim();

    if (input.ToLower() == "exit")
    {
        break;
    }
    else
    {
        if (input.Length > 0)
        {
            Activity userMessage = new Activity
            {
                From = new ChannelAccount(fromUser),
                Text = input,
                Type = ActivityTypes.Message
            };

            await client.Conversations.PostActivityAsync(conversation.ConversationId, userMessage);
        }
    }
}