Uri IQnAService.BuildFeedbackRequest(string userId, string userQuery, string kbQuestion, string kbAnswer, out QnAMakerTrainingRequestBody postBody, out string subscriptionKey, out string knowledgebaseId)
        {
            knowledgebaseId = this.qnaInfo.KnowledgebaseId;
            subscriptionKey = this.qnaInfo.SubscriptionKey;
            var builder        = new UriBuilder($"{UriBase}/{knowledgebaseId}/train");
            var feedbackRecord = new FeedbackRecord {
                UserId = userId, UserQuestion = userQuery, KbQuestion = kbQuestion, KbAnswer = kbAnswer
            };
            var feedbackRecords = new List <FeedbackRecord>();

            feedbackRecords.Add(feedbackRecord);
            postBody = new QnAMakerTrainingRequestBody {
                KnowledgeBaseId = knowledgebaseId, FeedbackRecords = feedbackRecords
            };
            return(builder.Uri);
        }
        public async Task MessageReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> argument)
        {
            var message = await argument;

            if (message != null && !string.IsNullOrEmpty(message.Text))
            {
                var tasks = this.services.Select(s => s.QueryServiceAsync(message.Text)).ToArray();
                await Task.WhenAll(tasks);

                if (tasks.Any())
                {
                    var sendDefaultMessageAndWait = true;
                    qnaMakerResults = tasks.FirstOrDefault(x => x.Result.ServiceCfg != null)?.Result;
                    if (tasks.Count(x => x.Result.Answers?.Count > 0) > 0)
                    {
                        var maxValue = tasks.Max(x => x.Result.Answers[0].Score);
                        qnaMakerResults = tasks.First(x => x.Result.Answers[0].Score == maxValue).Result;

                        if (qnaMakerResults != null && qnaMakerResults.Answers != null && qnaMakerResults.Answers.Count > 0)
                        {
                            if (this.IsConfidentAnswer(qnaMakerResults))
                            {
                                await this.RespondFromQnAMakerResultAsync(context, message, qnaMakerResults);

                                await this.DefaultWaitNextMessageAsync(context, message, qnaMakerResults);
                            }
                            else
                            {
                                feedbackRecord = new FeedbackRecord {
                                    UserId = message.From.Id, UserQuestion = message.Text
                                };
                                await this.QnAFeedbackStepAsync(context, qnaMakerResults);
                            }

                            sendDefaultMessageAndWait = false;
                        }
                    }

                    if (sendDefaultMessageAndWait)
                    {
                        await context.PostAsync(qnaMakerResults.ServiceCfg.DefaultMessage);

                        await this.DefaultWaitNextMessageAsync(context, message, qnaMakerResults);
                    }
                }
            }
        }
Пример #3
0
        public async Task MessageReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> argument)
        {
            var message  = await argument;
            var activity = (Activity)await argument;

            if (activity.Type == ActivityTypes.ConversationUpdate)
            {
                if (activity.MembersAdded != null && activity.MembersAdded.Any())
                {
                    string membersName = string.Join(
                        ", ",
                        activity.MembersAdded.Select(
                            newMember => (newMember.Id != activity.Recipient.Id) ? $"{newMember.Name}"
                                            : $"{activity.Recipient.Name}"));

                    string membersID = string.Join(
                        ", ",
                        activity.MembersAdded.Select(
                            newMember => (newMember.Id != activity.Recipient.Id) ? $"{newMember.Id}"
                                            : $"{activity.Recipient.Id}"));
                    if (string.Compare(membersName, "KnowledgeGuru", true) == 0)
                    {
                        //_botName = membersName;
                        _botName = SetMentorName();
                        //await context.PostAsync($"Hello, I am {_botName}, your Digital Mentor. Please type your query and i would be happy to help. Type Done when you want to exit.");
                        await context.PostAsync($"Hello, I am {_botName}, your Student Services Executive. Please type your query and i would be happy to help. Type Thanks when you want to exit.");
                    }
                    else
                    {
                        _membersName = membersName;
                        //await context.PostAsync($"Welcome {membersName}.");
                    }
                    await this.DefaultWaitNextMessageAsync(context, message, qnaMakerResults);
                }
            }

            if (message.Type == ActivityTypes.Message)
            {
                if (message != null && !string.IsNullOrEmpty(message.Text))
                {
                    if (string.Compare(message.Text, "Thanks", true) == 0 || string.Compare(message.Text, "Done", true) == 0 || string.Compare(message.Text, "Bye", true) == 0 || string.Compare(message.Text, "Close", true) == 0 || string.Compare(message.Text, "Fine", true) == 0)
                    {
                        await this.QnARatingStepAsync(context, qnaMakerResults);
                    }
                    else
                    {
                        var tasks = this.services.Select(s => s.QueryServiceAsync(message.Text)).ToArray();
                        await Task.WhenAll(tasks);

                        if (tasks.Any())
                        {
                            var sendDefaultMessageAndWait = true;
                            qnaMakerResults = tasks.First(x => x.Result.ServiceCfg != null).Result;
                            if (tasks.Count(x => x.Result.Answers?.Count > 0) > 0)
                            {
                                var maxValue = tasks.Max(x => x.Result.Answers[0].Score);
                                qnaMakerResults = tasks.First(x => x.Result.Answers[0].Score == maxValue).Result;

                                if (qnaMakerResults != null && qnaMakerResults.Answers != null && qnaMakerResults.Answers.Count > 0)
                                {
                                    if (this.IsConfidentAnswer(qnaMakerResults))
                                    {
                                        await this.RespondFromQnAMakerResultAsync(context, message, qnaMakerResults);

                                        //Added By Sumit
                                        if (string.Compare(message.Text, "Hi", true) == 0)
                                        {
                                            await this.DefaultWaitNextMessageAsync(context, message, qnaMakerResults);
                                        }
                                        else
                                        {
                                            await this.DefaultWaitNextMessageWithCustomMessageAsync(context, message, qnaMakerResults);
                                        }
                                        //Commented By Sumit
                                        //await this.DefaultWaitNextMessageAsync(context, message, qnaMakerResults);
                                    }
                                    else
                                    {
                                        feedbackRecord = new FeedbackRecord {
                                            UserId = message.From.Id, UserQuestion = message.Text
                                        };
                                        await this.QnAFeedbackStepAsync(context, qnaMakerResults);
                                    }

                                    sendDefaultMessageAndWait = false;
                                }
                            }

                            if (sendDefaultMessageAndWait)
                            {
                                await context.PostAsync(qnaMakerResults.ServiceCfg.DefaultMessage);

                                await this.DefaultWaitNextMessageAsync(context, message, qnaMakerResults);
                            }
                        }
                    }
                }
            }
        }