Bots 如何向Bot Framework应用程序中的活动发送用户定义的详细信息,或如何访问我的对话类中的BotData

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

我有两个问题

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);
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();
    }
}