private async Task <DialogTurnResult> FilterLowVariationScoreList(WaterfallStepContext stepContext, CancellationToken cancellationToken) { var response = stepContext.Values[QnAData] as List <QueryResult>; var filteredResponse = _services.QnAMakerService.GetLowScoreVariation(response.ToArray()).ToList(); stepContext.Values[QnAData] = filteredResponse; if (filteredResponse.Count > 1) { var suggestedQuestions = new List <string>(); foreach (var qna in filteredResponse) { suggestedQuestions.Add(qna.Questions[0]); } // Get hero card activity var message = CardHelper.GetHeroCard(suggestedQuestions, cardTitle, cardNoMatchText); await stepContext.Context.SendActivityAsync(message); return(new DialogTurnResult(DialogTurnStatus.Waiting)); } else { return(await stepContext.NextAsync(new List <QueryResult>(response), cancellationToken)); } }
private async Task <Activity> GetQnAResponse(string query, ITurnContext turnContext) { Activity outputActivity = null; var newState = new QnABotState(); var qnaState = await _qnaStateAccessor.GetAsync(turnContext, () => new QnABotState()); var qnaResult = await this.qnAServiceHelper.QueryQnAService(query, qnaState, turnContext); var qnaAnswer = qnaResult[0].Answer; if (string.Equals(qnaAnswer, "No good match found in KB.", StringComparison.OrdinalIgnoreCase)) { qnaAnswer = "I didn't understand what you just said to me."; } var prompts = qnaResult[0].Context?.Prompts; if (prompts == null || prompts.Length < 1) { outputActivity = MessageFactory.Text(qnaAnswer); InQnaMaker = false; } else { // Set bot state only if prompts are found in QnA result newState.PreviousQnaId = qnaResult[0].Id; newState.PreviousUserQuery = query; outputActivity = CardHelper.GetHeroCard(qnaAnswer, prompts); } await _qnaStateAccessor.SetAsync(turnContext, newState); return(outputActivity); }