Compartir vía


Incorporación de actividades de seguimiento al bot

SE APLICA A: SDK v4

Una actividad de seguimiento es una actividad que el bot puede enviar a Bot Framework Emulator. Puede usar las actividades de seguimiento para depurar un bot de forma interactiva, ya que permiten ver información sobre el bot mientras se ejecuta localmente.

Las actividades de seguimiento solo se envían al emulador y no a ningún otro cliente o canal. El emulador las muestra en el registro, pero no en el panel principal de chats.

  • Las actividades de seguimiento enviadas mediante el contexto del turno se envían a través de los controladores de actividad de envío registrados en el contexto del turno.
  • Las actividades de seguimiento enviadas mediante el contexto del turno se asocian a la actividad de entrada aplicando la referencia de la conversación, en caso de que haya alguna. En el caso de un mensaje proactivo, el identificador Responder a será un nuevo GUID.
  • Independientemente de cómo se envíe, una actividad de seguimiento nunca establece la marca responded.

Nota:

Los SDK de JavaScript, C# y Python de Bot Framework seguirán siendo compatibles, pero el SDK de Java se va a retirar con la compatibilidad final a largo plazo que finaliza en noviembre de 2023.

Los bots existentes creados con el SDK de Java seguirán funcionando.

Para la nueva compilación de bots, considere la posibilidad de usar Microsoft Copilot Studio y lea sobre cómo elegir la solución de copilot adecuada.

Para obtener más información, consulte El futuro de la construcción de bots.

Para utilizar una actividad de seguimiento

Para ver una actividad de seguimiento en el emulador, necesita un escenario en el que el bot enviará una actividad de seguimiento, como generar una excepción y enviar una actividad de seguimiento desde el controlador de errores del turno del adaptador.

Para enviar una actividad de seguimiento desde el bot:

  1. Cree una nueva actividad.
    • Establezca su propiedad type requerida en "trace".
    • Opcionalmente, puede establecer sus propiedades name, label, value y value type, según corresponda para el seguimiento.
  2. Use el método send activity del objeto del contexto del turno para enviar la actividad de seguimiento.
    • Este método agrega los valores de las restantes propiedades necesarias de la actividad, en función de la actividad de entrada. Estas propiedades incluyen las propiedades channel ID, service URL, from y recipient.

Para ver una actividad de seguimiento en el emulador:

  1. Ejecute el ejemplo localmente en la máquina.
  2. Pruébelo con el emulador.
    • Interactúe con el bot y siga los pasos del escenario para generar la actividad de seguimiento.
    • Cuando el bot emite la actividad de seguimiento, la actividad de seguimiento se muestra en el registro del emulador.

Esta es una actividad de seguimiento que puede ver si ejecutó el bot básico sin configurar primero la base de conocimiento de QnAMaker en la que se basa el bot.

Captura de pantalla de la salida de la actividad de seguimiento en el emulador.

Incorporación de una actividad de seguimiento al controlador de errores del adaptador

El controlador de errores del turno del adaptador captura cualquier excepción no detectada de otro modo que se produzca en el bot durante un turno. El controlador de errores es un buen lugar para una actividad de seguimiento, ya que puede enviar un mensaje descriptivo al usuario y enviar información de depuración sobre la excepción al emulador.

Este código de ejemplo procede del ejemplo Bot básico. Vea el ejemplo completo en C#, JavaScript, Python, o Java.

El controlador OnTurnError del adaptador crea la actividad de seguimiento para incluir la información de la excepción y la envía al emulador.

AdapterWithErrorHandler.cs

    {
        // Log any leaked exception from the application.
        // NOTE: In production environment, you should consider logging this to
        // Azure Application Insights. Visit https://aka.ms/bottelemetry to see how
        // to add telemetry capture to your bot.
        logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}");

        // Send a message to the user
        var errorMessageText = "The bot encountered an error or bug.";
        var errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.IgnoringInput);
        await turnContext.SendActivityAsync(errorMessage);

        errorMessageText = "To continue to run this bot, please fix the bot source code.";
        errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.ExpectingInput);
        await turnContext.SendActivityAsync(errorMessage);

        if (conversationState != null)
        {
            try
            {
                // Delete the conversationState for the current conversation to prevent the
                // bot from getting stuck in a error-loop caused by being in a bad state.
                // ConversationState should be thought of as similar to "cookie-state" in a Web pages.
                await conversationState.DeleteAsync(turnContext);
            }
            catch (Exception e)
            {
                logger.LogError(e, $"Exception caught on attempting to Delete ConversationState : {e.Message}");
            }
        }

        // Send a trace activity, which will be displayed in the Bot Framework Emulator
        await turnContext.TraceActivityAsync("OnTurnError Trace", exception.Message, "https://www.botframework.com/schemas/error", "TurnError");
    };
}

Pasos siguientes