Отладка бота с помощью проверяющего ПО промежуточного слоя

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

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

Мы используем EchoBot, созданный локально с помощью Bot Framework версии 4 в кратком руководстве по созданию бота, чтобы показать, как отлаживать и проверять состояние сообщения бота. Отладку бота также можно выполнять с помощью IDE или Bot Framework Emulator, но для отладки состояния в бота нужно добавить проверяющее ПО промежуточного слоя. Примеры бота проверки доступны для C#, JavaScript, JavaScript и Python.

Примечание.

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

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

Для создания нового бота рекомендуется использовать Power Virtual Agent и ознакомиться с выбором подходящего решения чат-бота.

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

Необходимые компоненты

Обновление эмулятора до последней версии

Перед использованием по промежуточного слоя проверки бота для отладки бота обновите эмулятор до версии 4.5 или более поздней. Проверьте последнюю версию на наличие обновлений.

Чтобы проверка версию эмулятора, выберите "Справка", а затем " в меню. Вы увидите текущую версию эмулятора.

Изменение кода бота

Состояние проверки и ПО промежуточного слоя проверки настраиваются в файле Startup.cs , а затем используются адаптером.

Startup.cs

});

services.AddSingleton<ConversationState>();

// Create the Bot Framework Authentication to be used with the Bot Adapter.

AdapterWithInspection.cs

{
    public class AdapterWithInspection : CloudAdapter
    {
        public AdapterWithInspection(BotFrameworkAuthentication auth, IConfiguration configuration, InspectionState inspectionState, UserState userState, ConversationState conversationState, ILogger<IBotFrameworkHttpAdapter> logger)
            : base(auth, logger)
        {
            // Inspection needs credentials because it will be sending the Activities and User and Conversation State to the emulator
            var credentials = new MicrosoftAppCredentials(configuration["MicrosoftAppId"], configuration["MicrosoftAppPassword"]);

            Use(new InspectionMiddleware(inspectionState, userState, conversationState, credentials));

            OnTurnError = async (turnContext, exception) =>
            {
                // Log any leaked exception from the application.
                logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}");

                // Send a message to the user
                await turnContext.SendActivityAsync("The bot encountered an error or bug.");
                await turnContext.SendActivityAsync("To continue to run this bot, please fix the bot source code.");

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

Обновите класс бота в файле EchoBot.cs.

EchoBot.cs

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    var conversationStateProp = _conversationState.CreateProperty<CustomState>("customState");
    var convProp = await conversationStateProp.GetAsync(turnContext, () => new CustomState { Value = 0 }, cancellationToken);

    var userStateProp = _userState.CreateProperty<CustomState>("customState");
    var userProp = await userStateProp.GetAsync(turnContext, () => new CustomState { Value = 0 }, cancellationToken);

    await turnContext.SendActivityAsync(MessageFactory.Text($"Echo: {turnContext.Activity.Text} conversation state: {convProp.Value} user state: {userProp.Value}"), cancellationToken);

    convProp.Value++;
    userProp.Value++;
}

Локальное тестирование бота

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

  1. Перейдите в каталог бота в терминале и выполните следующую команду, чтобы запустить бот локально:

    dotnet run
    
  2. Откройте эмулятор. Выберите "Открыть бот". Заполните URL-адрес бота значениями http://localhost:3978/api/messages MicrosoftAppId и MicrosoftAppPassword. Если у вас есть бот JavaScript, эти значения можно найти в env-файле бота. Если у вас есть бот C#, эти значения можно найти в файле appsettings.json . Для бота Java эти значения можно найти в файле application.properties . Нажмите Подключиться.

  3. Теперь откройте другое окно эмулятора. Второе окно эмулятора будет работать в качестве отладчика. Следуйте инструкциям, описанным выше. Установите флажок "Открыть в режиме отладки", а затем выберите Подключение.

  4. На этом этапе вы увидите команду с уникальным идентификатором (/INSPECT attach <identifier>) в отладчике эмулятора. Скопируйте всю команду с идентификатором из эмулятора отладки и вставьте ее в окно чата первого эмулятора.

    Примечание.

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

  5. Теперь вы можете отправлять сообщения в поле чата первого эмулятора и проверять сообщения в эмуляторе отладки. Чтобы проверить состояние сообщений, выберите "Состояние бота" в эмуляторе отладки и разверните значения в правом окне JSON. Вы увидите состояние бота в эмуляторе отладки:

    bot state

Проверка состояния бота, настроенного в Azure

Если вы хотите проверить состояние бота, настроенного в Azure, и подключиться к каналам (например, Teams), необходимо установить и запустить ngrok.

Запуск ngrok

На этом этапе вы обновили эмулятор до последней версии и добавили по промежуточному слоя проверки в код бота. Следующим шагом является запуск ngrok и настройка локального бота. Перед запуском ngrok нужно запустить бота локально.

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

  1. Перейдите в папку бота в терминале и задайте регистрацию npm, чтобы использовать последние сборки

  2. Запустите бот на локальном компьютере. Вы увидите, что бот предоставляет номер порта, например 3978.

  3. Откройте другую командную строку и перейдите в папку проекта бота. Выполните следующую команду:

    ngrok http 3978
    
  4. Это подключит ngrok к запущенному локально боту. Скопируйте общедоступный IP-адрес (HTTPS).

    ngrok success

Обновление ресурса бота

Теперь, когда локальный бот подключен к ngrok, вы можете настроить ресурс бота в Azure для использования URL-адреса ngrok.

  1. Перейдите к ресурсу бота в Azure. В меню слева в разделе Параметры выберите "Конфигурация".

    1. Задайте конечную точку обмена сообщениями ip-адрес ngrok, скопированный вами. При необходимости добавьте /api/messages после IP-адреса. Например, https://e58549b6.ngrok.io/api/messages.

    2. Выберите "Включить конечную точку потоковой передачи".

      Set endpoint

    3. Щелкните Применить, чтобы сохранить изменения.

      Совет

      Если применение не включено, можно отменить проверка включить конечную точку потоковой передачи и выбрать "Применить", а затем проверка включить конечную точку потоковой передачи и снова нажмите кнопку "Применить". Убедитесь, что флажок Включить конечную точку потоковой передачи установлен, а конфигурация конечной точки сохранена.

  2. Перейдите в группу ресурсов бота.

    1. Выберите "Развертывание" и выберите ресурс бота, который ранее успешно развернут. Выберите шаблон из меню слева, чтобы получить MicrosoftAppId и MicrosoftAppPassword для веб-приложения, связанного с ботом.

      Get inputs

    2. Обновите файл конфигурации бота (appsettings.json для C#или .env для JavaScript) с помощью MicrosoftAppId и MicrosoftAppPassword.

  3. Запустите эмулятор, выберите "Открыть бот" и введите http://localhost:3978/api/messages URL-адрес бота. Заполните идентификатор приложения Майкрософт и пароль приложения Майкрософт тем же microsoftAppId и MicrosoftAppPassword , которые вы добавили в файл конфигурации нашего бота. В этом случае выберите Подключиться.

  4. Запущенный бот теперь подключен к ресурсу бота в Azure. Чтобы протестировать бота в Azure в Веб-чат, перейдите к ресурсам бота, выберите "Тестировать в Веб-чат" и отправьте сообщения боту.

Включение режима отладки

  1. В эмуляторе выберите "Отладка" и "Начать отладку".

  2. Введите IP-адрес ngrok (не забудьте добавить /api/messages) для URL-адреса бота (например, https://e58549b6.ngrok.io/api/messages).

    1. Для идентификатора приложения Майкрософт введите идентификатор приложения бота.
    2. Для пароля приложения Microsoft App введите секрет приложения бота.
    3. Также убедитесь, что флажок Открыть в режиме отладки установлен.
    4. Нажмите Подключиться.
  3. С включенным режимом отладки эмулятор создает идентификатор UUID. UUID — это уникальный идентификатор, создаваемый при каждом запуске режима отладки в эмуляторе.

  4. Скопируйте и вставьте UUID в тест в поле чата Веб-чат для поля чата канала. Вы увидите сообщение "Присоединено к сеансу, весь трафик реплика отправлен для проверки" в поле чата.

Чтобы начать отладку бота, отправьте сообщения в настроенное поле чата канала. Локальный эмулятор автоматически обновит сообщения со всеми сведениями об отладке. Чтобы проверить состояние сообщений бота, выберите "Состояние бота" и разверните значения в правом окне JSON.

debug-inspection-middleware

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