Поделиться через


Добавление действий трассировки в бот

ОБЛАСТЬ ПРИМЕНЕНИЯ: ПАКЕТ SDK версии 4

Действием трассировки называется действие, которое бот может отправить в Bot Framework Emulator. Вы можете использовать действия трассировки для интерактивной отладки бота, так как они позволяют просматривать сведения о боте при локальном выполнении.

Действия трассировки отправляются только в приложение Emulator, но не другим клиентам и не в каналы. Приложение отображает их в журнале, но не на главной панели разговора.

  • Действия трассировки из контекста шага отправляются через обработчики действий отправки, которые зарегистрированы в контексте этого шага.
  • Действия трассировки из контекста шага привязываются к входящему действию путем применения ссылки на беседу, если таковая имеется. Для упреждающего сообщения идентификатор адреса для ответа будет содержать новый уникальный идентификатор.
  • Независимо от способа отправки действие трассировки никогда не задает флаг ответа .

Примечание.

Пакеты SDK для JavaScript, C# и Python для Bot Framework по-прежнему будут поддерживаться, однако пакет SDK java отменяется с окончательной долгосрочной поддержкой, заканчивающейся в ноябре 2023 года.

Существующие боты, созданные с помощью пакета SDK для Java, будут продолжать функционировать.

Для создания нового бота рекомендуется использовать Microsoft Copilot Studio и ознакомиться с выбором подходящего решения copilot.

Дополнительные сведения см. в статье "Будущее создания бота".

Использование действия трассировки

Чтобы увидеть действие трассировки в приложении Emulator, создайте сценарий, в котором бот отправляет такое действие трассировки. Например, можно создать исключение и отправить действие трассировки из обработчика ошибок на шаге адаптера.

Чтобы отправить из бота действие трассировки, сделайте следующее.

  1. Создайте новое действие.
    • Задайте для свойства требуемого типа значение trace.
    • При необходимости задайте для трассировки его имя, метку, значение и тип значения.
  2. Чтобы отправить действие трассировки, используйте действие отправки из объекта контекста шага.
    • Этот метод добавляет значения для незаполненных обязательных свойств действия, используя сведения о входящем действии. К этим свойствам относятся идентификатор канала, URL-адрес службы, из и свойства получателя .

Чтобы просмотреть действие трассировки в приложении Emulator, выполните следующие действия.

  1. Запустите бота на локальном компьютере.
  2. Выполните тестирование в Emulator.
    • Напишите что-нибудь боту, чтобы сработали те шаги в сценарии, которые создают действие трассировки.
    • Когда бот создаст действие трассировки, оно отобразится в журнале Emulator.

Ниже приведено действие трассировки, которое можно увидеть, если вы запустили бот Core, не настроив база знаний QnAMaker, на которые используется бот.

Снимок экрана: выходные данные действия трассировки в эмуляторе.

Добавление действия трассировки в обработчик ошибок адаптера

Обработчик ошибок шага адаптера перехватывает все неперехваченные в другом месте исключения, которые создаются ботом во время выполнения. Обработчик ошибок является хорошим местом для действия трассировки, так как вы можете отправить пользователю понятное сообщение и отправить отладочную информацию об исключении эмулятору.

В этом случае используется код из примера Core Bot. Полный пример см. в C#, JavaScript, Python или Java.

Обработчик адаптера OnTurnError создает действие трассировки, которое собирает сведения об исключении и отправляет их в эмулятор.

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");
    };
}

Следующие шаги