Beispiel #1
0
        public override async Task <ScubaCardResult> GetCardResult(UserScubaData scubaData, JObject value, string messageText)
        {
            var info = new Models.PersonalInfo();

            info.Name  = value.Value <string>("firstlast");
            info.Email = value.Value <string>("email");
            info.Phone = value.Value <string>("phone");

            var error = GetErrorMessage(info);

            if (!string.IsNullOrEmpty(error))
            {
                return new ScubaCardResult()
                       {
                           ErrorMessage = error
                       }
            }
            ;

            scubaData.PersonalInfo = info;

            return(new ScubaCardResult()
            {
                CardText = await GetCardText(scubaData)
            });
        }
 public override async Task <ScubaCardResult> GetCardResult(UserScubaData scubaData, JObject messageValue, string messageText)
 {
     return(new ScubaCardResult()
     {
         CardText = await base.GetCardText()
     });
 }
Beispiel #3
0
        public override async Task <ScubaCardResult> GetCardResult(UserScubaData scubaData, JObject value, string messageText)
        {
            var info = new Models.PersonalInfo();

            if (value != null)
            {
                info.Name  = GetValue(value, "firstlast");
                info.Email = GetValue(value, "email");
                info.Phone = GetValue(value, "phone");
            }

            var error = GetErrorMessage(info);

            if (!string.IsNullOrEmpty(error))
            {
                return new ScubaCardResult()
                       {
                           ErrorMessage = error
                       }
            }
            ;

            scubaData.PersonalInfo = info;

            return(new ScubaCardResult()
            {
                CardText = await GetCardText(scubaData), NotifySubscribers = true
            });
        }
Beispiel #4
0
        private async Task<string> GetCardText(UserScubaData scubaData)
        {
            var replaceInfo = new Dictionary<string, string>();
            replaceInfo.Add("{{destination}}", scubaData.Destination);

            return await base.GetCardText(replaceInfo);
        }
Beispiel #5
0
        public override async Task <ScubaCardResult> GetCardResult(UserScubaData scubaData, JObject value, string messageText)
        {
            var date = value != null?value.Value <string>("scheduleDate") : messageText;

            if (date.ToLower() != "back")
            {
                var error = GetErrorMessage(date);
                if (!string.IsNullOrEmpty(error))
                {
                    return new ScubaCardResult()
                           {
                               ErrorMessage = error
                           }
                }
                ;

                scubaData.Date             = date;
                scubaData.CurrentCardIndex = CardIndex + 1;
            }

            return(new ScubaCardResult()
            {
                CardText = await base.GetCardText()
            });
        }
Beispiel #6
0
        public override async Task <ScubaCardResult> GetCardResult(UserScubaData scubaData, JObject value, string messageText)
        {
            var destination = value != null?value.Value <string>("destination") : messageText;

            if (destination.ToLower() != "back")
            {
                var error = GetErrorMessage(destination);
                if (!string.IsNullOrEmpty(error))
                {
                    return new ScubaCardResult()
                           {
                               ErrorMessage = error
                           }
                }
                ;

                scubaData.CurrentCardIndex = CardIndex + 1;
                scubaData.Destination      = destination;
            }

            return(new ScubaCardResult()
            {
                CardText = await GetCardText(scubaData)
            });
        }
Beispiel #7
0
        private async Task <string> GetCardText(UserScubaData scubaData)
        {
            var replaceInfo = new Dictionary <string, string>();

            replaceInfo.Add("{{number_of_people}}", scubaData.NumberOfPeople);

            return(await base.GetCardText(replaceInfo));
        }
Beispiel #8
0
        private async Task <string> GetCardText(UserScubaData scubaData)
        {
            var replaceInfo = new Dictionary <string, string>();

            replaceInfo.Add("{{school}}", scubaData.School);

            return(await base.GetCardText(replaceInfo));
        }
Beispiel #9
0
        public override async Task<ScubaCardResult> GetCardResult(UserScubaData scubaData, JObject value, string messageText)
        {
            var destination = value != null ? value.Value<string>("destination") : messageText;

            var error = GetErrorMessage(destination);
            if (!string.IsNullOrEmpty(error))
                return new ScubaCardResult() { ErrorMessage = error };

            scubaData.Destination = destination;

            return new ScubaCardResult() { CardText = await GetCardText(scubaData) };
        }
Beispiel #10
0
        public static async Task NotifySubscribers(UserScubaData userScubaData, BotAdapter adapter, MicrosoftAppCredentials workingCredentials, ConversationReference reserverReference = null)
        {
            if (reserverReference != null)
            {
                var scubaReservation = new Tuple <ConversationReference, UserScubaData>(reserverReference, userScubaData);
                _recentReservations.AddOrUpdate(reserverReference.User.Id, scubaReservation, (key, oldValue) => scubaReservation);
                //todo: this should not be a hard coded url
                userScubaData.ChatWithUserUrl = "https://contososcubademo.azurewebsites.net?chatWithId=" + reserverReference.User.Id;
                //chatWithUserIdUrl = "Use this URL to chat with them: http://localhost:3979?chatWithId=" + reserverReference.User.Id;
            }
            string message = $"New scuba booking for {userScubaData.PersonalInfo.Name}";

            var replaceInfo = new Dictionary <string, string>();

            replaceInfo.Add("{{destination}}", userScubaData.Destination);
            replaceInfo.Add("{{school}}", userScubaData.School);
            replaceInfo.Add("{{longdate}}", Convert.ToDateTime(userScubaData.Date).ToString("dddd, MMMM dd"));
            replaceInfo.Add("{{number_of_people}}", userScubaData.NumberOfPeople);
            replaceInfo.Add("{{phone}}", userScubaData.PersonalInfo.Phone);
            replaceInfo.Add("{{email}}", userScubaData.PersonalInfo.Email);
            replaceInfo.Add("{{name}}", userScubaData.PersonalInfo.Name);
            replaceInfo.Add("{{protein_preference}}", userScubaData.MealOptions.ProteinPreference);
            replaceInfo.Add("{{vegan}}", userScubaData.MealOptions.Vegan ? "Yes" : "No");
            replaceInfo.Add("{{allergy}}", userScubaData.MealOptions.Alergy);

            if (!string.IsNullOrEmpty(userScubaData.ChatWithUserUrl))
            {
                replaceInfo.Add("{{url}}", userScubaData.ChatWithUserUrl);
            }


            var subscriberCardText = await CardProvider.GetCardText("SubscriberNotification", replaceInfo);

            var conversationCallback = GetConversationCallback(message, workingCredentials, subscriberCardText);

            await SendActionableMessage(userScubaData);

            foreach (var subscriber in _reservationSubscribers.Values)
            {
                await adapter.ContinueConversation(subscriber.Bot.Id, subscriber, conversationCallback);
            }
        }
Beispiel #11
0
        public static async Task SendActionableMessage(UserScubaData userScubaData)
        {
            var client  = new HttpClient();
            var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(userScubaData)));
            await client.PostAsync("https://adaptivetestfunctions.azurewebsites.net/api/SendScubaEmail?code=4tRDT5xalBkFidaesDGNSg1xVRcU2HPh7Ar7Zsc8vpAXE8DdG9mzHg==", content);


            //var myData = new MyDataObject();
            //myData.EventName = "Publish adaptive card schema";
            //myData.ProfileImage = "http://.....";

            //var card = AdaptiveCard.FromJson("thetemplate.json", myData);

            //return card.ToJson();


            //var card = new AdaptiveCard();
            //card.Body.Add(new TextBlock() { Text = "sdsds" });
            //return card.ToJson();
        }
        public override async Task <ScubaCardResult> GetCardResult(UserScubaData scubaData, JObject value, string messageText)
        {
            var mealOptions = new MealOptions();

            if (value != null)
            {
                mealOptions.ProteinPreference = value.Value <string>("mealOptions");
                if (mealOptions.ProteinPreference == "tofu")
                {
                    mealOptions.Vegan = value.Value <string>("Vegetarian") == "vegan";
                }

                mealOptions.Alergy = value.Value <string>("Allergy");
            }
            else
            {
                mealOptions.ProteinPreference = messageText;
            }

            if (messageText?.ToLower() != "back")
            {
                var error = GetErrorMessage(mealOptions.ProteinPreference);
                if (!string.IsNullOrEmpty(error))
                {
                    return new ScubaCardResult()
                           {
                               ErrorMessage = error
                           }
                }
                ;

                scubaData.MealOptions      = mealOptions;
                scubaData.CurrentCardIndex = CardIndex + 1;
            }

            return(new ScubaCardResult()
            {
                CardText = await GetCardText()
            });
        }
Beispiel #13
0
        private async Task <string> GetCardText(UserScubaData scubaData, DateTime?previousDate = null)
        {
            var replaceInfo = new Dictionary <string, string>();

            replaceInfo.Add("{{number_of_people}}", scubaData.NumberOfPeople);
            var cardText = await base.GetCardText(replaceInfo);

            var useMonth = DateTime.Now;

            if (previousDate.HasValue)
            {
                useMonth = previousDate.Value.AddMonths(1);
            }

            //if there are only three days left in the month, use next month
            if (useMonth.AddDays(3).Month > useMonth.Month)
            {
                useMonth = DateTime.Now.AddDays(3);
            }
            var month = new Month(useMonth);

            var reply = Newtonsoft.Json.JsonConvert.DeserializeObject <Activity>(cardText);
            var card  = month.ToCard();

            if (!previousDate.HasValue)
            {
                card.Speak = "<s>What date did you want to go?</s>";
                reply.Text = $"Excellent, {scubaData.NumberOfPeople} of your best buds!";
            }
            card.Body.Insert(0, new AdaptiveTextBlock()
            {
                Text = "What date would you like to go diving?"
            });
            reply.Attachments[0].Content = card;

            var replyAsString = Newtonsoft.Json.JsonConvert.SerializeObject(reply);

            return(replyAsString);
        }
Beispiel #14
0
        public override async Task <ScubaCardResult> GetCardResult(UserScubaData scubaData, JObject value, string messageText)
        {
            var numberOfPeople = value != null?value.Value <string>("numberOfPeople") : messageText;

            var error = GetErrorMessage(numberOfPeople);

            if (!string.IsNullOrEmpty(error))
            {
                return new ScubaCardResult()
                       {
                           ErrorMessage = error
                       }
            }
            ;

            scubaData.NumberOfPeople = numberOfPeople;

            return(new ScubaCardResult()
            {
                CardText = await GetCardText(scubaData)
            });
        }
        public override async Task <ScubaCardResult> GetCardResult(UserScubaData scubaData, JObject value, string messageText)
        {
            var school = value != null?value.Value <string>("school") : messageText;

            var error = GetErrorMessage(school);

            if (!string.IsNullOrEmpty(error))
            {
                return new ScubaCardResult()
                       {
                           ErrorMessage = error
                       }
            }
            ;

            scubaData.School = school;

            return(new ScubaCardResult()
            {
                CardText = await GetCardText(scubaData)
            });
        }
Beispiel #16
0
        public async Task <ScubaCardResult> GetNextCardText(IDialogContext context, Activity activity)
        {
            var botdata = context.PrivateConversationData;

            var           userInput     = activity.Text;
            UserScubaData userScubaData = null;

            if (botdata.ContainsKey(ScubaDataKey))
            {
                userScubaData = botdata.GetValue <UserScubaData>(ScubaDataKey);
            }

            var jObjectValue = activity.Value as Newtonsoft.Json.Linq.JObject;

            var cardProvider = _cardHandlers.Value.FirstOrDefault(c => c.ProvidesCard(userScubaData, jObjectValue, userInput));

            if (cardProvider != null)
            {
                //for cards with single fields,
                //users can enter chat text (OR interact with the card's controls)
                if (userScubaData == null)
                {
                    userScubaData = new UserScubaData();
                }

                var cardResult = await cardProvider.GetCardResult(userScubaData, jObjectValue, activity.Text);

                if (string.IsNullOrEmpty(cardResult.ErrorMessage))
                {
                    botdata.SetValue <UserScubaData>(ScubaDataKey, userScubaData);
                }

                return(cardResult);
            }
            return(new ScubaCardResult()
            {
                ErrorMessage = "I'm sorry, I don't understand.  Please rephrase, or use the Adaptive Card to respond."
            });
        }
Beispiel #17
0
        private async Task <string> GetCardText(UserScubaData scubaData)
        {
            DateTime date = Convert.ToDateTime(scubaData.Date);

            //fake weather card generated here
            //in order to create a real weather card,
            //see https://blog.botframework.com/2017/06/07/Adaptive-Card-Dotnet/
            var replaceInfo = new Dictionary <string, string>();

            replaceInfo.Add("{{name}}", scubaData.PersonalInfo.Name);
            replaceInfo.Add("{{email}}", scubaData.PersonalInfo.Email);
            replaceInfo.Add("{{phone}}", scubaData.PersonalInfo.Phone);
            replaceInfo.Add("{{school}}", scubaData.School);
            replaceInfo.Add("{{destination}}", scubaData.Destination);
            replaceInfo.Add("{{weekday}}", date.DayOfWeek.ToString());
            replaceInfo.Add("{{longdate}}", date.ToString("dddd, MMMM dd"));
            replaceInfo.Add("{{day1}}", date.AddDays(1).DayOfWeek.ToString().Substring(0, 3));
            replaceInfo.Add("{{day2}}", date.AddDays(2).DayOfWeek.ToString().Substring(0, 3));
            replaceInfo.Add("{{day3}}", date.AddDays(3).DayOfWeek.ToString().Substring(0, 3));
            replaceInfo.Add("{{day4}}", date.AddDays(4).DayOfWeek.ToString().Substring(0, 3));

            return(await base.GetCardText(replaceInfo));
        }
Beispiel #18
0
        public override async Task <ScubaCardResult> GetCardResult(UserScubaData scubaData, JObject value, string messageText)
        {
            var previousDate = value == null ? null : value["PreviousDate"];

            if (previousDate != null)
            {
                return(new ScubaCardResult()
                {
                    CardText = await GetCardText(scubaData, previousDate.Value <DateTime>())
                });
            }
            else
            {
                if (messageText?.ToLower() != "back")
                {
                    var numberOfPeople = value != null?value.Value <string>("numberOfPeople") : messageText;

                    var error = GetErrorMessage(numberOfPeople);
                    if (!string.IsNullOrEmpty(error))
                    {
                        return new ScubaCardResult()
                               {
                                   ErrorMessage = error
                               }
                    }
                    ;

                    scubaData.NumberOfPeople   = numberOfPeople;
                    scubaData.CurrentCardIndex = CardIndex + 1;
                }
                return(new ScubaCardResult()
                {
                    CardText = await GetCardText(scubaData)
                });
            }
        }
Beispiel #19
0
 public override bool ProvidesCard(UserScubaData scubaData, JObject value, string messageText)
 {
     return(base.ProvidesCard(scubaData, value, messageText) ||
            (scubaData.CurrentCardIndex == CardIndex + 1 && (value != null && value["PreviousDate"] != null)));
 }
 public abstract Task <ScubaCardResult> GetCardResult(UserScubaData scubaData, JObject value, string messageText);
 public virtual bool ProvidesCard(UserScubaData scubaData, JObject value, string messageText)
 {
     return(scubaData.CurrentCardIndex == CardIndex ||
            (scubaData.CurrentCardIndex == CardIndex + 1 && messageText?.ToLower() == "back"));
 }
 public abstract bool ProvidesCard(UserScubaData scubaData, JObject value, string messageText);
 public override bool ProvidesCard(UserScubaData scubaData, JObject value, string messageText)
 {
     return(scubaData == null);
 }
Beispiel #24
0
 public override bool ProvidesCard(UserScubaData scubaData, JObject value, string messageText)
 {
     return(scubaData != null &&
            scubaData.MealOptions != null &&
            scubaData.PersonalInfo == null);
 }
 public override bool ProvidesCard(UserScubaData scubaData, JObject value, string messageText)
 {
     return(scubaData != null &&
            !string.IsNullOrEmpty(scubaData.Date) &&
            scubaData.MealOptions == null);
 }
 public override bool ProvidesCard(UserScubaData scubaData, JObject value, string messageText)
 {
     return((scubaData != null || (IsSchool(messageText) || (value != null && IsSchool(value.Value <string>("school"))))) &&
            (scubaData == null || string.IsNullOrEmpty(scubaData.School)));
 }
Beispiel #27
0
 public override bool ProvidesCard(UserScubaData scubaData, JObject value, string messageText)
 {
     return(scubaData != null &&
            !string.IsNullOrEmpty(scubaData.Destination) &&
            string.IsNullOrEmpty(scubaData.NumberOfPeople));
 }