Отладка бота с помощью проверяющего ПО промежуточного слоя
ОБЛАСТЬ ПРИМЕНЕНИЯ: ПАКЕТ 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, будут продолжать функционировать.
Для создания нового бота рекомендуется использовать Microsoft Copilot Studio и ознакомиться с выбором подходящего решения copilot.
Дополнительные сведения см. в статье "Будущее создания бота".
Необходимые компоненты
- Знание по промежуточного слоя бота и управление состоянием
- Знание отладки бота пакета SDK и тестирования и отладки с помощью эмулятора
- Установка эмулятора Bot Framework
- Установка Dev Tunnel (если вы хотите выполнить отладку бота, настроенного в Azure для использования других каналов)
- Копия примера бота проверки для C#, JavaScript, JavaScript или Python
Обновление эмулятора до последней версии
Перед использованием по промежуточного слоя проверки бота для отладки бота обновите эмулятор до версии 4.15 или более поздней. Проверьте последнюю версию на наличие обновлений.
Чтобы проверить версию эмулятора, выберите "Справка", а затем "Сведения " в меню. Вы увидите текущую версию эмулятора.
Изменение кода бота
Состояние проверки и по промежуточному слоям проверки настраиваются в файле 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++;
}
Локальное тестирование бота
После обновления кода можно локально запустить бота и проверить функцию отладки с помощью двух эмуляторов: один для отправки и получения сообщений, а другой — для проверки состояния сообщений в режиме отладки. Чтобы протестировать бот локально, выполните следующее:
Перейдите в каталог бота в терминале и выполните следующую команду, чтобы запустить бот локально:
dotnet run
Откройте эмулятор. Выберите "Открыть бот". Заполните URL-адрес бота значениями
http://localhost:3978/api/messages
MicrosoftAppId и MicrosoftAppPassword. Если у вас есть бот JavaScript, эти значения можно найти в env-файле бота. Если у вас есть бот C#, эти значения можно найти в файле appsettings.json . Для бота Java эти значения можно найти в файле application.properties . Нажмите Подключиться.Теперь откройте другое окно эмулятора. Второе окно эмулятора будет работать в качестве отладчика. Следуйте инструкциям, описанным выше. Установите флажок "Открыть в режиме отладки" и нажмите кнопку "Подключить".
На этом этапе вы увидите команду с уникальным идентификатором (
/INSPECT attach <identifier>
) в отладчике эмулятора. Скопируйте всю команду с идентификатором из эмулятора отладки и вставьте ее в окно чата первого эмулятора.Примечание.
Уникальный идентификатор создается каждый раз, когда эмулятор запускается в режиме отладки после добавления по промежуточного слоя проверки в код бота.
Теперь вы можете отправлять сообщения в поле чата первого эмулятора и проверять сообщения в эмуляторе отладки. Чтобы проверить состояние сообщений, выберите "Состояние бота" в эмуляторе отладки и разверните значения в правом окне JSON. Вы увидите состояние бота в эмуляторе отладки:
Проверка состояния бота, настроенного в Azure
Если вы хотите проверить состояние бота, настроенного в Azure, и подключиться к каналам (например, Teams), необходимо установить и запустить туннели разработки.
Запуск devtunnel
На этом этапе вы обновили эмулятор до последней версии и добавили по промежуточному слоя проверки в код бота. Следующим шагом является запуск devtunnel и настройка локального бота. Перед запуском devtunnel необходимо локально запустить бот.
Чтобы запустить бот локально, выполните следующее:
Перейдите в папку бота в терминале и задайте регистрацию npm, чтобы использовать последние сборки
Запустите бот на локальном компьютере. Вы увидите, что бот предоставляет номер порта, например
3978
.Откройте другую командную строку и перейдите в папку проекта бота. Выполните следующую команду:
devtunnel host -a -p 3978
Devtunnel теперь подключен к локально работающему боту. Скопируйте общедоступный URL-адрес безопасности (HTTPS).
Обновление ресурса бота
Теперь, когда локальный бот подключен к devtunnel, вы можете настроить ресурс бота в Azure для использования URL-адреса devtunnel.
Перейдите к ресурсу бота в Azure. В меню слева в разделе "Параметры" выберите "Конфигурация".
Задайте для конечной точки обмена сообщениями URL-адрес devtunnel, скопированный вами. При необходимости добавьте /api/messages после IP-адреса. Например,
https://0qg12llz-3978.usw2.devtunnels.ms/api/messages
.Выберите "Включить конечную точку потоковой передачи".
Щелкните Применить, чтобы сохранить изменения.
Совет
Если применение не включено, можно снять флажок "Включить конечную точку потоковой передачи" и выбрать "Применить", а затем нажмите кнопку "Включить конечную точку потоковой передачи" и снова нажмите кнопку "Применить". Убедитесь, что флажок Включить конечную точку потоковой передачи установлен, а конфигурация конечной точки сохранена.
Перейдите в группу ресурсов бота.
Выберите "Развертывание" и выберите ресурс бота, который ранее успешно развернут. Выберите шаблон из меню слева, чтобы получить MicrosoftAppId и MicrosoftAppPassword для веб-приложения, связанного с ботом.
Обновите файл конфигурации бота (appsettings.json для C#или .env для JavaScript) с помощью MicrosoftAppId и MicrosoftAppPassword.
Запустите эмулятор, выберите "Открыть бот" и введите
http://localhost:3978/api/messages
URL-адрес бота. Заполните идентификатор приложения Майкрософт и пароль приложения Майкрософт тем же microsoftAppId и MicrosoftAppPassword , которые вы добавили в файл конфигурации нашего бота. В этом случае выберите Подключиться.Запущенный бот теперь подключен к ресурсу бота в Azure. Чтобы протестировать бота в Azure в Веб-чат, перейдите к ресурсам бота, выберите "Тестировать в Веб-чат" и отправьте сообщения боту.
Включение режима отладки
В эмуляторе выберите "Отладка" и "Начать отладку".
Введите URL-адрес devtunnel (не забудьте добавить /api/messages) для URL-адреса бота (например,
https://4jj51x75-51865.usw2.devtunnels.ms/api/messages
).- Для идентификатора приложения Майкрософт введите идентификатор приложения бота.
- Для пароля приложения Microsoft App введите секрет приложения бота.
- Также убедитесь, что флажок Открыть в режиме отладки установлен.
- Нажмите Подключиться.
С включенным режимом отладки эмулятор создает идентификатор UUID. UUID — это уникальный идентификатор, создаваемый при каждом запуске режима отладки в эмуляторе.
Скопируйте и вставьте UUID в тест в поле чата Веб-чат для поля чата канала. Вы увидите сообщение "Присоединено к сеансу, весь трафик реплицируется для проверки" в поле чата.
Чтобы начать отладку бота, отправьте сообщения в настроенное поле чата канала. Локальный эмулятор автоматически обновит сообщения со всеми сведениями об отладке. Чтобы проверить состояние сообщений бота, выберите "Состояние бота" и разверните значения в правом окне JSON.
Следующие шаги
- Узнайте, как отладить бота с помощью файлов расшифровки.
- Узнайте, как выполнить отладку навыка или потребителя навыков.