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() }); }
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 }); }
private async Task<string> GetCardText(UserScubaData scubaData) { var replaceInfo = new Dictionary<string, string>(); replaceInfo.Add("{{destination}}", scubaData.Destination); return await base.GetCardText(replaceInfo); }
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() }); }
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) }); }
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)); }
private async Task <string> GetCardText(UserScubaData scubaData) { var replaceInfo = new Dictionary <string, string>(); replaceInfo.Add("{{school}}", scubaData.School); return(await base.GetCardText(replaceInfo)); }
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) }; }
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); } }
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() }); }
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); }
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) }); }
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." }); }
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)); }
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) }); } }
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); }
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))); }
public override bool ProvidesCard(UserScubaData scubaData, JObject value, string messageText) { return(scubaData != null && !string.IsNullOrEmpty(scubaData.Destination) && string.IsNullOrEmpty(scubaData.NumberOfPeople)); }