2017-03-09 15 views
2

Bot Framework中的PromptDialog.Choice將顯示正常運行的選項列表。不過,我希望可以選擇取消/退出/退出對話框,並在列表中提供取消/退出/退出選項。 PromptDialog.Choice中有什麼可以重寫,因爲我沒有找到任何取消選項。如何取消/退出或從Bot Framework中的PromptDialog.Choice轉義?

,這裏是我的C#代碼..

PromptDialog.Choice(
       context: context, 
       resume: ChoiceSelectAsync, 
       options: getSoftwareList(softwareItem), 
       prompt: "We have the following software items matching " + softwareItem + ". (1), (2), (3). Which one do you want?:", 
       retry: "I didn't understand. Please try again.", 
       promptStyle: PromptStyle.PerLine); 

例子:

BOT:我們有如下的軟件項目相匹配的Photoshop。 (1),(2),(3)。哪一個你想

  • 版本1
  • 2版
  • 3版

我想要什麼,如果用戶不輸入任何的上方或命令或數量,取消,退出,繞過上面的選項,而不會觸發重試錯誤消息。

我們該怎麼做?

回答

3

有兩種達到此目的的方法:

  1. 按建議添加取消作爲選項。雖然這肯定會起作用,但從長遠來看,您會發現自己會重複很多,而且您會在選項列表中看到取消選項,這可能不是您想要的。
  2. 更好的方法是擴展當前的PromptChoice來添加退出/取消邏輯。好消息是,有些東西已經實現,您可以按原樣或作爲基礎來實現您的需求。看看BotBuilder-Samples存儲庫中包含的CancelablePromptChoiceHere是如何使用它。
+0

我已經通過了botloilder中的CancleablePromptChoice,但我認爲這不適用於數字輸入,當它顯示我選擇1的列表時,再次n再次顯示列表。我嘗試了重寫ScoreMatch方法,但它不返回列表中的第一項。有什麼缺失? – Sandy

+0

我不認爲目前的Prompt Choice也是如此。如果您希望允許用戶通過編號進行選擇,那麼您可能需要更新TryParse/ScoreMatch方法來執行自定義邏輯,或者在選項中包含該編號。我不認爲CancelablePromptChoice正在使用ScoreMatch。它是在添加該方法之前創建的。您可以重寫該方法並從TryParse調用它。 –

+0

是的,你是正確的當前提示選擇不以這種方式工作。我已經覆蓋了CancleablePromptChoice中的ScoreMatch,如下所示 – Sandy

2

只需添加列表中的「取消」選項,並使用上獲取用戶輸入法的切換情況,然後打電話給你的主馬努,或任何你想做的事情上取消

0

當前提示選項不能以這種方式工作,以允許用戶按號碼選擇。我已經覆蓋了CancleablePromptChoice中的ScoreMatch函數,如下所示

public override Tuple<bool, int> ScoreMatch(T option, string input) 
     { 
      var trimmed = input.Trim(); 
      var text = option.ToString(); 

      // custom logic to allow users to select by number 
      int isInt; 
      if(int.TryParse(input,out isInt) && isInt <= promptOptions.Options.Count()) 
      { 
       text = promptOptions.Options.ElementAt(isInt - 1).ToString(); 
       trimmed = option.ToString().Equals(text) ? text :trimmed; 
      }   

      bool occurs = text.IndexOf(trimmed, StringComparison.CurrentCultureIgnoreCase) >= 0; 
      bool equals = text == trimmed; 
      return occurs ? Tuple.Create(equals, trimmed.Length) : null; 
     } 

@Ezequiel再次感謝你!

+0

是否對PromtDialog.String或PromtDialog.Int執行了任何實現? – Sandip

相關問題