Пример #1
0
        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));
            }
        }
Пример #2
0
        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);
        }