В настоящее время у меня есть бот, работающий в Microsoft Teams, который был создан много лет назад с использованием Microsoft Bot Framework v3 SDK. Теперь я покажу пример места, где я сохранил некоторые данные после использования бота, которые, как я понимаю, хранятся в «IBotDataBag».
Таким образом, этот метод является первым методом, который вызывается, когда я ввожу сообщение боту в Teams (в результате работы фреймворка). В него вводится объект типа «IDialogContext», и этот объект содержит другие объекты, один из которых имеет тип «IBotData», а выше на изображении — «context.UserData». Я использую это для установки некоторых данных, например, я установил его для хранения значения внутри ключа «test_data», которое я получаю на изображении выше.
Теперь мой вопрос: где в приложении Bot эти данные фактически хранятся? Мое приложение развернуто в Azure как служба приложений. Он устанавливается локально в моих Microsoft Teams после установки из каталога приложений моей организации. Я хочу знать, хранятся ли эти данные где-то локально на моем ПК или где-то в облаке. Основываясь на тесте с удалением бота, я подумал, что если он хранится в облаке, то набор данных в «IBotDataBag» будет удален, но после установки бота информация все еще присутствовала, что наводит меня на мысль, что бот хранится на информацию локально на моей машине. Я пытался найти информацию, подтверждающую этот вывод в Интернете, но пока не нашел ничего полезного, и я понимаю, что Microsoft сейчас очень сильно продвигает SDK v4, поэтому надеялся, что кто-то здесь может пролить свет на этот вопрос для меня, пожалуйста?
V3 SDK выводится из эксплуатации, а окончательная долгосрочная поддержка заканчивается 31 декабря 2019 г. Соответственно, в этом репозитории больше не будет разработки. Мы настоятельно рекомендуем вам начать перенос ботов V3 на V4. В настоящее время v3 SDK поддерживает два языка программирования. Пакет SDK для построителя ботов версии 3 включает образцы для всех поддерживаемых языков:
Вот фрагмент кода-
частная асинхронная задача MessageReceivedAsync (контекст IDialogContext, Ожидаемый результат) { var activity = ожидать результата как Activity;
// An example of a string value saved directly to UserData context.UserData.SetValue("test", "test"); // If we have not asked the user their name, ask it now var askedName = context.UserData.GetValueOrDefault<bool>(AskedNameProperty); if (!askedName) { await context.PostAsync($"v3: Hi. What is your name?"); // We've asked the user their name, so persist the information in UserData context.UserData.SetValue(AskedNameProperty, true); }
Справочный образец-https://github.com/microsoft/BotBuilder-Samples/blob/4d209edeaaaa72d29279057ff2c1ac3ce213694b/Migration/MigrationV3V4/CSharp/V3StateBot/V3StateBot/Dialogs/RootDialog.cs
Документ-https://github.com/microsoft/botbuilder-v3
Итак, изучив архитектуру бота в его группе ресурсов на портале Microsoft Azure, я нашел запись типа «Учетная запись хранения», которая по сути является хранилищем таблиц Azure для бота. Здесь есть раздел «Таблицы», и здесь вы найдете запись под названием «botdata». Внутри этой таблицы вы найдете несколько записей, которые можно идентифицировать по их ключу раздела. После проб и ошибок я обнаружил, что удаление записей «msteams: user» приведет к тому, что мой бот не будет иметь никаких «UserData» внутри объекта контекста. Основываясь на нескольких тестах, я пришел к выводу, что данные хранятся в хранилище таблиц и что инфраструктура бота обрабатывает операции CRUD с этими данными.
Спасибо за ваше сообщение. Я знаю, что версия 3 больше не поддерживается, но она все равно будет работать. Я пытаюсь найти некоторую информацию о том, где находятся эти данные, когда вы запускаете бота в командах. Является ли он локальным на машине или хранится в памяти в облаке, где развернут бот?