Botframework如何保存selaction

本文关键字:保存 selaction 何保存 Botframework | 更新日期: 2023-09-27 17:58:12

由于缺乏教程和信息,我无法找到如何在机器人中保存信息。比方说,我要求用户做出这样的选择:

 public enum City
    {
        Cleveland, Columbus, Kentucky, Mason, Akron
    };
    [Serializable]
    public class SandwichOrder
    {
        [Prompt("Please select what {&} you are in? {||}")]
        public City? City;
        public static IForm<SandwichOrder> BuildForm()
        {
            return new FormBuilder<SandwichOrder>()
                    .Message("Welcome to the my bot!")
                    .Build();
        }
    };

我只想问一次城市,我怎么能做到?如何保留用户选择的值,并且仅在第一次用户交互时调用此方法。

控制器类别:

 internal static IDialog<SandwichOrder> MakeRootDialog()
        {
            return Chain.From(() => FormDialog.FromForm(SandwichOrder.BuildForm));
        }
        [ResponseType(typeof(void))]
        public virtual async Task<HttpResponseMessage> Post([FromBody] Activity activity)
        {
            if (activity != null)
            {
                // one of these will have an interface and process it
                switch (activity.GetActivityType())
                {
                    case ActivityTypes.Message:
                        await Conversation.SendAsync(activity, MakeRootDialog);
                        break;                  
                }
            }
            var response = Request.CreateResponse(HttpStatusCode.OK);
            return response;
        }

Botframework如何保存selaction

SDK包括几种保存与用户或会话相关的数据的方法:

userData在所有对话中为用户全局存储信息。

conversationData全局存储单个会话的信息。这些数据对对话中的每个人都是可见的,因此应该注意存储在那里的内容。它在默认情况下是禁用的,需要使用bots persistConversationData设置来启用。

privateConversationData全局存储单个会话的信息,但存储当前用户的私有数据。此数据跨越所有对话框,因此它对于存储会话结束时要清理的临时状态非常有用。

dialogData会保存单个对话框实例的信息。这对于在瀑布的步骤之间存储临时信息至关重要。

使用Bot Builder构建的Bot被设计为无状态的,因此它们可以轻松地扩展到跨多个计算节点运行。因此,您通常应该避免使用全局变量或函数闭包来保存状态的诱惑。当你想扩展你的机器人时,这样做会产生问题。相反,利用上面的数据包来保持临时和永久状态。

更多信息请点击此处:

https://docs.botframework.com/en-us/node/builder/guides/core-concepts/#adding-对话框和内存