2017-05-24 3 views
0

ParseMessageによる確認プロンプトでLuisにテキストを送信し、trueまたはfalseを返します。私はこのファイルにデバッガを設定して、応答がboolを返すことを確認しました。ブールをIAwaitableから取得する<IMessageActivity>

コードは問題ありません。結果が返ってくるとCannot implicitly convert IAwaitable<bool> to boolと書いてありますが、これはConvert.ToBoolean()が入った場所です。まだ運がない。

このif文で結果を確認できるように、返されたboolを確認するにはどうすればよいですか。

例外:型「Microsoft.Bot.Builder.Internals.Fibers.Wait`2のオブジェクトをキャストすることができません[Microsoft.Botをそれだけ言ってボットエミュレータにメッセージを送り返し、この現在のコードサンプルで

.Builder.Dialogs.Internals.DialogTask、System.Boolean] 'を入力して' System.IConvertible 'と入力します。

編集:より多くのコードを更新しました

RootDialog.cs

private async Task SendWelcomeMessageAsync(IDialogContext context) 
    { 
     await context.PostAsync("Hi, I'm the Basic Multi Dialog bot. Let's get started."); 

     context.Call(new ConfirmLuisPrompt(), this.ConfirmLuisPromptAfter); 
    } 

    private async Task ConfirmLuisPromptAfter(IDialogContext context, IAwaitable<bool> result) 
    { 
     //var res = Convert.ToBoolean(result); 
     var confirm = await result; 

     if (confirm) 
     { 
      //yes 
      context.Call(FormDialog.FromForm(PersonInfo.BuildForm, FormOptions.PromptInStart), this.PersonInfoAfter); 
     }else 
     { 
      //no 
      await context.PostAsync($"Ok, let's get you started"); 

      context.Call(FormDialog.FromForm(PatientInfo.BuildForm, FormOptions.PromptInStart), InHospital); 

     } 
    } 

ConfirmLuisPrompt.cs

[Serializable] 
public class ConfirmLuisPrompt : IDialog<bool> 
{ 
    public async Task StartAsync(IDialogContext context) 
    { 
     await context.PostAsync("Do you have insurance?"); 

     context.Wait(this.MessageReceivedAsync); 
    } 

    private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result) 
    { 

     dynamic m = await result; 
     var message = m.Text.ToString(); 
     //context.Wait(ParseMessage(context, message)); 
     bool response = await ParseMessage(message); 
     context.Done(response); 
     //context.PostAsync(response.toString()); 
    } 


    public bool ParseMessage(string input) 
    { 
     LuisClient luisClient = new LuisClient("<key1>", "<key2>"); 
     Task<LuisResult> resultTask = luisClient.Predict(input); 
     resultTask.Wait(); 
     LuisResult result = resultTask.Result; 

     if (result.TopScoringIntent.Name == "Yes") 
     { 
      return true; 
     } 
     else if (result.TopScoringIntent.Name == "No") 
     { 
      return false; 
     } 
     else 
     { 
      return false; 
     } 
    } 

} 

答えて

0

だけで行う変換しないでください:ブール

3

を返す必要がありますresult.GetAwaiter().GetResult()あなたはあなたの次のことをする必要がありますConfirmLuisPromptAfter方法は:

var confirm = await result; 

if (confirm) 
{ 
    ... 
} 
+0

は '例外は言う:「ブール値」それは私がこのコメントは、他の回答のためだと思うIAwaitable笑 – teachtyler

+0

だから奇妙に思えるGetAwaiter''」の定義が含まれていません。 –

+0

私は両方を試して同じ例外があります – teachtyler

関連する問題