Bots 如何向Bot Framework应用程序中的活动发送用户定义的详细信息,或如何访问我的对话类中的BotData
我有两个问题 1) 如何向Bot框架中的活动发送自定义值? 我在post方法中有以下代码Bots 如何向Bot Framework应用程序中的活动发送用户定义的详细信息,或如何访问我的对话类中的BotData,bots,botframework,formbuilder,Bots,Botframework,Formbuilder,我有两个问题 1) 如何向Bot框架中的活动发送自定义值? 我在post方法中有以下代码 UserDetails usr = new UserDetails(); usr.LoginID = l.LoginID userData.SetProperty<string>("LoginID", usr.LoginID); sc.BotState.SetUserData(activity.ChannelId, activity.From.Id, userData); UserDetail
UserDetails usr = new UserDetails();
usr.LoginID = l.LoginID
userData.SetProperty<string>("LoginID", usr.LoginID);
sc.BotState.SetUserData(activity.ChannelId, activity.From.Id, userData);
UserDetails usr=newuserdetails();
usr.LoginID=l.LoginID
SetProperty(“LoginID”,usr.LoginID);
sc.BotState.SetUserData(activity.ChannelId、activity.From.Id、userData);
现在我想在Dialog/FormBuilder类中访问此属性,如何实现
下面是我的formbuilder类
[Serializable]
public class FlightBooking
{
public static IForm<FlightBooking> BuildForm()
{
return new FormBuilder<FlightBooking>().Message("Tell me flight details!")
.Field(nameof(title))
....
....
}
}
[可序列化]
公务舱机票预订
{
公共静态表单BuildForm()
{
返回新的FormBuilder()。消息(“告诉我航班详细信息!”)
.字段(名称(标题))
....
....
}
}
2) 如何访问FormBuilder/Dialog类中的BotData用户定义属性 正如在上面的代码中一样,您可以看到我已经设置了EmailId属性,如何在formbuilder类中访问该属性值?1)我不明白您在用
BotState
做什么。您提出的问题是“如何将自定义值发送到活动…”,但实际上您正在将值保存到UserData
中。此外,您提供的代码似乎不完整
您可以这样保存UserData
:
var stateClient = activity.GetStateClient();
BotData userData = stateClient.BotState.GetUserData(activity.ChannelId, activity.From.Id);
userData.SetProperty<string>("LoginID", l.LoginID);
stateClient.BotState.SetUserData(activity.ChannelId, activity.From.Id, userData);
并创建状态客户端
,并访问用户数据
:
public class FlightBooking
{
public string title { get; set; }
public static IForm<FlightBooking> BuildForm(string channelId, string userId)
{
string appId = ConfigurationManager.AppSettings["MicrosoftAppId"];
string password = ConfigurationManager.AppSettings["MicrosoftAppPassword"];
StateClient stateClient = new StateClient(new MicrosoftAppCredentials(appId, password));
BotData userData = stateClient.BotState.GetUserData(channelId, userId);
var loginId = userData.GetProperty<string>("LoginID");
//do something with loginId?
return new FormBuilder<FlightBooking>().Message("Tell me flight details!")
.Field(nameof(title))
.Build();
}
}
公共舱机票预订
{
公共字符串标题{get;set;}
公共静态格式构建表单(字符串channelId、字符串userId)
{
字符串appId=ConfigurationManager.AppSettings[“MicrosoftAppId”];
字符串密码=ConfigurationManager.AppSettings[“MicrosoftAppPassword”];
StateClient StateClient=新的StateClient(新的MicrosoftAppCredentials(appId,密码));
BotData userData=stateClient.BotState.GetUserData(channelId,userId);
var loginId=userData.GetProperty(“loginId”);
//用loginId做点什么?
返回新的FormBuilder()。消息(“告诉我航班详细信息!”)
.字段(名称(标题))
.Build();
}
}
但是,您也可以只将整个activity对象发送到BuildForm方法,而不必处理UserData。您能澄清问题1吗?请更新一下帖子。。因为它让人困惑,你在上面有部分问题#2。我的第一个和第二个问题是相似的,我只是观察到了,无论如何,谢谢以西奎尔宣读了我的问题。Eric刚刚澄清了我的疑问谢谢Eric。如果我遇到更多问题,我将尝试此方法并返回:-)我有以下代码导航到Flighbooking FormBuilder类,我想将活动传递到BuildForm,如何实现?BuildFormDelegate MakeFlightBookingForm=FlightBooking.BuildForm();var FlightBooking=new FormDialog(cb,MakeFlightBookingForm,FormOptions.PromptInStart,null);调用(FlightBooking,FlightBookingComplete);请在您的问题或新问题中发布代码。在评论中很难阅读。
public class FlightBooking
{
public string title { get; set; }
public static IForm<FlightBooking> BuildForm(string channelId, string userId)
{
string appId = ConfigurationManager.AppSettings["MicrosoftAppId"];
string password = ConfigurationManager.AppSettings["MicrosoftAppPassword"];
StateClient stateClient = new StateClient(new MicrosoftAppCredentials(appId, password));
BotData userData = stateClient.BotState.GetUserData(channelId, userId);
var loginId = userData.GetProperty<string>("LoginID");
//do something with loginId?
return new FormBuilder<FlightBooking>().Message("Tell me flight details!")
.Field(nameof(title))
.Build();
}
}