/// <inheritdoc/> public void BuildAdaptiveCardGroupReply <T>(Activity reply, BotResponse response, string cardPath, string attachmentLayout, List <T> cardDataAdapters, StringDictionary tokens = null) where T : CardDataBase { var tokensCopy = CopyTokens(tokens); var parsedResponse = this.ParseResponse(response, tokensCopy); var parsedCards = this.ParseAndCreateCards(cardPath, cardDataAdapters, tokensCopy, parsedResponse); this.PopulateReplyFromResponse(reply, response); if (cardDataAdapters.Count > 1) { reply.AttachmentLayout = attachmentLayout; } foreach (var card in parsedCards) { reply.Attachments.Add(AdaptiveCardHelper.CreateCardAttachment(card)); } if (response.SuggestedActions?.Length > 0) { reply.SuggestedActions = new SuggestedActions( actions: response.SuggestedActions.Select(choice => new CardAction( ActionTypes.ImBack, choice, value: choice.ToLower(), displayText: choice.ToLower(), text: choice.ToLower())).ToList()); } }
/// <inheritdoc/> public void BuildAdaptiveCardReply <T>(Activity reply, BotResponse response, string cardPath, T cardDataAdapter, StringDictionary tokens = null) where T : CardDataBase { var tokensCopy = CopyTokens(tokens); var parsedResponse = this.ParseResponse(response, tokensCopy); var parsedCards = this.ParseAndCreateCards(cardPath, new List <T> { cardDataAdapter }, tokensCopy, parsedResponse); this.PopulateReplyFromResponse(reply, response); if (reply.Attachments == null) { reply.Attachments = new List <Attachment>(); } reply.Attachments.Add(AdaptiveCardHelper.CreateCardAttachment(parsedCards[0])); if (response.SuggestedActions?.Length > 0) { reply.SuggestedActions = new SuggestedActions( actions: response.SuggestedActions.Select(choice => new CardAction( ActionTypes.ImBack, choice, value: choice.ToLower(), displayText: choice.ToLower(), text: choice.ToLower())).ToList()); } }
private void PopulateReplyFromResponse(Activity reply, BotResponse response) { var replyTemplate = response.Reply; reply.Text = replyTemplate.Text; reply.Speak = replyTemplate.Speak; reply.InputHint = response.InputHint; }
/// <inheritdoc/> public void BuildYesNoReply(Activity reply, BotResponse response, StringDictionary tokens = null) { var parsedResponse = this.ParseResponse(response, tokens); this.PopulateReplyFromResponse(reply, parsedResponse); var yesNo = new[] { "Yes", "No" }; reply.SuggestedActions = new SuggestedActions( actions: yesNo.Select(choice => new CardAction( ActionTypes.ImBack, choice, value: choice.ToLower(), displayText: choice.ToLower(), text: choice.ToLower())).ToList()); }
private BotResponse ParseResponse(BotResponse response, StringDictionary tokens) { foreach (var reply in response.Replies) { if (reply.Text != null) { reply.Text = this.Format(reply.Text, tokens); } if (reply.Speak != null) { reply.Speak = this.Format(reply.Speak, tokens); } } return(response); }
/// <inheritdoc/> public void BuildMessageReply(Activity reply, BotResponse response, StringDictionary tokens = null) { var parsedResponse = this.ParseResponse(response, tokens); this.PopulateReplyFromResponse(reply, parsedResponse); if (parsedResponse.SuggestedActions?.Length > 0) { reply.SuggestedActions = new SuggestedActions( actions: response.SuggestedActions.Select(choice => new CardAction( ActionTypes.ImBack, choice, value: choice.ToLower(), displayText: choice.ToLower(), text: choice.ToLower())).ToList()); } }
private List <AdaptiveCard> ParseAndCreateCards <T>(string cardPath, List <T> cardDataAdapters, StringDictionary tokens, BotResponse parsedResponse) where T : CardDataBase { if (!tokens.ContainsKey("Text")) { tokens.Add("Text", parsedResponse.Reply.Text); } if (!tokens.ContainsKey("Speak")) { tokens.Add("Speak", parsedResponse.Reply.Speak); } var properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (var property in properties) { if (!tokens.ContainsKey(property.Name)) { tokens.Add(property.Name, string.Empty); } } // Create list of cards. var cards = new List <AdaptiveCard>(); foreach (var cardDataAdapter in cardDataAdapters) { // Add or update the public properties of the data type for the card to the tokens list. foreach (var property in properties) { var value = cardDataAdapter.GetType().GetProperty(property.Name).GetValue(cardDataAdapter, null)?.ToString(); if (value != null) { value = SimpleTokensRegex.Replace(value, match => tokens[match.Groups[1].Value]); } if (!tokens.ContainsKey(property.Name)) { tokens.Add(property.Name, value); } else { tokens[property.Name] = value; } } cards.Add(AdaptiveCardHelper.GetCardFromJson(cardPath, tokens)); } return(cards); }