Adición de telemetría al bot

SE APLICA A: SDK v4

El registro de telemetría permite a las aplicaciones de bot enviar datos de eventos a servicios de telemetría, como Application Insights. La telemetría ofrece información sobre el bot mostrando qué características se usan más, detecta el comportamiento no deseado y ofrece visibilidad sobre la disponibilidad, el rendimiento y el uso.

En este artículo se describe cómo implementar la telemetría en el bot mediante Application Insights. En este artículo se describe:

  • El código necesario para conectar la telemetría en el bot y conectarse a Application Insights.
  • Habilitación de la telemetría en los cuadros de diálogo del bot.
  • Cómo habilitar la telemetría para capturar datos de uso de otros servicios, como los servicios de Azure AI.
  • Visualización de los datos de telemetría en Application Insights.

Importante

En el caso de un bot regional que pueda recopilar información de identificación personal (PII) en la telemetría, el recurso de Application Insights y el recurso de Azure Bot deben estar en la misma región con el bot. Si los recursos están en regiones diferentes, el PII podría dejar la región geográfica del bot.

Prerrequisitos

Nota

El código de ejemplo de Application Insights se compiló a partir del código de ejemplo de CoreBot. Este artículo le guía a través de la modificación del código de ejemplo de CoreBot para incorporar datos de telemetría. Si va a seguir en Visual Studio, tendrá el código de ejemplo de Application Insights cada vez que haya terminado.

Habilitación de la telemetría en el bot

Este artículo comienza desde la aplicación de ejemplo CoreBot y agrega el código necesario para integrar la telemetría en cualquier bot. Esto permitirá a Application Insights empezar a realizar el seguimiento de solicitudes.

Importante

Si no ha configurado la cuenta de Application Insights y ha creado la clave de Application Insights, hála antes de continuar.

  1. Abra la aplicación de ejemplo CoreBot en Visual Studio.

  2. Agregue el paquete NuGet Microsoft.Bot.Builder.Integration.ApplicationInsights.Core. Para más información sobre el uso de NuGet, consulte Instalación y administración de paquetes en Visual Studio:

  3. Incluya las siguientes instrucciones en Startup.cs:

    using Microsoft.ApplicationInsights.Extensibility;
    using Microsoft.Bot.Builder.ApplicationInsights;
    using Microsoft.Bot.Builder.Integration.ApplicationInsights.Core;
    using Microsoft.Bot.Builder.Integration.AspNet.Core;
    

    Sugerencia

    Si va a seguir al actualizar el código de ejemplo de CoreBot, observará que la instrucción using para Microsoft.Bot.Builder.Integration.AspNet.Core ya existe en el ejemplo CoreBot.

  4. Incluya el siguiente código en el método ConfigureServices() en Startup.cs. Esto hará que los servicios de telemetría estén disponibles para su bot a través de la inserción de dependencias (DI):

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        ...
            // Create the Bot Framework Adapter with error handling enabled.
            services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>();
    
            // Add Application Insights services into service collection
            services.AddApplicationInsightsTelemetry();
    
            // Create the telemetry client.
            services.AddSingleton<IBotTelemetryClient, BotTelemetryClient>();
    
            // Add telemetry initializer that will set the correlation context for all telemetry items.
            services.AddSingleton<ITelemetryInitializer, OperationCorrelationTelemetryInitializer>();
    
            // Add telemetry initializer that sets the user ID and session ID (in addition to other bot-specific properties such as activity ID)
            services.AddSingleton<ITelemetryInitializer, TelemetryBotIdInitializer>();
    
            // Create the telemetry middleware to initialize telemetry gathering
            services.AddSingleton<TelemetryInitializerMiddleware>();
    
            // Create the telemetry middleware (used by the telemetry initializer) to track conversation events
            services.AddSingleton<TelemetryLoggerMiddleware>();
        ...
    }
    

    Sugerencia

    Si va a seguir con la actualización del código de ejemplo de CoreBot, observará que services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>(); ya existe.

  5. Indique al adaptador que use el código de middleware que se agregó al método ConfigureServices(). Esto se hace con AdapterWithErrorHandler.cs el parámetro TelemetryInitializerMiddleware telemetryInitializerMiddleware en la lista de parámetros del constructor y la Use(telemetryInitializerMiddleware); instrucción en el constructor, como se muestra aquí:

        public AdapterWithErrorHandler(IConfiguration configuration, ILogger<BotFrameworkHttpAdapter> logger, TelemetryInitializerMiddleware telemetryInitializerMiddleware, ConversationState conversationState = null)
            : base(configuration, logger)
    {
        ...
        Use(telemetryInitializerMiddleware);
    }
    
  6. También deberá agregar Microsoft.Bot.Builder.Integration.ApplicationInsights.Core a la lista de instrucciones using en AdapterWithErrorHandler.cs.

  7. Agregue la clave de instrumentación de Application Insights a su archivo appsettings.json. El appsettings.json archivo contiene metadatos sobre los servicios externos que usa el bot mientras se ejecuta. Por ejemplo, la conexión y los metadatos de los servicios de Cosmos DB, Application Insights y Azure AI se almacenan allí. La adición al archivo appsettings.json debe estar en este formato:

    {
        "MicrosoftAppId": "",
        "MicrosoftAppPassword": "",
        "ApplicationInsights": {
            "InstrumentationKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
        }
    }
    

    Nota

    Puede encontrar información detallada sobre cómo obtener la clave de instrumentación de Application Insights en el artículo Claves de Application Insights.

En este momento, se realiza el trabajo preliminar para habilitar la telemetría mediante Application Insights. Puede ejecutar el bot localmente mediante el emulador y, a continuación, ir a Application Insights para ver lo que se registra, como el tiempo de respuesta, el estado general de la aplicación y la información de ejecución general.

Habilitación de la telemetría en los cuadros de diálogo del bot

Al agregar un nuevo diálogo a cualquier elemento ComponentDialog, heredará el objeto Microsoft.Bot.Builder.IBotTelemetryClient de su diálogo primario. Por ejemplo, en la aplicación de ejemplo CoreBot, todos los diálogos se agregan a MainDialog, que es componentDialog. Una vez establecida la propiedad TelemetryClient en MainDialog, todos los diálogos agregados a él heredarán automáticamente telemetryClient de ella, por lo que no es necesario establecer explícitamente al agregar diálogos.

Siga los pasos que se indican a continuación para actualizar el ejemplo de CoreBot:

  1. En MainDialog.cs, actualice la lista de parámetros del constructor para incluir el parámetro IBotTelemetryClient y, a continuación, establezca la propiedad TelemetryClient de MainDialog en ese valor, tal como se muestra en el siguiente fragmento de código:

    public MainDialog(IConfiguration configuration, ILogger<MainDialog> logger, IBotTelemetryClient telemetryClient)
        : base(nameof(MainDialog))
    {
        // Set the telemetry client for this and all child dialogs.
        this.TelemetryClient = telemetryClient;
        ...
    }
    

Sugerencia

Si está siguiendo y actualizando el código de ejemplo de CoreBot, puede consultar el código de ejemplo de Application Insights si tiene algún problema.

La telemetría ahora se agrega a los cuadros de diálogo del bot. Si ejecuta el bot ahora, debería ver que las cosas se registran en Application Insights; Sin embargo, si tiene alguna tecnología integrada, como un servicio de Azure AI, también deberá agregar el elemento TelemetryClient a ese código.

Habilitar o deshabilitar el registro de eventos de actividad e información personal

Habilitar o deshabilitar el registro de actividad

De forma predeterminada, TelemetryInitializerMiddleware usará TelemetryLoggerMiddleware para registrar la telemetría cuando el bot envía o recibe actividades. El registro de actividades crea registros de eventos personalizados en el recurso de Application Insights. Si lo desea, puede deshabilitar el registro de eventos de actividad estableciendo logActivityTelemetry en false al TelemetryInitializerMiddleware registrarlo en Startup.cs.

public void ConfigureServices(IServiceCollection services)
{
    ...
    // Add the telemetry initializer middleware
    services.AddSingleton<TelemetryInitializerMiddleware>(sp =>
            {
                var loggerMiddleware = sp.GetService<TelemetryLoggerMiddleware>();
                return new TelemetryInitializerMiddleware(loggerMiddleware, logActivityTelemetry: false);
            });
    ...
}

Habilitar o deshabilitar el registro de información personal

De forma predeterminada, si el registro de actividad está habilitado, algunas propiedades de las actividades entrantes o salientes se excluyen del registro, ya que es probable que contengan información personal, como el nombre de usuario y el texto de la actividad. Puede optar por incluir estas propiedades en el registro realizando el siguiente cambio en Startup.cs al registrar TelemetryLoggerMiddleware.

public void ConfigureServices(IServiceCollection services)
{
    ...
    // Add the telemetry initializer middleware
    services.AddSingleton<TelemetryLoggerMiddleware>(sp =>
            {
                var telemetryClient = sp.GetService<IBotTelemetryClient>();
                return new TelemetryLoggerMiddleware(telemetryClient, logPersonalInformation: true);
            });
    ...
}

A continuación, veremos qué debe incluirse para agregar la funcionalidad de telemetría a los diálogos. Esto le permitirá obtener información adicional como, por ejemplo, qué diálogos ejecutar y las estadísticas de cada uno.

Habilitar la telemetría para capturar datos de uso de otros servicios como Luis y QnA Maker

Nota

QnA Maker de Azure AI se retirará el 31 de marzo de 2025. A partir del 1 de octubre de 2022, no podrá crear nuevos recursos ni bases de conocimiento de QnA Maker. Ya hay disponible una versión más reciente de la funcionalidad de preguntas y respuestas como parte de Lenguaje de Azure AI.

La respuesta a preguntas personalizada, una característica del lenguaje azure AI, es la versión actualizada del servicio QnA Maker. Para más información sobre la compatibilidad con preguntas y respuestas en Bot Framework SDK, consulte Reconocimiento del lenguaje natural.

Nota

Language Understanding (LUIS) se retirará el 1 de octubre de 2025. A partir del 1 de abril de 2023, no podrá crear nuevos recursos de LUIS. Ahora hay disponible una versión más reciente de Language Understanding como parte del lenguaje de Azure AI.

Conversational Language Understanding (CLU), una característica del lenguaje azure AI, es la versión actualizada de LUIS. Para más información sobre la compatibilidad con Language Understanding en Bot Framework SDK, consulte Reconocimiento del lenguaje natural.

A continuación, implementaremos la funcionalidad de telemetría en el servicio luis. El servicio LUIS tiene disponible el registro de telemetría integrado, por lo que es poco necesario hacer para empezar a obtener datos de telemetría de LUIS. Si está interesado en habilitar la telemetría en un bot habilitado para QnA Maker, consulte Incorporación de telemetría al bot de QnA Maker.

  1. El parámetro IBotTelemetryClient telemetryClient es necesario en el constructor FlightBookingRecognizer de FlightBookingRecognizer.cs:

    public FlightBookingRecognizer(IConfiguration configuration, IBotTelemetryClient telemetryClient)
    
  2. A continuación, habilite al telemetryClient crear el LuisRecognizer objeto en el FlightBookingRecognizer constructor . Para ello, agregue como telemetryClient nuevo LuisRecognizerOption:

    if (luisIsConfigured)
    {
        var luisApplication = new LuisApplication(
            configuration["LuisAppId"],
            configuration["LuisAPIKey"],
            "https://" + configuration["LuisAPIHostName"]);
    
        // Set the recognizer options depending on which endpoint version you want to use.
        var recognizerOptions = new LuisRecognizerOptionsV3(luisApplication)
        {
            TelemetryClient = telemetryClient,
        };
        _recognizer = new LuisRecognizer(recognizerOptions);
    }
    

En este caso, debe tener un bot funcional que registre los datos de telemetría en Application Insights. Puede usar Bot Framework Emulator para ejecutar el bot localmente. No debería observar ningún cambio en el comportamiento del bot, pero este estará registrando información en Application Insights. Interactúe con el bot mediante el envío de varios mensajes y, en la sección siguiente, revisaremos los resultados de telemetría en Application Insights.

Para más información sobre cómo probar y depurar el bot, puede consultar los siguientes artículos:

Visualización de los datos de telemetría en Application Insights

Application Insights supervisa la disponibilidad, el rendimiento y el uso de la aplicación del bot, tanto si está hospedada en la nube como en un entorno local. Usa la eficaz plataforma de análisis de datos de Azure Monitor para proporcionarle información detallada sobre las operaciones de la aplicación y diagnosticar errores sin esperar a que un usuario los notifique. Hay varias maneras de ver los datos de telemetría recopilados por Application Insights. Dos de los métodos principales son mediante consultas y a través del panel.

Consulta de los datos de telemetría en Application Insights mediante consultas de Kusto

Utilice esta sección como punto de partida para aprender a usar las consultas de registro en Application Insights. Muestra dos consultas útiles y proporciona vínculos a otra documentación con información adicional.

Para consultar los datos

  1. Vaya a Azure Portal.

  2. Para ir a la página de Application Insights, seleccione Supervisar y, después, Aplicaciones y, después, busque allí.

  3. Una vez en Application Insights, seleccione Registros (Analytics) .

    Captura de pantalla con el botón Registros (Analytics) en la página Application Insights de un bot.

  4. Se abrirá la ventana de consulta. Escriba la siguiente consulta y seleccione Ejecutar:

    customEvents
    | where name=="WaterfallStart"
    | extend DialogId = customDimensions['DialogId']
    | extend InstanceId = tostring(customDimensions['InstanceId'])
    | join kind=leftouter (customEvents | where name=="WaterfallComplete" | extend InstanceId = tostring(customDimensions['InstanceId'])) on InstanceId
    | summarize starts=countif(name=='WaterfallStart'), completes=countif(name1=='WaterfallComplete') by bin(timestamp, 1d), tostring(DialogId)
    | project Percentage=max_of(0.0, completes * 1.0 / starts), timestamp, tostring(DialogId)
    | render timechart
    
  5. Esto devolverá el porcentaje de diálogos en cascada que se ejecutan hasta completarse.

    Salida de ejemplo de la consulta de App Insights.

Sugerencia

Para anclar cualquier consulta al panel de Application Insights, seleccione el botón situado en la parte superior derecha de la hoja Registros (Analytics). Simplemente seleccione el panel al que desea anclarlo y estará disponible la próxima vez que visite ese panel.

Panel de Application Insights

Cada vez que cree un recurso de Application Insights en Azure, se creará un nuevo panel y se le asociará automáticamente. Puede ver ese panel seleccionando el botón situado en la parte superior de la hoja de Application Insights, etiquetado como Panel de la aplicación.

Captura de pantalla con el botón Panel de la aplicación en la página Application Insights de un bot.

Como alternativa, para ver los datos, vaya a Azure Portal. Seleccione Panel a la izquierda y, a continuación, seleccione el panel que desee en la lista desplegable.

Allí puede ver información predeterminada sobre el rendimiento del bot y sobre cualquier consulta adicional que haya anclado al panel.

Información adicional