BotData 不保存
BotData not saving
我正在尝试在 C# 中为 firstRun 创建中间件,但似乎无法使用它来保存数据。由于中间件中不存在上下文,因此我使用以下语法来保存数据。它不仅没有保存,而且我想知道以下内容:
为什么,当我在普通对话框中保存时,我可以访问 SetValue,而在这里我只能访问 SetProperty?
public class FirstRunActivityLogger : IActivityLogger
{
public async Task LogAsync(IActivity activity)
{
var allActivity = (Activity)activity;
StateClient stateClient = allActivity.GetStateClient();
BotData userData = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id);
if (!userData.GetProperty<bool>("FirstRun"))
{
Debug.WriteLine($"From:{activity.From.Id} - To:{activity.Recipient.Id} - Message:{activity.AsMessageActivity()?.Text}");
userData.SetProperty<bool>("FirstRun", true);
}
}
}
请记住 userData
只是一个对象,调用 SetProperty()
只是设置该对象的 属性 而不保存任何内容。因此,为了保存机器人状态,您应该使用 SetUserDataAsync()
并将更改后的 userData
传递给它。 Here 是怎么做的:
await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData);
我正在尝试在 C# 中为 firstRun 创建中间件,但似乎无法使用它来保存数据。由于中间件中不存在上下文,因此我使用以下语法来保存数据。它不仅没有保存,而且我想知道以下内容:
为什么,当我在普通对话框中保存时,我可以访问 SetValue,而在这里我只能访问 SetProperty?
public class FirstRunActivityLogger : IActivityLogger
{
public async Task LogAsync(IActivity activity)
{
var allActivity = (Activity)activity;
StateClient stateClient = allActivity.GetStateClient();
BotData userData = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id);
if (!userData.GetProperty<bool>("FirstRun"))
{
Debug.WriteLine($"From:{activity.From.Id} - To:{activity.Recipient.Id} - Message:{activity.AsMessageActivity()?.Text}");
userData.SetProperty<bool>("FirstRun", true);
}
}
}
请记住 userData
只是一个对象,调用 SetProperty()
只是设置该对象的 属性 而不保存任何内容。因此,为了保存机器人状态,您应该使用 SetUserDataAsync()
并将更改后的 userData
传递给它。 Here 是怎么做的:
await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData);