2017-06-17 70 views
0

使用PromptDialog我有以下LUIS意圖的實現 -如何提示用戶沒有在微軟機器人框架

[LuisIntent("MyIntent")] 
    public async Task MyIntent(IDialogContext context, IAwaitable<IMessageActivity> res, LuisResult result) 
    { 
     var message = await res; 
     try 
     { 
      await context.PostAsync("I see that you have below options <br/> 1. Do first task <br/> 2. Do second task <br/> 3. Do third task "); 
      PromptDialog.Text(context, taskdoer, "You can ask me like - <br/>Do task 2<br/>or simply enter 2"); 
     } 
     catch (Exception e) 
     { 
      await context.PostAsync("Error is <br/> " + e.ToString()); 
      context.Wait(MessageReceived); 
     } 
    } 

而對於taskdoer的定義 -

private async Task taskdoer(IDialogContext context, IAwaitable<string> result) 
    { 
     string strTaskNumber = await result; 
       if (strTaskNumber == "2") 
       { 
        await context.PostAsync("So, you have entered " + strTaskNumber); 
        await context.PostAsync("This is Task 2"); 
        context.Wait(MessageReceived); 
       } 
       if (strTaskNumber == "3") 
       { 
        await context.PostAsync("So, you have entered " + strTaskNumber); 
        await context.PostAsync("This is Task 3"); 
        context.Wait(MessageReceived); 
       } 
    } 

我想什麼來實現的是,沒有使用新的方法 - taskdoer,我怎麼能在MyIntent方法本身中實現taskdoer邏輯,但是用戶提示輸入如taskdoer? 是否有任何方式可以提示用戶不使用Microsoft bot中的PromptDialog?

回答

3

您無法按照您所看到的方式實施它。如果您需要來自用戶的輸入,您將始終必須以新方法採取行動。

儘管您仍然有一個方法並且在相同範圍內使用一些技巧,但您可以嘗試使用匿名方法。它可能不起作用!

PromptDialog.Text(context, async (IDialogContext ctx, IAwaitable<string> resume) => 
{ 
    // your magic here 
}, "text"); 

,如果你不希望使用Prompt的意圖方法中的另一種方法是:

  1. 而不是使用Prompt,做一個context.PostAsync顯示的問題給用戶
  2. 使用context.Wait等待用戶輸入。你可以等待一個新的方法(應該有2個參數,IDialogContextIAwaitable<IMessageActivity>),或者你可以使用LUIS的MessageReceived覆蓋它並在那裏添加一些邏輯知道消息何時不應該去LUIS,你應該執行taskdoer邏輯。我建議你有一個單獨的方法。

我很好奇你爲什麼不想使用Prompt