2016-07-22 84 views
0

保存由於缺乏教程和信息我無法找到我怎麼能保存在機器人的信息。比方說,我要求用戶做出這樣的選擇:Botframework如何selction

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

我只想問一次城市我該怎麼做?我如何保留用戶選擇的價值,並且只在第一次用戶交互時才調用此方法。

Controller類:

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

SDK包括相對持久數據向用戶或談話的幾種方法:

的UserData存儲全局信息跨越所有的對話用戶。

conversationData商店全球信息用於單個對話。這些數據在會話中對每個人都是可見的,因此應該謹慎使用這些數據。它默認是禁用的,需要使用bot persistConversationData設置啓用。

privateConversationData爲單個對話存儲全局信息,但存儲當前用戶的私有數據。這些數據涵蓋了所有對話框,因此對於存儲臨時狀態非常有用,您可以在對話結束時清除臨時狀態。

dialogData保存單個對話框實例的信息。這對於在瀑布的臺階之間存儲臨時信息至關重要。

使用Bot Builder構建的機器人被設計爲無狀態,因此它們可以輕鬆擴展以跨多個計算節點運行。因此,通常應避免使用全局變量或函數閉包來保存狀態的誘惑。這樣做會產生問題,當你想擴展你的機器人。相反,要利用上面的數據袋來堅持暫時和永久的狀態。

此處瞭解詳情:

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