如何将用户定义的详细信息发送到机器人框架应用中的活动,或者如何在我的对话类中访问 BotData



我有两个问题

1( 如何将自定义值发送到机器人框架中的活动?我在发布方法中有以下代码

UserDetails usr = new UserDetails();
usr.LoginID = l.LoginID
userData.SetProperty<string>("LoginID", usr.LoginID);
sc.BotState.SetUserData(activity.ChannelId, activity.From.Id, userData);

现在我想在我的对话框/表单生成器类中访问此属性,如何实现这一点?

下面是我的表单生成器类

[Serializable]
public class FlightBooking
{
public static IForm<FlightBooking> BuildForm()
    {
    return new FormBuilder<FlightBooking>().Message("Tell me flight details!")
    .Field(nameof(title))
    ....
    ....
    }
}

2( 如何在表单生成器/对话框类中访问 BotData 用户定义的属性?

如上面的代码所示,您可以看到我已经设置了 EmailId 属性,如何在表单构建器类中访问该属性值?

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

2( 您可以发送活动。ChannelId 和 BuildForm 方法的 activity.From.Id:

await Conversation.SendAsync(activity, ()=> FormDialog.FromForm(() => FlightBooking.BuildForm(activity.ChannelId, activity.From.Id)));

并创建StateClient,并访问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();
    }
}

但是,您也可以只将整个活动对象发送到 BuildForm 方法,而根本不用 UserData。

相关内容

最新更新