首页 文章

Botframework如何保存选择

提问于
浏览
0

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

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

1 回答

  • 0

    SDK包含几种相对于用户或对话保存数据的方法:

    userData 在所有会话中为用户全局存储信息 .

    conversationData 全局存储单个对话的信息 . 对话中的每个人都可以看到这些数据,因此应该谨慎使用存储在那里的内容 . 它默认是禁用的,需要使用bots persistConversationData设置启用 .

    privateConversationData 为全局存储单个会话的信息,但为当前用户存储其私有数据 . 此数据涵盖所有对话框,因此对于存储您希望在会话结束时清理的临时状态非常有用 .

    dialogData 保留单个对话框实例的信息 . 这对于在瀑布的步骤之间存储临时信息是必不可少的 .

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

    更多信息:

    https://docs.botframework.com/en-us/node/builder/guides/core-concepts/#adding-dialogs-and-memory

相关问题