Exemple #1
0
        protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
        {
            if (result.Answers.Count > 0)
            {
                //getting result, storing it in string response
                string response = result.Answers.First().Answer;

                //splitting response based on pipe
                string[] QnAResponses = response.Split(new string[] { "|" }, StringSplitOptions.None);
                if (QnAResponses.Count() > 1)
                {
                    Random rnd          = new Random();
                    int    randomChoice = rnd.Next(0, QnAResponses.Count());

                    //receiving a random response, pipe separated
                    response = QnAResponses[randomChoice];

                    //splitting caret, left side[0] = text response. right side[1] = speech response.
                    string QnATextResponse   = (response.Split('^'))[0];
                    string QnASpeechResponse = (response.Split('^'))[1];

                    //displaying multiple responses
                    await context.PostAsync("Text Version: " + QnATextResponse);

                    await context.PostAsync("\nSpeech Version: " + QnASpeechResponse);
                }
            }
        }
Exemple #2
0
        protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
        {
            var primeiraResposta = result.Answers.First().Answer;

            var resposta = ((Activity)context.Activity).CreateReply();

            var dadosResposta = primeiraResposta.Split('|');

            if (dadosResposta.Length == 1)
            {
                await context.PostAsync(primeiraResposta);

                return;
            }

            var heroCard = new HeroCard()
            {
                Title    = dadosResposta[0],
                Subtitle = dadosResposta[1],
                Buttons  = new List <CardAction>
                {
                    new CardAction(ActionTypes.OpenUrl, "Compre Agora", dadosResposta[2])
                },
                Images = new List <CardImage>()
                {
                    new CardImage(dadosResposta[3])
                }
            };

            resposta.Attachments.Add(heroCard.ToAttachment());

            await context.PostAsync(resposta);
        }
Exemple #3
0
        protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
        {
            var primeiraResposta = result.Answers.First().Answer;

            Activity resposta = ((Activity)context.Activity).CreateReply();

            var dadosResposta = primeiraResposta.Split(';');

            if (dadosResposta.Length == 1)
            {
                await context.PostAsync(primeiraResposta);

                return;
            }

            var titulo    = dadosResposta[0];
            var descricao = dadosResposta[1];
            var url       = dadosResposta[2];
            var urlImagem = dadosResposta[3];


            HeroCard card = new HeroCard
            {
                Title    = titulo,
                Subtitle = descricao
            };

            card.Buttons = new List <CardAction>
            {
                new CardAction(ActionTypes.OpenUrl, "Compre agora", value: url)
            };

            card.Images = new List <CardImage>
            {
                new CardImage(url = urlImagem)
            };

            resposta.Attachments.Add(card.ToAttachment());

            await context.PostAsync(resposta);
        }
Exemple #4
0
 protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
 {
     //await base.RespondFromQnAMakerResultAsync(context, message, result);
     await SendAwnser(context, result);
 }
Exemple #5
0
        protected override async Task DefaultWaitNextMessageAsync(IDialogContext context, IMessageActivity message, QnAMakerResults results)
        {
            IMessageActivity newMessage = context.MakeMessage();

            newMessage.Text = typeResultInQnA;
            context.Done <IMessageActivity>(newMessage);
        }
Exemple #6
0
 /// <summary>
 /// Override method
 /// </summary>
 /// <param name="context">Dialog context</param>
 /// <param name="message">user message</param>
 /// <param name="result">result returned from question and answer service</param>
 /// <returns>returns nothing</returns>
 protected override async Task DefaultWaitNextMessageAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
 {
     context.Done <IMessageActivity>(null);
 }
 protected override Task DefaultWaitNextMessageAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
 {
     if (result.Answers.Count == 0)
     {
         return(base.DefaultWaitNextMessageAsync(context, message, result));
     }
     else
     {
         return(base.DefaultWaitNextMessageAsync(context, message, result));
     }
 }
Exemple #8
0
 protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
 {
     //await base.RespondFromQnAMakerResultAsync(context, message, result);
     if (result.Answers.Count > 0)
     {
         var response = result.Answers.First().Answer;
         await context.PostAsync(response);
     }
     else
     {
         var response = "EU sei que você queria saber algo sobre mim, " +
                        "mas não sei lhe responder isso ainda...";
         await context.PostAsync(response);
     }
 }
 protected override async Task DefaultWaitNextMessageAsync(IDialogContext context, IMessageActivity message, QnAMakerResults results)
 {
     await base.DefaultWaitNextMessageAsync(context, message, results);
 }
Exemple #10
0
        protected override async Task DefaultWaitNextMessageAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
        {
            if (message.Text.Equals("None of the above."))
            {
                // your code logic
                await context.PostAsync("What kind of thing do you want to ask?");

                //await context.PostAsync("You selected 'None of the above.'");
            }

            await base.DefaultWaitNextMessageAsync(context, message, result);
        }
Exemple #11
0
        protected override Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
        {
            var activity = (context.Activity as Activity).CreateReply();

            var heroCard = new HeroCard();

            heroCard.Title = activity.Text;
            heroCard.Text  = result.Answers.First().Answer;

            activity.Attachments.Add(heroCard.ToAttachment());
            return(context.PostAsync(activity));
        }
Exemple #12
0
        protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
        {
            var answer = result.Answers.First().Answer;

            if (answer == "No good match found in the KB")
            {
                foundResultInQnA = false;
            }

            else
            {
                foundResultInQnA = true;
                await context.PostAsync(answer);
            }
        }
Exemple #13
0
        protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
        {
            //this overrides the standard QnA response so the bot can send a card back if needed.
            var      answer = result.Answers.First().Answer;
            Activity reply  = ((Activity)context.Activity).CreateReply();

            string[] qnaAnswerData = answer.Split(';');

            int dataSize = qnaAnswerData.Length;

            if (dataSize > 1 && dataSize <= 6)
            {
                System.Diagnostics.Debug.WriteLine("heading to card**************************************************");
                var attachment = GetSelectedCard(answer);
                reply.Attachments.Add(attachment);
                await context.PostAsync(reply);
            }
            else
            {
                System.Diagnostics.Debug.WriteLine("not a card call ********************");
                await context.Forward(new BasicQnAMakerDialog(), AfterAnswerAsync, message, CancellationToken.None);

                //await context.PostAsync(reply);
            }
        }
        protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
        {
            var reply = context.MakeMessage();

            reply.AttachmentLayout = AttachmentLayoutTypes.Carousel;
            reply.Attachments      = GetAdaptiveCard(result);
            if (result.Answers.Count > 1 && result.Answers.First().Score <= 0.95)
            {
                await context.PostAsync($"Top {result.Answers.Count()} suggestions are given, please give feedback");
            }

            await context.PostAsync(reply);
        }
Exemple #15
0
        private void LogAndLoadFeedbackDialog(IDialogContext context, QnAMakerResults qnaMakerResults)
        {
            var userQuestion = (context.Activity as Activity).Text;

            string botAnswer        = "";
            double answerConfidence = 0;
            bool   exitedInner      = false;

            // Check only for condition, when the control has come back from QnAFeedbackStep
            if (qnaMakerResults.Answers.Count > 1)
            {
                foreach (var answer in qnaMakerResults.Answers)
                {
                    foreach (var question in answer.Questions)
                    {
                        if (userQuestion == question)
                        {
                            if (answer.Score < 0.8)
                            {
                                answerConfidence = 0.8; // Since the "answer.Score" reported by the SDK is incorrect
                            }
                            else
                            {
                                answerConfidence = answer.Score;
                            }

                            botAnswer = HttpUtility.HtmlDecode(answer.Answer);

                            exitedInner = true;
                            break;
                        }
                    }
                    if (exitedInner)
                    {
                        break;
                    }
                }
            }

            if (answerConfidence == 0 && qnaMakerResults.Answers.Count > 0)
            {
                answerConfidence = qnaMakerResults.Answers.FirstOrDefault().Score;
            }

            if (qnaMakerResults.Answers.Count > 0 && answerConfidence >= 0.5)
            {
                if (string.IsNullOrEmpty(botAnswer))
                {
                    botAnswer = HttpUtility.HtmlDecode(qnaMakerResults.Answers.FirstOrDefault().Answer);
                }

                // Log Bot usage - Answer found
                //context.LogEvent("QnA", userProfile, new Dictionary<string, string> { { @"Intent", "MatchFound" }, { @"UserMsg", userQuestion }, { @"BotAnswer", botAnswer }, { @"AnswerConfidence", answerConfidence.ToString() } });
            }
            else
            {
                // Log Bot usage - No answer
                //context.LogEvent("QnA", BotApp.CurrentUserProfile, new Dictionary<string, string> { { @"Intent", "NoMatch" }, { @"UserMsg", userQuestion }, { @"AnswerConfidence", answerConfidence.ToString() } });
            }

            // pass user's question to the feedback dialog
            //context.Call(new FeedbackDialog(userQuestion, botAnswer, answerConfidence.ToString()), ResumeAfterFeedback);
        }
        protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults results)
        {
            try
            {
                if (results.Answers.Count > 0)
                {
                    var response = OverrideReponseForUserSpecificRequest(results, message.From.Id);
                    // Store Data if the user is authenticated
                    //if (message.From.Id != "default-user") => for now we do it just for the demo purpose
                    {
                        List <PastQnA> lastquestionsData;

                        // We want to suggest the previous questions only if we are in a new conversation
                        if (context.UserData.TryGetValue <List <PastQnA> >(LastQuestions, out lastquestionsData) &&
                            lastquestionsData.Any() &&
                            lastquestionsData.First().ConversationId != message.Conversation.Id)
                        {
                            StringBuilder previousQnA = new StringBuilder();
                            previousQnA.AppendLine("Hello. Here are the questions from your previous conversation:");

                            foreach (var qna in lastquestionsData)
                            {
                                previousQnA.AppendLine($"{qna.Question}");
                                previousQnA.AppendLine($"A: {qna.Answer}");
                            }
                            previousQnA.AppendLine("You can ask any other questions related to Direct deposit.");
                            context.UserData.SetValue(LastQuestions, new List <PastQnA>());
                            response = previousQnA.ToString();

                            await context.PostAsync(response);
                        }
                        else
                        {
                            var currentQnA = new PastQnA()
                            {
                                ConversationId = message.Conversation.Id,
                                Question       = results.Answers.First().Questions.First(),
                                Answer         = response
                            };

                            // We don't add initial greetings and concatenate the list of questions
                            if (!response.StartsWith("Hello", StringComparison.InvariantCultureIgnoreCase))
                            {
                                if (lastquestionsData != null)
                                {
                                    lastquestionsData.Add(currentQnA);
                                }
                                else
                                {
                                    lastquestionsData = new List <PastQnA>()
                                    {
                                        currentQnA
                                    };
                                }
                                context.UserData.SetValue(LastQuestions, lastquestionsData);
                            }
                            await context.PostAsync(response);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                await context.PostAsync("Sorry we did not get that. Please try again");
            }
        }
        private async Task ShowQuestions(IDialogContext context, QnAMakerResults result)
        {
            int    i;
            string resultMessage = "以下から選択してください(番号で入力)\n";

            JObject jsonObject1 = JObject.Parse(json);

            if (flag == 0)
            {
                if (result.Answers.Count >= displayNum)
                {
                    for (i = 0; i < displayNum; i++)
                    {
                        JObject jsonObject2 = JObject.Parse(jsonObject1["answers"][i].ToString());

                        if (jsonObject2.Last.Last.Count() == 0)
                        {
                            resultMessage = resultMessage + (i + 1).ToString() + ". " + result.Answers[i].Questions[0] + "\n";
                        }
                        else
                        {
                            resultMessage = resultMessage + (i + 1).ToString() + ". " + "[" + (string)httpResponseJson.answers[i].metadata[0].value + "]" + result.Answers[i].Questions[0] + "\n";
                        }
                    }

                    resultMessage = resultMessage + (i + 1).ToString() + ". 次の候補を表示する\n";

                    await context.PostAsync(resultMessage);

                    context.Wait(ShowAnswer);
                }
                else
                {
                    for (i = 0; i < result.Answers.Count; i++)
                    {
                        JObject jsonObject2 = JObject.Parse(jsonObject1["answers"][i].ToString());

                        if (jsonObject2.Last.Last.Count() == 0)
                        {
                            resultMessage = resultMessage + (i + 1).ToString() + ". " + result.Answers[i].Questions[0] + "\n";
                        }
                        else
                        {
                            resultMessage = resultMessage + (i + 1).ToString() + ". " + "[" + (string)httpResponseJson.answers[i].metadata[0].value + "]" + result.Answers[i].Questions[0] + "\n";
                        }
                    }

                    resultMessage = resultMessage + (i + 1).ToString() + ". 上記のどれでもない\n";

                    await context.PostAsync(resultMessage);

                    flag = 2;

                    context.Wait(ShowAnswer);
                }
            }
            else if (flag == 1)
            {
                for (i = displayNum; i < result.Answers.Count; i++)
                {
                    JObject jsonObject2 = JObject.Parse(jsonObject1["answers"][i].ToString());

                    if (jsonObject2.Last.Last.Count() == 0)
                    {
                        resultMessage = resultMessage + (i + 1).ToString() + ". " + result.Answers[i].Questions[0] + "\n";
                    }
                    else
                    {
                        resultMessage = resultMessage + (i + 1).ToString() + ". " + "[" + (string)httpResponseJson.answers[i].metadata[0].value + "]" + result.Answers[i].Questions[0] + "\n";
                    }
                }

                resultMessage = resultMessage + (i + 1).ToString() + ". 上記のどれでもない\n";

                await context.PostAsync(resultMessage);

                context.Wait(ShowAnswer);
            }
        }
 // Override to also include the knowledgebase question with the answer on confident matches
 protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults results)
 {
     if (results.Answers.Count > 0)
     {
         var response = "Here is the match from FAQ:  \r\n  Q: " + results.Answers.First().Questions.First() + "  \r\n A: " + results.Answers.First().Answer;
         await context.PostAsync(response);
     }
 }
 protected override bool IsConfidentAnswer(QnAMakerResults qnaMakerResults)
 {
     return(base.IsConfidentAnswer(qnaMakerResults));
 }
 // Override to log matched Q&A before ending the dialog
 protected override async Task DefaultWaitNextMessageAsync(IDialogContext context, IMessageActivity message, QnAMakerResults results)
 {
     Console.WriteLine("KB Question: " + results.Answers.First().Questions.First());
     Console.WriteLine("KB Answer: " + results.Answers.First().Answer);
     await base.DefaultWaitNextMessageAsync(context, message, results);
 }
Exemple #21
0
    protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
    {
        var      answer = result.Answers.First().Answer;
        Activity reply  = ((Activity)context.Activity).CreateReply();

        string[] qnaAnswerDate = answer.Split(';');
        int      dataSize      = qnaAnswerDate.Length;

        if (dataSize > 1 && dataSize <= 4)
        {
            var attachment = GetSelectedCard(answer);
            reply.Attachments.Add(attachment);

            await context.PostAsync(reply);
        }
        else
        {
            await context.PostAsync(answer);
        }
    }
        protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
        {
            // answer is a string
            var answer = result.Answers.First().Answer;

            Activity reply = ((Activity)context.Activity).CreateReply();

            string[] qnaAnswerData = answer.Split(';');
            int      dataSize      = qnaAnswerData.Length;

            string title       = qnaAnswerData[0];
            string description = qnaAnswerData[1];
            string url         = qnaAnswerData[2];
            string imageURL    = qnaAnswerData[3];

            HeroCard card = new HeroCard
            {
                Title    = title,
                Subtitle = description,
            };

            card.Buttons = new List <CardAction>
            {
                new CardAction(ActionTypes.OpenUrl, "Learn More", value: url)
            };

            card.Images = new List <CardImage>
            {
                new CardImage(url = imageURL)
            };

            reply.Attachments.Add(card.ToAttachment());


            await context.PostAsync(reply);
        }
Exemple #23
0
        ////// Override to log matched Q&A before ending the dialog
        protected override async Task DefaultWaitNextMessageAsync(IDialogContext context, IMessageActivity message, QnAMakerResults results)
        {
            // get the URL
            // await context.PostAsync("asdfasd");


            var answer = results.Answers.First().Answer;
            //string[] qnaAnswerData = answer.Split(';');
            //string qnaURL = qnaAnswerData[2];

            // pass user's question
            var userQuestion = (context.Activity as Activity).Text;

            context.Call(new BotBlog.Dialogs.Qna.FeedbackDialog("url", userQuestion), ResumeAfterFeedback);
        }
        protected override async Task DefaultWaitNextMessageAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
        {
            // get the URL
            var answer = result.Answers.First().Answer;

            string[] qnaAnswerData = answer.Split(';');
            string   qnaURL        = qnaAnswerData[2];

            // pass user's question
            var userQuestion = (context.Activity as Activity).Text;

            context.Call(new FeedbackDialog(qnaURL, userQuestion), ResumeAfterFeedback);
        }
Exemple #25
0
 protected override bool IsConfidentAnswer(QnAMakerResults qnaMakerResults)
 {
     return(true);
 }
Exemple #26
0
        //// Override to also include the knowledgebase question with the answer on confident matches
        protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults qnaMakerResults)
        {
            string language = "en-us";

            if (qnaMakerResults.Answers.Count > 0 && qnaMakerResults.Answers.FirstOrDefault().Score >= 0.5)
            {
                await PostReplyToUser(context, qnaMakerResults);
            }
            else
            {
                var userFeedbackMessage = string.Format("I know nothing about {0}. Let me goog... err, bing it.", message.Text);

                // Post the No answer found message to the user
                await context.SayAsync(userFeedbackMessage, userFeedbackMessage);

                // Show generic Help (Bing Search)
                await BingSearchService.DisplaySearchResults(((Activity)context.Activity).Text, language, context);
            }
        }
        protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
        {
            var      answer = result.Answers.First().Answer;
            Activity reply  = ((Activity)context.Activity).CreateReply();

            string[] qnaAnswerData = answer.Split(';');
            int      dataSize      = qnaAnswerData.Length;

            //image and video card
            if (dataSize > 1 && dataSize <= 6)
            {
                var attachment = GetSelectedCard(answer);
                reply.Attachments.Add(attachment);
                await context.PostAsync(reply);
            }
            else
            {
                await context.Forward(new BasicQnAMakerDialog(), AfterAnswerAsync, message, CancellationToken.None);

                await context.PostAsync(reply);
            }
        }
Exemple #28
0
 //// Override to log matched Q&A before ending the dialog
 protected override async Task DefaultWaitNextMessageAsync(IDialogContext context, IMessageActivity message, QnAMakerResults qnaMakerResults)
 {
     LogAndLoadFeedbackDialog(context, qnaMakerResults);
 }
Exemple #29
0
        protected override async Task DefaultWaitNextMessageAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
        {
            var answer = result.Answers.FirstOrDefault();

            if (answer != null)
            {
                var question = answer.Questions.FirstOrDefault();
                TheMovieDBService movieService = new TheMovieDBService();
                var media = await movieService.GetMediaByName(question.ToString(), category);

                if (media != null)
                {
                    var card = new CardPersonalizedService().CreateCard(media);
                    var msg  = context.MakeMessage();
                    msg.Attachments.Add(card.ToAttachment());

                    await context.PostAsync(msg);

                    context.Done(message);
                }
            }
        }
Exemple #30
0
        protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
        {
            var firstAnswer = result.Answers.First().Answer;

            var response = ((Activity)context.Activity).CreateReply();

            var splitedAnswer = firstAnswer.Split(';').Select(a => a.Trim()).ToList();

            if (splitedAnswer.Count() > 1)
            {
                var title       = splitedAnswer[0];
                var description = splitedAnswer[1];
                var url         = splitedAnswer[2];
                var imageUrl    = splitedAnswer[3];

                var card = new HeroCard(title, description);

                card.Buttons = new List <CardAction>
                {
                    new CardAction(ActionTypes.OpenUrl, "Compre agora", value: url)
                };

                card.Images = new List <CardImage>
                {
                    new CardImage(imageUrl)
                };

                response.Attachments.Add(card.ToAttachment());

                await context.PostAsync(response);

                return;
            }

            await context.PostAsync(firstAnswer);
        }