2016-10-21 7 views
4

私のプロジェクトの1つにボットフレームワークを使用しています。 PromptDialog.Confirm関数からの返信を処理している間、ループの中で止まっているようです。ダイアログループにボットフレームワークが貼り付けられました

namespace Genome 
{ 
public class InitiateDialog : IDialog<object> 
{ 
    public async Task StartAsync(IDialogContext context) 
    { 
     context.Wait(ConversationStarted); 
    } 

    public async Task ConversationStarted(IDialogContext context, IAwaitable<IMessageActivity> message) 
    { 
     await context.PostAsync("Hi!"); 
     PromptDialog.Confirm(
      context: context, 
      resume: ResumeAndPromptPlatformAsync, 
      prompt: "Would you like to upload the document?", 
      retry: "I didn't understand. Please try again." 
      ); 
    } 

    public async Task ResumeAndPromptPlatformAsync(IDialogContext context, IAwaitable<bool> result) 
    { 
     await context.PostAsync("Input Received"); 
    } 
} 
} 

このコードの実行がResumeAndPromptPlatformAsync機能に達することはありません。私は毎回Yes/NoをPromptDialog.Confirm()で選択して、Bot EmulatorがループバックしてConversationStarted()を開始し、同じ質問をもう一度尋ねます。

+0

どのバージョンのBotBuilder NuGetパッケージを使用していますか? –

答えて

0

あなたの現在のコードは正しいと思いますが、ループを引き起こした前のコードにエラーがあった可能性があります。ボットフレームワークは自動的に状態を保存するので、あなたはまだ古いコードを使用しています。

あなたは状態をリセットし、新しいコードを使用して開始するには、タイプ「/deleteprofileを」Facebookのチャンネルを使用している場合。エミュレータを使用している場合は、[データの削除]をクリックするか、新しいユーザーとの新しい会話を開始します。

また、ResumeAndPromptPlatformAsyncメソッドは、context.Waitまたはcontext.Doneのいずれかで終了する必要があります。そうしないと、問題の原因となっている可能性があります。

更新:私はあなたのコードを実行しました。context.Done(this);を追加した後、私は期待通りに動作します。私はエミュレータを使用しています。

+0

私はこの質問に投稿されている問題を再現することができます(私はResumeAndPromptPlatformAsyncでcontext.Doneを持っています)。それは決してこの方法には及ばない。 botframeworkのバグのようです。私は昨日からこの状況に直面しています – rajkiran

+0

私はコードを実行した後、私はcontext.Doneを追加した後に私のために働く。 – K48

+0

@ K48ありがとうございます。それは今働く。 –

関連する問題