예제 #1
0
        public Attachment CreateAttachment(int Index, string dataJson)
        {
            if (string.IsNullOrEmpty(dataJson))
            {
                var adaptiveCardJson       = File.ReadAllText(_path[Index]);
                var adaptiveCardAttachment = new Attachment()
                {
                    ContentType = "application/vnd.microsoft.card.adaptive",
                    Content     = JsonConvert.DeserializeObject(adaptiveCardJson),
                };
                return(adaptiveCardAttachment);
            }
            else
            {
                var CardJson = File.ReadAllText(_path[Index]);

                var transformer = new AdaptiveTransformer();
                var cardJson    = transformer.Transform(CardJson, dataJson);

                var adaptiveCardAttachment = new Attachment()
                {
                    ContentType = "application/vnd.microsoft.card.adaptive",
                    Content     = JsonConvert.DeserializeObject(cardJson),
                };
                return(adaptiveCardAttachment);
            }
        }
        public static async Task GetUserAsync(ITurnContext turnContext, TokenResponse tokenResponse, string upn)
        {
            if (turnContext == null)
            {
                throw new ArgumentNullException(nameof(turnContext));
            }

            if (tokenResponse == null)
            {
                throw new ArgumentNullException(nameof(tokenResponse));
            }

            var client = new SimpleGraphClient(tokenResponse.Token);
            var user   = await client.GetUserAsync(upn);

            var fileRead = System.IO.File.ReadAllText(@".\Resources\GetUserCard.json");
            var item     = (JObject)JsonConvert.DeserializeObject(fileRead);

            string classData = JsonConvert.SerializeObject(user, Formatting.Indented);

            AdaptiveTransformer transformer = new AdaptiveTransformer();
            string cardJson = transformer.Transform(fileRead, classData);

            Attachment attachment = new Attachment();

            attachment.ContentType = "application/vnd.microsoft.card.adaptive";
            attachment.Content     = JsonConvert.DeserializeObject(cardJson);

            var attachments = new List <Attachment>();
            var reply       = MessageFactory.Attachment(attachments);

            reply.Attachments.Add(attachment);

            await turnContext.SendActivityAsync(reply);
        }
        // Send a Rich Card response to the user based on their choice.
        // This method is only called when a valid prompt response is parsed from the user's response to the ChoicePrompt.
        private async Task <DialogTurnResult> ShowCardStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var templateJson = File.ReadAllText(Path.Combine(".", "Cards", "OrderHeader.json"));
            var dataJson     = File.ReadAllText(Path.Combine(".", "Cards", "TestData.json"));
            var transformer  = new AdaptiveTransformer();
            //var cardJson = transformer.Transform(templateJson, dataJson);

            // Cards are sent as Attachments in the Bot Framework.
            // So we need to create a list of attachments for the reply activity.

            // Reply to the activity we received with an activity.
            //var adaptiveCardAttachment = new Attachment()
            //{
            //    ContentType = "application/vnd.microsoft.card.adaptive",
            //    Content = templateJson,
            //};

            List <SalesOrderHeader> salesOrders = (List <SalesOrderHeader>)stepContext.Result;

            var attachments = new List <Attachment>();
            var reply       = MessageFactory.Attachment(attachments);

            for (int i = 0; i < salesOrders.Count; i++)
            {
                reply.Attachments.Add(Cards.GetOrderCard(salesOrders[i]).ToAttachment());
            }
            //reply.Attachments.Add(Cards.CreateAdaptiveCardAttachment(Path.Combine(".", "Cards", "OrderHeader.json")));

            // Send the card(s) to the user as an attachment to the activity
            await stepContext.Context.SendActivityAsync(reply, cancellationToken);

            return(await stepContext.EndDialogAsync());
        }
예제 #4
0
        private Attachment CreateBookingConfimrationCardAttachment(FlightitineraryModel data)
        {
            try
            {
                var cardResourcePath = "TravelBookingBot.Cards.flightCard.json";

                using (var stream = GetType().Assembly.GetManifestResourceStream(cardResourcePath))
                {
                    using (var reader = new StreamReader(stream))
                    {
                        var adaptiveCardTempalte = reader.ReadToEnd();
                        JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings
                        {
                            DateFormatHandling   = DateFormatHandling.IsoDateFormat,
                            DateTimeZoneHandling = DateTimeZoneHandling.Utc
                        };
                        var dataJson = JsonConvert.SerializeObject(data, microsoftDateFormatSettings);


                        var transformer = new AdaptiveTransformer();
                        var cardJson    = transformer.Transform(adaptiveCardTempalte, dataJson);

                        return(new Attachment()
                        {
                            ContentType = AdaptiveCards.AdaptiveCard.ContentType,// "application/vnd.microsoft.card.adaptive",
                            Content = JsonConvert.DeserializeObject(cardJson),
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
예제 #5
0
        private static async Task <DialogTurnResult> ConfirmStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var rawValues   = (JObject)stepContext.Context.Activity.Value;
            var userProfile = (UserProfile)stepContext.Values[UserInfo];

            userProfile.Domain            = (string)rawValues.GetValue("Domain");
            userProfile.UserPrincipalName = userProfile.DomainName + userProfile.Domain;

            Dictionary <string, object> args = (Dictionary <string, object>)stepContext.Options;
            Attachment cardAttachment        = (Attachment)args["cardAttachment"];

            var fileRead = cardAttachment.Content.ToString();

            string classData = JsonConvert.SerializeObject(userProfile, Formatting.Indented);

            AdaptiveTransformer transformer = new AdaptiveTransformer();

            cardAttachment.Content = JsonConvert.DeserializeObject(transformer.Transform(fileRead, classData));

            return(await stepContext.PromptAsync(
                       nameof(TextPrompt),
                       new PromptOptions
            {
                Prompt = new Activity
                {
                    Type = ActivityTypes.Message,
                    Attachments = new List <Attachment>()
                    {
                        cardAttachment
                    },
                },
            },
                       cancellationToken : cancellationToken));
        }
예제 #6
0
        public string AsJson <T>(T data)
        {
            var cardJson = AsJson();
            var cardData = JsonConvert.SerializeObject(data);

            var transformer = new AdaptiveTransformer();

            return(transformer.Transform(cardJson, cardData));
        }
        private Attachment buildWeatherCard(string templateJson, string dataJson)
        {
            var transformer = new AdaptiveTransformer();
            var cardJson    = transformer.Transform(templateJson, dataJson);

            return(new Attachment()
            {
                ContentType = "application/vnd.microsoft.card.adaptive",
                Content = JsonConvert.DeserializeObject(cardJson)
            });
        }
예제 #8
0
 /// <summary>
 /// Transforms the given input onto the transformtemplate and
 /// returns it as the given type if matching.
 /// transformTemplate has to match the class structure of T
 /// </summary>
 /// <typeparam name="T">Desired Output Type</typeparam>
 /// <param name="input">Any serializable input, can be string or any object</param>
 /// <param name="transformTemplate">a transformer compatible template</param>
 /// <returns></returns>
 public static T TransformData <T>(object input, string transformTemplate)
 {
     try
     {
         var transformedData = new AdaptiveTransformer().Transform(transformTemplate, JsonConvert.SerializeObject(input));
         return(JsonConvert.DeserializeObject <T>(transformedData));
     }
     catch (Exception ex)
     {
         throw new Exception("An error occured transforming the data, does your class match the template?", ex);
     }
 }
예제 #9
0
        private string PopulateCard(string cardJson, string templateName)
        {
            // return template if no data
            if (string.IsNullOrEmpty(cardJson))
            {
                return(LoadCardTemplate(templateName));
            }

            var templateJson  = LoadCardTemplate(templateName);
            var transformer   = new AdaptiveTransformer();
            var populatedCard = transformer.Transform(templateJson, cardJson);

            return(populatedCard);
        }
예제 #10
0
        public static Attachment CreateAdaptiveCardFromTemplateAndDataAttachment <T>(string filePath, T data)
        {
            var transformer  = new AdaptiveTransformer();
            var templateJson = File.ReadAllText(filePath);
            var dataJson     = JsonConvert.SerializeObject(data);
            var cardJson     = transformer.Transform(templateJson, dataJson);

            var adaptiveCardAttachment = new Attachment()
            {
                ContentType = "application/vnd.microsoft.card.adaptive",
                Content     = JsonConvert.DeserializeObject(cardJson),
            };

            return(adaptiveCardAttachment);
        }
예제 #11
0
        private AdaptiveCard CreateWeatherCard(HeWeather6Item weather)
        {
            var templateJson = "{\r\n  \"$schema\": \"http://adaptivecards.io/schemas/adaptive-card.json\",\r\n  \"type\": \"AdaptiveCard\",\r\n  \"version\": \"1.0\",\r\n  \"body\": [\r\n    {\r\n      \"type\": \"TextBlock\",\r\n      \"text\": \"{name}\",\r\n      \"size\": \"Large\",\r\n      \"isSubtle\": true\r\n    },\r\n    {\r\n      \"type\": \"ColumnSet\",\r\n      \"columns\": [\r\n        {\r\n          \"type\": \"Column\",\r\n          \"width\": \"auto\",\r\n          \"items\": [\r\n            {\r\n              \"type\": \"Image\",\r\n              \"url\": \"{iconUrl}\",\r\n              \"size\": \"Small\"\r\n            }\r\n          ]\r\n        },\r\n        {\r\n          \"type\": \"Column\",\r\n          \"width\": \"auto\",\r\n          \"items\": [\r\n            {\r\n              \"type\": \"TextBlock\",\r\n              \"text\": \"{tmp}\",\r\n              \"size\": \"ExtraLarge\",\r\n              \"spacing\": \"None\"\r\n            }\r\n          ]\r\n        },\r\n        {\r\n          \"type\": \"Column\",\r\n          \"width\": \"stretch\",\r\n          \"items\": [\r\n            {\r\n              \"type\": \"TextBlock\",\r\n              \"text\": \"℃\",\r\n              \"weight\": \"Bolder\",\r\n              \"spacing\": \"Small\"\r\n            }\r\n          ]\r\n        }\r\n      ]\r\n    }\r\n  ]\r\n}";
            var dataJson     = JsonConvert.SerializeObject(new
            {
                name    = $"{weather.basic.location},{weather.basic.parent_city}",
                iconUrl = $"https://cdn.heweather.com/cond_icon/{weather.now.cond_code}.png",
                weather.now.tmp
            });
            var transformer = new AdaptiveTransformer();
            var cardJson    = transformer.Transform(templateJson, dataJson);

            var result = AdaptiveCard.FromJson(cardJson);

            return(result.Card);
        }
예제 #12
0
        public static async Task <AdaptiveCard> GetCardAsync(ITurnContext turnContext, AddToProjectCardActionValue payload)
        {
            var templateJson   = String.Empty;
            var assembly       = Assembly.GetEntryAssembly();
            var resourceStream = assembly.GetManifestResourceStream("ConsultingBot.Cards.AddToProjectConfirmationCard.json");

            using (var reader = new StreamReader(resourceStream, Encoding.UTF8))
            {
                templateJson = await reader.ReadToEndAsync();
            }

            var dataJson = JsonConvert.SerializeObject(payload);

            var transformer = new AdaptiveTransformer();
            var cardJson    = transformer.Transform(templateJson, dataJson);

            return(AdaptiveCard.FromJson(cardJson).Card);
        }
예제 #13
0
        public static async Task<AdaptiveCard> GetCardAsync(ITurnContext turnContext, ConsultingRequestDetails requestDetails)
        {
            var templateJson = String.Empty;
            var assembly = Assembly.GetEntryAssembly();
            var resourceStream = assembly.GetManifestResourceStream("ConsultingBot.Cards.AddToProjectCard.json");
            using (var reader = new StreamReader(resourceStream, Encoding.UTF8))
            {
                templateJson = await reader.ReadToEndAsync();
            }

            requestDetails.monthZero = GetMonthFromNow(0).ToString("MMMM, yyyy");
            requestDetails.monthOne = GetMonthFromNow(1).ToString("MMMM, yyyy");
            requestDetails.monthTwo = GetMonthFromNow(2).ToString("MMMM, yyyy");
            var dataJson = JsonConvert.SerializeObject(requestDetails);

            var transformer = new AdaptiveTransformer();
            var cardJson = transformer.Transform(templateJson, dataJson);

            var result = AdaptiveCard.FromJson(cardJson).Card;
            return result;
        }
예제 #14
0
        private async Task <DialogTurnResult> TherapistSearch(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            List <JToken> therapists = await FilterTherapists(stepContext);

            if (therapists.Capacity == 0)
            {
                return(await stepContext.PromptAsync(DialogIds.NoneFound, new PromptOptions()
                {
                    Prompt = await _responder.RenderTemplate(stepContext.Context, stepContext.Context.Activity.Locale,
                                                             EscalateResponses.ResponseIds.NoneFound),
                }));
            }

            // Fix ToString if it doesn't work
            var templateJson = _templateEngine.GenerateActivityForLocale("TherapistRecommendationCard");

            var templateString = templateJson.Attachments.Single().Content.ToString();

            var cardList = new List <string>();

            foreach (var t in therapists)
            {
                // Convert to string

                var dataJson = t.ToString();

                var transformer = new AdaptiveTransformer();
                var cardJson    = transformer.Transform(templateString, dataJson);

                // Create attachment
                cardList.Add(cardJson);
            }

            var carousel = MessageFactory.Carousel(cardList.Select(c => { return(jsonToCard(c)); }).ToList());

            // Return card
            await stepContext.Context.SendActivityAsync(carousel);

            return(await EndDialogAndProcessing(stepContext, cancellationToken));
        }
예제 #15
0
        //public Attachment Create(string cardResourcePath)
        //{
        //    using (var stream = GetType().Assembly.GetManifestResourceStream(cardResourcePath))
        //    {
        //        using (var reader = new StreamReader(stream))
        //        {
        //            var adaptiveCard = reader.ReadToEnd();
        //            return new Attachment()
        //            {
        //                ContentType = "application/vnd.microsoft.card.adaptive",
        //                Content = JsonConvert.DeserializeObject(adaptiveCard),
        //            };
        //        }
        //    }
        //}

        //public Attachment CreateAttachment(string filePath)
        //{
        //    var adaptiveCardJson = File.ReadAllText(filePath);
        //    var adaptiveCardAttachment = new Attachment()
        //    {
        //        ContentType = "application/vnd.microsoft.card.adaptive",
        //        Content = JsonConvert.DeserializeObject(adaptiveCardJson),
        //    };
        //    return adaptiveCardAttachment;
        //}

        //public Attachment CreateAttachment(int Index)
        //{
        //    var adaptiveCardJson = File.ReadAllText(_path[Index]);
        //    var adaptiveCardAttachment = new Attachment()
        //    {
        //        ContentType = "application/vnd.microsoft.card.adaptive",
        //        Content = JsonConvert.DeserializeObject(adaptiveCardJson),
        //    };

        //    return adaptiveCardAttachment;
        //}

        public Attachment CreateAttachment(int Index, string dataJson)
        {
            if (string.IsNullOrEmpty(dataJson))
            {
                //string adaptiveCardJson;

                //switch (Index)
                //{
                //    case 0:
                //        adaptiveCardJson = File.ReadAllText(https://munibotstorage.blob.core.windows.net/cards/WelcomeCard.json);
                //        break;
                //    default:
                //        adaptiveCardJson = "";
                //        break;
                //}

                var adaptiveCardJson       = File.ReadAllText(_path[Index]);
                var adaptiveCardAttachment = new Attachment()
                {
                    ContentType = "application/vnd.microsoft.card.adaptive",
                    Content     = JsonConvert.DeserializeObject(adaptiveCardJson),
                };
                return(adaptiveCardAttachment);
            }
            else
            {
                var CardJson = File.ReadAllText(_path[Index]);

                var transformer = new AdaptiveTransformer();
                var cardJson    = transformer.Transform(CardJson, dataJson);

                var adaptiveCardAttachment = new Attachment()
                {
                    ContentType = "application/vnd.microsoft.card.adaptive",
                    Content     = JsonConvert.DeserializeObject(cardJson),
                };
                return(adaptiveCardAttachment);
            }
        }