2016-12-05 13 views
2

このボットはかなり複雑ですが、ローカルで動作します。しかし、すぐに、私はそれを公開して、それはエラーで失敗します。Microsoft Bot Frameworkはローカルで動作しますが、リモートでは動作しません。

Sorry, my bot code is having an issue.

私は、アプリケーションの洞察を使用して試してみましたが、それはエラーの詳細が表示されていません。 エラーが常に同じポイントで起こりますと、このダイアログ開始

/// <summary> 
/// Start our response 
/// </summary> 
/// <param name="context">The current context</param> 
/// <returns></returns> 
public async Task StartAsync(IDialogContext context) 
{ 

    // Get our current step 
    _groups = await _groupProvider.ListAsync(); 
    _group = _groups.First(); 

    // Post the question header 
    await context.PostAsync(_group.Text); 

    // Wait for the users response 
    context.Wait(AskQuestion); 
} 

/// <summary> 
/// When our message is recieved we execute this delegate 
/// </summary> 
/// <param name="context">The current context</param> 
/// <param name="result">The result object</param> 
/// <returns></returns> 
private async Task AskQuestion(IDialogContext context, IAwaitable<IMessageActivity> result) 
{ 

    // Get our question and answers 
    var question = this._group.Questions[_currentQuestion]; 
    var questionText = question.Text; 
    var answers = question.Answers.Select(m => m.Text).ToList(); 
    var answerCount = question.Answers.Count; 

    // Create our options 
    var options = new PromptOptions<string>(questionText, options: answers); 

    // Ask our question 
    Choice<string>(context, GetAnswer, options); 
} 

/// <summary> 
/// Get our answer and decide what to do next 
/// </summary> 
/// <param name="context">The current context</param> 
/// <param name="result">The answer text</param> 
/// <returns></returns> 
private async Task GetAnswer(IDialogContext context, IAwaitable<string> result) 
{ 

    // Get our quest 
    var questions = _group.Questions; 
    var length = questions.Count; 
    var question = _group.Questions[_currentQuestion]; 
    var selectedAnswer = await result; 

    // Assign our answer to our question 
    foreach (var answer in question.Answers) 
     if (answer.Text == selectedAnswer) 
      question.Answer = answer; 

    // If we have an answer, filter the products 
    if (question.Answer != null) 
     _productProvider.Score(await GetCurrentProducts(), _groups); 

    // Increase our index 
    _currentQuestion++; 

    // If our current index is greater or equal than the length of the questions 
    if (_currentQuestion == length) 
    { 

     // Create our dialog 
     var dialog = _dialogFactory.CreateSecondStepDialog(_dialogFactory, _groupProvider, _questionProvider, _productProvider, await GetCurrentProducts()); 

     // Otherwise, got to the next step 
     await context.Forward(dialog, ResumeAfter, new Activity { }, CancellationToken.None); 
     return; 
    } 

    // Ask our next question 
    await AskQuestion(context, null); 
} 

だから、それはクライアントへの質問の紹介をポストします。 その後、コンテキストを呼び出します。を呼び出して、質問をします。質問は選択肢です。私はこれが問題のどこにあるのだろうと信じています。なぜなら、問題が出現するとすぐにそのメッセージを投げるからです。

誰でもコードでわかりやすいものを見つけることができますか?

+0

実行中のBotBuilderナゲットのバージョンは? –

答えて

0

あなたのボットが500を投げると、あなたが挙げたエラーメッセージが表示されます。あなたのコードを見ると、null ref例外があると思います。 「//質問と回答を取得する」セクションで、グループを確認してみてください。質問はnullではなく、_currentQuestionはその配列の有効なインデックスです。

関連する問題