public async Task DeleteTimeline(ContosoTable949 timeline) { await this.timelineTable.DeleteAsync(timeline); }
/// <summary> /// POST: api/Messages /// Receive a message from a user and reply to it /// </summary> public async Task <HttpResponseMessage> Post([FromBody] Activity activity) { bool isCurrencyRequest = true; var userMessage = activity.Text; string source = ""; string endOutput = "Sorry, we don't quite get what you mean. Type something else?"; if (activity.Type == ActivityTypes.Message) { ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl)); StateClient stateClient = activity.GetStateClient(); BotData userData = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id); // calculate something for us to return if (!userData.GetProperty <bool>("PreviousUser")) { userData.SetProperty <bool>("PreviousUser", true); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); Activity greet = activity.CreateReply("Hello " + activity.From.Name + ", I don't think you've talked to us before. Welcome!"); await connector.Conversations.ReplyToActivityAsync(greet); helpFound = true; } ConvertLUIS StLUIS = await GetEntityFromLUIS(activity.Text); if (StLUIS.intents.Count() > 0) { switch (StLUIS.intents[0].intent) { case "convertcommand": convertFound = true; isCurrencyRequest = false; break; case "helpcommand": helpFound = true; isCurrencyRequest = false; break; default: convertFound = false; isCurrencyRequest = false; break; } } if (helpFound == true) { endOutput = "Here are some of the commands you can type - you can acheive a lot with this bot!"; isCurrencyRequest = false; Activity helpReply = activity.CreateReply($""); helpReply.Recipient = activity.From; helpReply.Type = "message"; helpReply.Attachments = new List <Attachment>(); List <CardImage> helpImage = new List <CardImage>(); helpImage.Add(new CardImage(url: "https://s3.postimg.org/yewfjbroj/command_Box.png")); HeroCard conversionCard = new HeroCard() { Images = helpImage }; Attachment plAttachment = conversionCard.ToAttachment(); helpReply.Attachments.Add(plAttachment); await connector.Conversations.ReplyToActivityAsync(helpReply); } if (convertFound == true) { endOutput = "This bot will give you an exchange rate from any currency into NZD. Please type what currency you would like to convert FROM. eg. From AUD"; isCurrencyRequest = false; } if (userMessage.ToLower().Contains("clear")) { endOutput = "Your data has been cleared. Thanks " + activity.From.Name; await stateClient.BotState.DeleteStateForUserAsync(activity.ChannelId, activity.From.Id); helpFound = false; } if (userMessage.ToLower().Contains("update balance")) { List <ContosoTable949> timelines = await AzureManager.AzureManagerInstance.GetTimelines(); string[] inputs = userMessage.Split(' '); string newBalance = inputs[3]; double doubleBalance = Convert.ToDouble(newBalance); endOutput = "Sorry, there is no account under that name."; foreach (ContosoTable949 account in timelines) { if (inputs[2].ToLower() == account.Name.ToLower()) { account.Balance = doubleBalance; await AzureManager.AzureManagerInstance.UpdateTimeline(account); endOutput = "Your balance was successfully updated. Do you wish to view your account?"; Activity ynReply = activity.CreateReply($""); ynReply.Recipient = activity.From; ynReply.Type = "message"; ynReply.Attachments = new List <Attachment>(); List <CardAction> ynbuttons = new List <CardAction>(); CardAction yesButton = new CardAction() { Value = "get " + inputs[2], Type = "imBack", Title = "Yes" }; ynbuttons.Add(yesButton); CardAction noButton = new CardAction() { Value = "Bye", Type = "imBack", Title = "No" }; ynbuttons.Add(noButton); HeroCard conversionCard = new HeroCard() { Title = "View account?", Buttons = ynbuttons }; Attachment plAttachment = conversionCard.ToAttachment(); ynReply.Attachments.Add(plAttachment); await connector.Conversations.ReplyToActivityAsync(ynReply); } } isCurrencyRequest = false; } if (userMessage.ToLower().Contains("deposit")) { List <ContosoTable949> timelines = await AzureManager.AzureManagerInstance.GetTimelines(); string[] inputs = userMessage.Split(' '); string newBalance = inputs[2]; double doubleBalance = Convert.ToDouble(newBalance); endOutput = "Sorry, there is no account under that name."; foreach (ContosoTable949 account in timelines) { if (inputs[1].ToLower() == account.Name.ToLower()) { account.Balance = account.Balance + doubleBalance; await AzureManager.AzureManagerInstance.UpdateTimeline(account); endOutput = "Your balance was successfully updated. Do you wish to view your account?"; Activity ynReply = activity.CreateReply($""); ynReply.Recipient = activity.From; ynReply.Type = "message"; ynReply.Attachments = new List <Attachment>(); List <CardAction> ynbuttons = new List <CardAction>(); CardAction yesButton = new CardAction() { Value = "get " + inputs[1], Type = "imBack", Title = "Yes" }; ynbuttons.Add(yesButton); CardAction noButton = new CardAction() { Value = "Bye", Type = "imBack", Title = "No" }; ynbuttons.Add(noButton); HeroCard conversionCard = new HeroCard() { Title = "View account?", Buttons = ynbuttons }; Attachment plAttachment = conversionCard.ToAttachment(); ynReply.Attachments.Add(plAttachment); await connector.Conversations.ReplyToActivityAsync(ynReply); } } isCurrencyRequest = false; } if (userMessage.ToLower().Contains("withdraw")) { List <ContosoTable949> timelines = await AzureManager.AzureManagerInstance.GetTimelines(); string[] inputs = userMessage.Split(' '); string newBalance = inputs[2]; double doubleBalance = Convert.ToDouble(newBalance); endOutput = "Sorry, there is no account under that name."; foreach (ContosoTable949 account in timelines) { if (inputs[1].ToLower() == account.Name.ToLower()) { account.Balance = account.Balance - doubleBalance; await AzureManager.AzureManagerInstance.UpdateTimeline(account); endOutput = "Your balance was successfully updated. Do you wish to view your account?"; Activity ynReply = activity.CreateReply($""); ynReply.Recipient = activity.From; ynReply.Type = "message"; ynReply.Attachments = new List <Attachment>(); List <CardAction> ynbuttons = new List <CardAction>(); CardAction yesButton = new CardAction() { Value = "get " + inputs[1], Type = "imBack", Title = "Yes" }; ynbuttons.Add(yesButton); CardAction noButton = new CardAction() { Value = "Bye", Type = "imBack", Title = "No" }; ynbuttons.Add(noButton); HeroCard conversionCard = new HeroCard() { Title = "View account?", Buttons = ynbuttons }; Attachment plAttachment = conversionCard.ToAttachment(); ynReply.Attachments.Add(plAttachment); await connector.Conversations.ReplyToActivityAsync(ynReply); } } isCurrencyRequest = false; } if (userMessage.ToLower().Contains("delete")) { List <ContosoTable949> timelines = await AzureManager.AzureManagerInstance.GetTimelines(); string userName = userMessage.Substring(7); endOutput = "Sorry, there is no account under that name."; foreach (ContosoTable949 row in timelines) { if (userName.ToLower() == row.Name.ToLower()) { await AzureManager.AzureManagerInstance.DeleteTimeline(row); endOutput = "Your account was successfully deleted."; } } isCurrencyRequest = false; } if (userMessage.ToLower().Contains("get")) { List <ContosoTable949> timelines = await AzureManager.AzureManagerInstance.GetTimelines(); endOutput = "Sorry, there is no account under that name."; string name = userMessage.ToLower().Substring(4); foreach (ContosoTable949 account in timelines) { if (name == account.Name.ToLower()) { endOutput = "Name: " + account.Name + ", Balance (in NZD): " + account.Balance; } } isCurrencyRequest = false; } if (userMessage.ToLower().Equals("account")) { endOutput = "Type: *New/Get/Delete Your Name* to create/view/delete your account. You can also type *Update balance*, *Deposit* or *Withdraw* followed by your name and amount of money to update your balance. EXAMPLE. New James, Update balance Sam 500, etc"; isCurrencyRequest = false; } if (userMessage.ToLower().Contains("new")) { string userName = userMessage.Substring(4); ContosoTable949 timeline = new ContosoTable949() { Name = userName, Balance = 0, Date = DateTime.Now }; await AzureManager.AzureManagerInstance.AddTimeline(timeline); Activity ynReply = activity.CreateReply($""); ynReply.Recipient = activity.From; ynReply.Type = "message"; ynReply.Attachments = new List <Attachment>(); List <CardAction> ynbuttons = new List <CardAction>(); CardAction yesButton = new CardAction() { Value = "get " + userName, Type = "imBack", Title = "Yes" }; ynbuttons.Add(yesButton); CardAction noButton = new CardAction() { Value = "Help", Type = "imBack", Title = "No" }; ynbuttons.Add(noButton); HeroCard conversionCard = new HeroCard() { Title = "View account?", Buttons = ynbuttons }; Attachment plAttachment = conversionCard.ToAttachment(); ynReply.Attachments.Add(plAttachment); await connector.Conversations.ReplyToActivityAsync(ynReply); isCurrencyRequest = false; endOutput = "Thanks " + userName + ", you now have a Contoso Bank account!"; } if (userMessage.ToLower().Equals("bye")) { endOutput = "Thanks for using this bot! Feel free to talk to us again anytime you wish."; isCurrencyRequest = false; } if (userMessage.ToLower().Contains("from")) { source = userMessage.Substring(5); isCurrencyRequest = true; currencyObject.RootObject rootObject; HttpClient client = new HttpClient(); string x = await client.GetStringAsync(new Uri("http://api.fixer.io/latest?base=" + source.ToUpper())); rootObject = JsonConvert.DeserializeObject <currencyObject.RootObject>(x); double conversion = rootObject.rates.NZD; //Activity reply = activity.CreateReply($"The current {source.ToUpper()} to NZD rate is {conversion}"); Activity reply = activity.CreateReply($""); reply.Recipient = activity.From; reply.Type = "message"; reply.Attachments = new List <Attachment>(); List <CardImage> convertImage = new List <CardImage>(); convertImage.Add(new CardImage(url: "https://s15.postimg.org/630c7wm5n/Untitled_2.png")); ThumbnailCard conversionCard = new ThumbnailCard() { Title = conversion.ToString(), Subtitle = "Exchange rate from " + source.ToUpper() + " to NZD", Images = convertImage }; Attachment plAttachment = conversionCard.ToAttachment(); reply.Attachments.Add(plAttachment); await connector.Conversations.ReplyToActivityAsync(reply); } if (userMessage.ToLower().Contains("contoso")) { Activity contosoReply = activity.CreateReply("Contoso Bank information"); contosoReply.Recipient = activity.From; contosoReply.Type = "message"; contosoReply.Attachments = new List <Attachment>(); List <CardImage> cardImages = new List <CardImage>(); cardImages.Add(new CardImage(url: "https://s14.postimg.org/9znwwgaw1/Contoso_Logo.png")); List <CardAction> cardButtons = new List <CardAction>(); CardAction contosoButton = new CardAction() { Value = "https://www.asb.co.nz", Type = "openUrl", Title = "Click here!" }; cardButtons.Add(contosoButton); ThumbnailCard contosoCard = new ThumbnailCard() { Title = "Contoso Bank", Subtitle = "Want to find out more?", Images = cardImages, Buttons = cardButtons }; Attachment plAttachment = contosoCard.ToAttachment(); contosoReply.Attachments.Add(plAttachment); await connector.Conversations.SendToConversationAsync(contosoReply); return(Request.CreateResponse(HttpStatusCode.OK)); } if (!isCurrencyRequest) { Activity initialReply = activity.CreateReply(endOutput); await connector.Conversations.ReplyToActivityAsync(initialReply); } } else { HandleSystemMessage(activity); } var response = Request.CreateResponse(HttpStatusCode.OK); return(response); }
public async Task AddTimeline(ContosoTable949 timeline) { await this.timelineTable.InsertAsync(timeline); }