コード例 #1
0
        /// <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());
            }
        }
コード例 #2
0
        /// <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());
            }
        }
コード例 #3
0
        private void PopulateReplyFromResponse(Activity reply, BotResponse response)
        {
            var replyTemplate = response.Reply;

            reply.Text      = replyTemplate.Text;
            reply.Speak     = replyTemplate.Speak;
            reply.InputHint = response.InputHint;
        }
コード例 #4
0
        /// <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());
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        /// <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());
            }
        }
コード例 #7
0
        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);
        }