Compartir vía


Configuración de un bot de .NET para la extensión

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 actualizar un bot .NET para trabajar con canalizaciones con nombre y cómo habilitar la extensión de App Service para Direct Line en el recurso de Azure App Service en el que implementaste el bot.

Requisitos previos

  • Una cuenta de Azure. Si aún no tiene una, cree una cuenta gratuita antes de empezar.
  • Un bot .NET implementado en Azure.
  • El SDK de Bot Framework para .NET 4.14.1 o una versión posterior.

Habilitación de la extensión de App Service para Direct Line

Esta sección describe cómo habilitar la extensión de servicio de aplicaciones de Direct Line mediante la clave de extensión de App Service de la configuración de canal de Direct Line del bot.

Actualizar el código del bot

Nota:

Los paquetes de vista previa de NuGet Microsoft.Bot.Builder.StreamingExtensions han quedado en desuso. A partir de la versión 4.8, el SDK contiene un espacio de Microsoft.Bot.Builder.Streaming nombres. Si un bot ha utilizado previamente los paquetes de la versión preliminar, deben quitarse antes de continuar con los pasos siguientes.

  1. Abra el proyecto del bot en Visual Studio.
  2. Permitir que la aplicación use canalizaciones con nombre:
    1. Abra el archivo Startup.cs.

    2. Agrega una referencia al paquete NuGet Microsoft.Bot.Builder.Integration.AspNet.Core.

      using Microsoft.Bot.Builder.Integration.AspNet.Core;
      
    3. En el método Configure, agrega una llamada al método UseNamedPipes.

      public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
      {
          if (env.IsDevelopment())
          {
              app.UseDeveloperExceptionPage();
          }
      
          app.UseDefaultFiles()
              .UseStaticFiles()
              .UseWebSockets()
              // Allow the bot to use named pipes.
              .UseNamedPipes(System.Environment.GetEnvironmentVariable("APPSETTING_WEBSITE_SITE_NAME") + ".directline")
              .UseRouting()
              .UseAuthorization()
              .UseEndpoints(endpoints =>
              {
                  endpoints.MapControllers();
              });
      
          // app.UseHttpsRedirection();
      }
      
    4. Guarde el archivo Startup.cs.

  3. Implementación del bot actualizado en Azure.

Habilitación de la extensión del bot de App Service para Direct Line

  1. En Azure Portal, vaya al recurso de Azure Bot.

    1. En Configuración selecciona Canales para configurar los canales desde los que el bot acepta mensajes.
    2. Si aún no está habilitado, selecciona el canal Direct Line en la lista de canales disponibles para habilitar el canal.
    3. Después de habilitar Direct Line, selecciónalo de nuevo en la página Canales.
    4. Selecciona la pestaña Extensión de App Service.
    5. En Claves de extensión de App Service, selecciona el icono de ojo situado junto a la clave correspondiente.
  2. Ve a la página principal y selecciona App Services en la parte superior de la página. Como alternativa, muestra el menú del portal y, a continuación, selecciona el elemento de menú App Services. Azure mostrará la página App Services.

  3. En el cuadro de búsqueda, escribe el nombre del recurso de Azure Bot. Se mostrará el recurso.

    Ten en cuenta que si mantienes el puntero sobre el icono o el elemento de menú, obtendrás una lista de los últimos recursos vistos. Es probable que se muestre el recurso de Azure Bot.

  4. Selecciona el vínculo de recursos.

    1. En la sección Configuración, selecciona el elemento de menú Configuraciones.

    2. En el panel de la derecha, añada la siguiente configuración:

      NOMBRE Valor
      DirectLineExtensionKey Valor de la clave de extensión de App Service que copiaste anteriormente.
      DIRECTLINE_EXTENSION_VERSION latest
    3. Si el bot está hospedado en una nube soberana o restringida de Azure, donde no tienes acceso a Azure a través del portal público, también tendrás que agregar la siguiente configuración:

      NOMBRE Valor
      DirectLineExtensionABSEndpoint El punto de conexión específico de la nube de Azure en la que se hospeda el bot. Por ejemplo, en la nube de USGov, el punto de conexión es https://directline.botframework.azure.us/v3/extension.
    4. Desde la sección Configuración, haz clic en la sección de configuración General y activa Sockets web.

    5. Haga clic en Save (Guardar) para guardar la configuración. Esto reinicia la instancia de Azure App Service.

Confirma que la extensión direct Line y el bot están configurados

En el navegador, vaya a https://<your_app_service>.azurewebsites.net/.bot. Si todo está correcto, la página devolverá este contenido JSON:

    {"v":"123","k":true,"ib":true,"ob":true,"initialized":true}
  • v muestra la versión de compilación de la extensión de App Service de Direct Line.
  • k indica si la extensión pudo leer una clave de extensión de su configuración.
  • inicializado indica si la extensión pudo descargar metadatos del bot desde el servicio de Bot de Azure AI.
  • ib indica si la extensión pudo establecer una conexión entrante al bot.
  • ob indica si la extensión pudo establecer una conexión saliente desde el bot.

Solución de problemas

  • Si los valores ib y ob mostrados por el punto de conexión .bot son falsos, el bot y la extensión App Service de Direct Line no se pueden conectar entre sí.

    1. Comprueba el código para usar canalizaciones con nombre que se ha agregado al bot.
    2. Confirma que el bot puede iniciarse y ejecutarse. Las herramientas útiles son Probar en WebChat, conectar un canal adicional, depuración remota o registro.
    3. Reinicia todo el Azure App Service en el que se hospeda el bot para garantizar un inicio limpio de todos los procesos.
  • Si el valor inicializado del punto de conexión .bot es falso, la extensión de App Service de Direct Line no puede validar la clave de extensión de App Service agregada a la Configuración de la aplicación anterior del bot.

    1. Confirma que el valor se ha escrito correctamente.
    2. Cambia a la clave de extensión alternativa que se muestra en la página Configurar Direct Line del bot.
  • Habilita el bot para usar el modelo de hospedaje fuera de proceso; de lo contrario, recibirás un error HTTP 500.34: error de hospedaje mixto ANCM (donde ANCM significa módulo ASP.NET Core). Este error se produce porque la plantilla de bot usa el modelo InProcess de hospedaje de forma predeterminada. Para configurar el hospedaje fuera del proceso, consulta Modelo de hospedaje fuera de proceso. Para más información, consulta Atributos del elemento aspNetCore y Configuración con web.config.

  • Si intenta usar OAuth con la extensión de App Service de Direct Line y encuentra el error "No se puede obtener el appId del bot de la notificación de audiencia", establezca ClaimsIdentity para AudienceClaim en BotFrameworkHttpAdapter. Para ello, puede subclasificar el adaptador. Por ejemplo:

    public class AdapterWithStaticClaimsIdentity : BotFrameworkHttpAdapter
    {
        public AdapterWithStaticClaimsIdentity(IConfiguration configuration, ILogger<BotFrameworkHttpAdapter> logger, ConversationState conversationState = null)
            : base(configuration, logger)
        {
            // Manually create the ClaimsIdentity and create a Claim with a valid AudienceClaim and the AppID for a bot using the Direct Line App Service extension.
            var appId = configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value;
            ClaimsIdentity = new ClaimsIdentity(new List<Claim>{
                new Claim(AuthenticationConstants.AudienceClaim, appId)
            });
        }
    }
    

Pasos siguientes