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); } } }
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); }
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); }
protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result) { //await base.RespondFromQnAMakerResultAsync(context, message, result); await SendAwnser(context, result); }
protected override async Task DefaultWaitNextMessageAsync(IDialogContext context, IMessageActivity message, QnAMakerResults results) { IMessageActivity newMessage = context.MakeMessage(); newMessage.Text = typeResultInQnA; context.Done <IMessageActivity>(newMessage); }
/// <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)); } }
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); }
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); }
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)); }
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); } }
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); }
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); }
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); }
////// 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); }
protected override bool IsConfidentAnswer(QnAMakerResults qnaMakerResults) { return(true); }
//// 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); } }
//// Override to log matched Q&A before ending the dialog protected override async Task DefaultWaitNextMessageAsync(IDialogContext context, IMessageActivity message, QnAMakerResults qnaMakerResults) { LogAndLoadFeedbackDialog(context, qnaMakerResults); }
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); } } }
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); }