2017-05-18 9 views
2

私はデータベースを照会するボットを設計していますが、壁に当たっています。私は、projectInfoは大丈夫と呼ばれるループを入れたいのですがどこC#botframeworkでループを作成する

[LuisIntent("ProjectInfo")] 
     public async Task projectInfo(IDialogContext context, LuisResult result) 
     { 
      PromptDialog.Text(context,AfterPromptMethod,"Please enter your project name", attempts: 100); 
     } 
     async Task AfterPromptMethod(IDialogContext context, IAwaitable<string> userInput) 
     { 
      var InputText = await userInput; 
      string projectName = InputText.ToString(); 
      if (projectName!= null) 
      { 
       TestInfo MI = new TestInfo(); 
       if (MI.FindProject(projectName) == 0) 
       { 
        await context.PostAsync($"Project Found. What do you want to know ?"); 
       } 
       else 
       { 
//PromptDialog.Text(context,AfterPromptMethod,"Pleaase check your product name and try again", attempts: 100); 
        await context.PostAsync($"Project Not Found. Check your project name and try again."); 

       } 
      } 
      context.Wait(MessageReceived); 
     } 

これはですが、それはプロジェクトが見つからないif文に達した場合、それは何もしません。私は "context.Wait(projectInfo)"を挿入しようとしましたが、それは役に立ちませんでした。私もpromtダイアログを使用しようとしました。もしそうであれば、メインメニューに行くのでなければループバックします。しかし、私はそのアプローチについて私の頭を包み込むことができませんでした。

誰かがそれを行うための提案やより良い方法があれば、それは感謝します。

答えて

3

何がしたいことは、その後それを呼び出す:)

私はあなたのコード

[LuisIntent("ProjectInfo")] 
public async Task projectInfo(IDialogContext context, LuisResult result) 
{ 
    PromptDialog.Text(context,AfterPromptMethod,"Please enter your project name", attempts: 100); 
} 

async Task AfterPromptMethod(IDialogContext context, IAwaitable<string> userInput) 
{ 
    var InputText = await userInput; 
    string projectName = InputText.ToString(); 
    if (projectName!= null) 
    { 
     TestInfo MI = new TestInfo(); 
     if (MI.FindProject(projectName) == 0) 
     { 
      await context.PostAsync($"Project Found. What do you want to know ?"); 
      context.Wait(MessageReceived); 
     } 
     else 
     { 
      await context.PostAsync($"Project Not Found. Check your project name and try again."); 
      await this.projectInfo(context, null); 
     } 
    } 
} 
0

問題はcontext.Wait(..)です。 PromptDialogがヒットすると、別のダイアログが作成され、そのダイアログがプロンプトを処理します。しかし、このメソッドでコードを実行するだけでは終了しません。それはメソッドの最後に続き、次にヒットするのはcontext.wait(MessageRecieved)です。この行は、次のメッセージをMessageRecievedメソッドで処理する必要があることを指定しようとします。次のメッセージが来ると予想される2つの場所があり、それはできません。

問題を解決するには、PromptDialogの直後にreturn;を追加します。 context.wait(..)がヒットしていないことを確認します。

+0

を更新返す、projectInfoメソッドに再び行くことであるならば、 projectInfoに戻りますか?コンテキストに到達するのを止めてください。 – Demonic218

+0

projectInfo関数でcontext.wait(AfterPromptMethod);を追加するだけです) –

関連する問題