Configuración de un bot de .NET para la extensiónConfigure .NET bot for extension

se aplica a: SDK V4APPLIES TO: SDK v4

En este artículo se describe cómo actualizar un bot para que funcione con canalizaciones con nombre y cómo habilitar la extensión Direct Line App Service en el recurso Azure App Service donde se hospeda el bot.This article describes how to update a bot to work with named pipes, and how to enable the Direct Line App Service extension in the Azure App Service resource where the bot is hosted.

Requisitos previosPrerequisites

Para realizar los pasos descritos a continuación, debe tener un bot implementado en Azure.To perform the steps described next, you need to have a bot deployed in Azure.

Habilitar Direct Line App Service extensiónEnable Direct Line App Service extension

En esta sección se describe cómo habilitar la extensión Direct Line App Service mediante la clave de extensión App Service desde la configuración del canal de Direct Line del bot.This section describes how to enable the Direct Line App Service extension using the App Service extension key from your bot's Direct Line channel configuration.

Actualización del código del botUpdate bot code

Nota

Los paquetes de versión preliminar de NuGet Microsoft.Bot.Builder.StreamingExtensions han quedado en desuso.The Microsoft.Bot.Builder.StreamingExtensions NuGet preview packages have been deprecated. A partir de la versión 4.8, el SDK contiene un espacio de Microsoft.Bot.Builder.Streaming nombres.Starting with v4.8, the SDK contains a Microsoft.Bot.Builder.Streaming namespace. Si un bot ha utilizado previamente los paquetes de la versión preliminar, deben quitarse antes de continuar con los pasos siguientes.If a bot previously made use of the preview packages they must be removed before following the steps below.

  1. Abra el proyecto del bot en Visual Studio.In Visual Studio, open your bot project.

  2. Asegúrese de que el proyecto usa la versión 4.8 o posterior del SDK Bot Framework.Make sure the project uses version 4.8 or later of the Bot Framework SDK.

  3. Permitir que la aplicación use canalizaciones con nombre:Allow your app to use named pipes:

    • Abra el archivo Startup.cs.Open the Startup.cs file.
    • En el Configure método , agregue una llamada al método UseNamedPipes .In the Configure method, add a call to the UseNamedPipes method.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }
    
        app.UseDefaultFiles();
        app.UseStaticFiles();
    
        // Allow the bot to use named pipes.
        app.UseNamedPipes(System.Environment.GetEnvironmentVariable("APPSETTING_WEBSITE_SITE_NAME") + ".directline");
    
        app.UseMvc();
    }
    
  4. Guarde el archivo Startup.cs.Save the Startup.cs file.

  5. Publique el bot en el recurso de bot de la aplicación web de Azure para implementar el código actualizado.Publish the bot to your Azure web app bot resource to deploy the updated code.

Habilitación de la extensión Direct Line App Service botEnable bot Direct Line App Service extension

  1. En la Azure Portal, busque el recurso Bot de aplicación web.In the Azure portal, locate your Web App Bot resource.

  2. En el menú del panel izquierdo de Administración de bots, haga clic en Canales para configurar Azure Bot Service de los que el bot acepta mensajes.From the left panel menu under Bot management click on Channels to configure the Azure Bot Service channels your bot accepts messages from.

  3. Si aún no está habilitado, haga clic en el Direct Line y siga las instrucciones para habilitar el canal.If it is not already enabled, click on the Direct Line channel and follow instructions to enable the channel.

  4. En la tabla Conectarse a canales, haga clic en el vínculo Editar de la Direct Line fila.In the Connect to channels table click on the Edit link on the Direct Line row.

  5. Desplácese hacia abajo hasta la App Service claves de extensión.Scroll down to the App Service extension Keys section.

  6. Haga clic en el vínculo Mostrar para mostrar una de las claves.Click on the Show link to reveal one of the keys. Copie este valor para usarlo más adelante.Copy this value for use later.

    App Service de extensión

  7. Vaya a la página principal, haga clic en App Services icono de la parte superior de la página.Navigate to the home page, click the App Services icon at the top of the page. También puede mostrar el menú del portal y, a continuación, hacer clic en App Services elemento de menú, en el panel izquierdo.You can also display the portal menu, and then click the App Services menu item, in the left panel. Se muestra App Services página de configuración.The App Services page is displayed.

  8. En el cuadro de búsqueda, escriba el nombre del recurso bot de aplicación web.In the search box enter your Web App Bot resource name. Se mostrará el recurso.Your resource will be listed. Tenga en cuenta que si mantiene el puntero sobre el icono o el elemento de menú, obtiene la lista de los últimos recursos que ha visto.Notice that if you hover over the icon or the menu item, you get the list of the last resources you viewed. Lo más probable es que se enumere el recurso Bot de aplicación web.Chances are your Web App Bot resource will be listed.

  9. Haga clic en el vínculo de recurso.Click your resource link.

  10. En la sección Configuración, haga clic en el elemento de menú Configuración.In the Settings section, click the Configuration menu item.

  11. En el panel derecho, agregue la siguiente configuración nueva:In the right panel, add the following new settings:

    NombreName ValueValue
    DirectLineExtensionKeyDirectLineExtensionKey El valor de la App Service de extensión que copió anteriormente.The value of the App Service extension key you copied earlier.
    DIRECTLINE_EXTENSION_VERSIONDIRECTLINE_EXTENSION_VERSION latestlatest
  12. Si el bot se hospeda en una nube de Azure soberana o restringida de otro modo, donde no tiene acceso a Azure a través del portalpúblico, también deberá agregar la siguiente nueva configuración:If your bot is hosted in a sovereign or otherwise restricted Azure cloud, where you don't access Azure via the public portal, you will also need to add the following new setting:

    NombreName ValorValue
    DirectLineExtensionABSEndpointDirectLineExtensionABSEndpoint Punto de conexión específico de la nube de Azure en la que se hospeda el bot.The endpoint specific to the Azure cloud your bot is hosted in. Para la nube USGov, por ejemplo, el punto de conexión es https://directline.botframework.azure.us/v3/extension .For the USGov cloud for example, the endpoint is https://directline.botframework.azure.us/v3/extension.
  13. Todavía dentro de la sección Configuración, haga clic en la sección Configuración general y active Sockets web.Still within the Configuration section, click on the General settings section and turn on Web sockets.

  14. Haga clic en Guardar para guardar la configuración.Click on Save to save the settings. Esto reinicia la instancia de Azure App Service.This restarts the Azure App Service.

Confirmación de que la extensión y el bot están configuradosConfirm the extension and the bot are configured

Abra el explorador y vaya a https://<your_app_service>.azurewebsites.net/.bot.In your browser, navigate to 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}.If everything is correct, the page will return this JSON content: {"v":"123","k":true,"ib":true,"ob":true,"initialized":true}. Esta es la información que se obtiene cuando todo funciona correctamente; en ella:This is the information you obtain when everything works correctly, where

  • v muestra la versión de compilación de la Direct Line App Service extensión.v displays the build version of the Direct Line App Service extension.
  • k determina si la extensión puede leer una clave de extensión de su configuración.k determines whether the extension can read an extension key from its configuration.
  • initialized determina si la extensión puede usar la clave de extensión para descargar los metadatos del bot Azure Bot Service.initialized determines whether the extension can use the extension key to download the bot metadata from Azure Bot Service.
  • ib determina si la extensión puede establecer una conexión entrante con el bot.ib determines whether the extension can establish an inbound connection with the bot.
  • ob determina si la extensión puede establecer una conexión saliente con el bot.ob determines whether the extension can establish an outbound connection with the bot.

Solución de problemasTroubleshooting

  • Si los valores ib y ob mostrados por el punto de conexión .bot son false, significa que el bot y la extensión Direct Line App Service no pueden conectarse entre sí.If the ib and ob values displayed by the .bot endpoint are false this means the bot and the Direct Line App Service extension are unable to connect to each other.

    1. Compruebe que el código para usar canalizaciones con nombre se ha agregado al bot.Double check the code for using named pipes has been added to the bot.
    2. Confirme que el bot puede iniciarse y ejecutarse en absoluto.Confirm the bot is able to start up and run at all. Las herramientas útiles son Probar en WebChat, conectar un canal adicional, depuración remota o registro.Useful tools are Test in WebChat, connecting an additional channel, remote debugging, or logging.
    3. Reinicie toda la Azure App Service en la que se hospeda el bot para garantizar un inicio limpio de todos los procesos.Restart the entire Azure App Service the bot is hosted within, to ensure a clean start up of all processes.
  • Si recibe un "error HTTP 500.34 - ANCM Mixed Hosting", el bot está intentando usar el modelo InProcess de hospedaje.If you receive an "HTTP Error 500.34 - ANCM Mixed Hosting", your bot is attempting to use the InProcess Hosting Model. Esto se corrige estableciendo explícitamente el bot para que se ejecute en OutOfProcess su lugar.This is remedied by explicitly setting the bot to run OutOfProcess instead. Consulte Modelo de hospedaje fuera de proceso en la documentación AZP.NET Core para obtener más información.See Out-of-process hosting model in the AZP.NET Core documentation for more information.

  • Si el valor inicializado del punto de conexión .bot es false, significa que la extensión Direct Line App Service no puede validar la clave de extensión App Service agregada a la configuración de la aplicación del bot anterior.If the initialized value of the .bot endpoint is false it means the Direct Line App Service extension is unable to validate the App Service extension key added to the bot's Application Settings above.

    1. Confirme que el valor se ha escrito correctamente.Confirm the value was correctly entered.
    2. Cambie a la clave de extensión alternativa que se muestra en la página Configurar Direct Line del bot.Switch to the alternate extension key shown on your bot's Configure Direct Line page.
  • Si intenta usar OAuth con la extensión Direct Line App Service y encuentra el error "Unable to get the bot AppId from the audience claim".If you attempt to use OAuth with the Direct Line App Service extension and encounter the error "Unable to get the bot AppId from the audience claim." Un ClaimsIdentity con el asignado debe AudienceClaim establecerse en BotFrameworkHttpAdapter .A ClaimsIdentity with the AudienceClaim assigned needs to be set on the BotFrameworkHttpAdapter. Para ello, un desarrollador puede crear una subclase del adaptador similar al ejemplo siguiente:In order to accomplish this a developer may subclass the adapter similar to the example below:

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 siguientesNext steps