c# - 在 Microsoft Bot 中存储用户状态数据
问题描述
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
if (activity.Type == ActivityTypes.Message)
{
Activity isTypingReply = activity.CreateReply();
isTypingReply.Type = ActivityTypes.Typing;
await connector.Conversations.ReplyToActivityAsync(isTypingReply);
StateClient sc = activity.GetStateClient();
BotData userData = await sc.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id); // have to check on monday
if (!userData.GetProperty<bool>("ChannelUserData"))
{ // fetch user details
上面来自 MS Bot SDK 1.x 应用程序的片段,用于更新状态中的用户数据。现在我正在尝试将旧机器人应用程序升级到 Microsoft Bot SDK 3.x。我正在使用 Cosmos Db 来存储状态值。
如何使用 channelId 和 From Id 存储或更新用户数据?获取用户详细信息后,我将其更新为
await sc.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData);
一年后,我重新打开了 Microsoft 应用程序并对其进行了很多更改。所以,我无法获取正确的文档。有人可以帮助/指导我使用 Cosmos DB 的状态存储过程吗?
解决方案
小心:activity.GetStateClient();
正在返回已弃用的旧 StateClient。
要使用 CosmosDb,请遵循您提到的文档 ( https://docs.microsoft.com/en-us/azure/bot-service/dotnet/bot-builder-dotnet-state-azure-cosmosdb?view=azure-bot -service-3.0#modify-your-bot-code ) 将 CosmosDb 注册为IBotDataStore<BotData>
然后当你想使用它时,例如获取一个属性:
using (ILifetimeScope scope = DialogModule.BeginLifetimeScope(Conversation.Container, activity))
{
var address = Address.FromActivity(activity);
IBotDataStore<BotData> botDataStore = scope.Resolve<IBotDataStore<BotData>>();
BotData botData = await botDataStore.LoadAsync(address, destination, CancellationToken.None);
return botData.GetProperty<T>(propertyName);
}
这里的方法Address.FromActivity(activity);
是自动获取正确的键来指向正确的项目。
推荐阅读
- java - 如何在 docx4j 中倾斜表格标题文本?
- javascript - clearInterval() won't clear setInterval and Affect navigation
- javascript - 在 asp.net MVC 中打印表格行
- javascript - 如何仅使用 javascript 获取 URL 的一部分
- wordpress - 如何使 iDangerous Swiper 在 Wordpress 上工作
- javascript - 如果页面重新加载,将参数添加到 URL
- python - 有没有办法找到每一行的 Fisher 分数?
- python - Removing duplicates based on two columns while deleting inconsistent data
- java - How to fix RecyclerView OnClick gap display bug?
- javascript - 带有 Express 应用程序生成器的 Webpack