由于缺乏教程和信息,我无法找到如何将信息保存在机器人中。让我们说我要求用户做出这样的选择:
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;
}
答案 0 :(得分:0)
SDK包含几种相对于用户或对话保存数据的方法:
userData 在所有会话中为用户全局存储信息。
conversationData 为单个会话全局存储信息。对话中的每个人都可以看到这些数据,因此应该谨慎使用存储在那里的内容。它默认是禁用的,需要使用机器人persistConversationData设置启用。
privateConversationData 为单个会话全局存储信息,但为当前用户存储私有数据。此数据涵盖所有对话框,因此对于存储您希望在会话结束时清理的临时状态非常有用。
dialogData 会保留单个对话框实例的信息。这对于在瀑布的步骤之间存储临时信息至关重要。
使用Bot Builder构建的Bots设计为无状态,因此可以轻松扩展它们以跨多个计算节点运行。因此,您通常应该避免使用全局变量或函数闭包来保存状态的诱惑。如果要扩展机器人,这样做会产生问题。而是利用上面的数据包来保持暂时和永久的状态。
更多信息:
https://docs.botframework.com/en-us/node/builder/guides/core-concepts/#adding-dialogs-and-memory