//When more than one reponse private async Task QnAFeedbackHandler(IDialogContext context, string userQuery, QuestionResponse.QnAMakerResult results) { this.qnaMakerResults = results; var qnaList = qnaMakerResults.Answers; await context.PostAsync(CreateHeroCard(context, qnaList)); context.Wait(HandleQuestionResponse); }
protected static IMessageActivity ProcessResultAndCreateMessageActivity(IDialogContext context, ref QuestionResponse.QnAMakerResult result) { var message = context.MakeMessage(); var attachmentsItemRegex = new Regex("((<attachment){1}((?:\\s+)|(?:(contentType="[\\w\\/-]+"))(?:\\s+)|(?:(contentUrl="[\\w:/.=?-]+"))(?:\\s+)|(?:(name="[\\w\\s&?\\-.@%$!£\\(\\)]+"))(?:\\s+)|(?:(thumbnailUrl="[\\w:/.=?-]+"))(?:\\s+))+(/>))", RegexOptions.IgnoreCase); var matches = attachmentsItemRegex.Matches(result.Answers.First().Answer); foreach (var attachmentMatch in matches) { result.Answers.First().Answer = result.Answers.First().Answer.Replace(attachmentMatch.ToString(), string.Empty); var match = attachmentsItemRegex.Match(attachmentMatch.ToString()); string contentType = string.Empty; string name = string.Empty; string contentUrl = string.Empty; string thumbnailUrl = string.Empty; foreach (var group in match.Groups) { if (group.ToString().ToLower().Contains("contenttype=")) { contentType = group.ToString().ToLower().Replace(@"contenttype="", string.Empty).Replace(""", string.Empty); } if (group.ToString().ToLower().Contains("contenturl=")) { contentUrl = group.ToString().ToLower().Replace(@"contenturl="", string.Empty).Replace(""", string.Empty); } if (group.ToString().ToLower().Contains("name=")) { name = group.ToString().ToLower().Replace(@"name="", string.Empty).Replace(""", string.Empty); } if (group.ToString().ToLower().Contains("thumbnailurl=")) { thumbnailUrl = group.ToString().ToLower().Replace(@"thumbnailurl="", string.Empty).Replace(""", string.Empty); } } var attachment = new Attachment(contentType, contentUrl, name: !string.IsNullOrEmpty(name) ? name : null, thumbnailUrl: !string.IsNullOrEmpty(thumbnailUrl) ? thumbnailUrl : null); message.Attachments.Add(attachment); } return(message); }
// Presents the user with the feedback question. protected async Task AnswerFeedbackMessageAsync(IDialogContext context, IMessageActivity message, QuestionResponse.QnAMakerResult result) { if (result.Answers.Count() != 0) { if (message.Text.Equals(Resource.noneOfTheAboveOption)) { await context.PostAsync("Alright, maybe try rephrasing the question. Or if you prefer here's a link to the documentation http://omnia-docs.readthedocs.io/en/latest/."); context.Done(false); } else { var reply = context.MakeMessage(); reply.Attachments = new List <Attachment>(); List <CardAction> cardButtons = new List <CardAction>(); CardAction cardActionYes = new CardAction() { Type = "postBack", Title = "Yes", Value = "Yes" }; CardAction cardActionNo = new CardAction() { Type = "postBack", Title = "No", Value = "No" }; HeroCard card = new HeroCard() { Title = "Was this answer helpful?", Buttons = cardButtons }; cardButtons.Add(cardActionYes); cardButtons.Add(cardActionNo); Attachment atch = card.ToAttachment(); reply.Attachments.Add(atch); await context.PostAsync(reply); context.Wait(this.HandleHelpfulResponse); } } else { await context.PostAsync("No match could be found"); context.Done(false); } }
// Handles the reponse when only 1 answers was returned public virtual async Task DefaultMatchHandler(IDialogContext context, string originalQueryText, QuestionResponse.QnAMakerResult result) { var messageActivity = ProcessResultAndCreateMessageActivity(context, ref result); messageActivity.Text = result.Answers.First().Answer; await context.PostAsync(messageActivity); await AnswerFeedbackMessageAsync(context, messageActivity, result); }