private static async Task <Stock.RootObject> GetEntityFromLUIS(string Query) { Query = Uri.EscapeDataString(Query); Stock.RootObject Data = new Stock.RootObject(); using (HttpClient client = new HttpClient()) { string RequestURI = "https://api.projectoxford.ai/luis/v2.0/apps/3d39d203-9f0b-4d16-84cd-f38ffefff37f?subscription-key=1842e783fce74b328964c942cb26b698&q=" + Query; ; HttpResponseMessage msg = await client.GetAsync(RequestURI); if (msg.IsSuccessStatusCode) { var JsonDataResponse = await msg.Content.ReadAsStringAsync(); Data = JsonConvert.DeserializeObject <Stock.RootObject>(JsonDataResponse); } } return(Data); }
/// <summary> /// POST: api/Messages /// Receive a message from a user and reply to it /// </summary> public async Task <HttpResponseMessage> Post([FromBody] Activity activity) { if (activity.Type == ActivityTypes.Message) { ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl)); var userMessage = activity.Text; StateClient stateClient = activity.GetStateClient(); BotData userData = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id); // Set greeting string output = "Hello! What can I do for you?"; if ((!userData.GetProperty <bool>("SetAppointmentWaiting")) && (!userData.GetProperty <bool>("SetUserWaiting"))) { if (userData.GetProperty <bool>("Greeting")) { output = "Hello again! What can I do for you?"; } else { userData.SetProperty <bool>("Greeting", true); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); } } if (userData.GetProperty <bool>("ImageWaiting")) { VisionServiceClient VisionServiceClient = new VisionServiceClient("72eb5e0c1cdb41b380e77b67c1797b81"); AnalysisResult analysisResult = await VisionServiceClient.DescribeAsync(activity.Attachments[0].ContentUrl, 3); string visionReply = $"{analysisResult.Description.Captions[0].Text}"; if (visionReply.ToLower().Contains("coin")) { userData.SetProperty <bool>("ImageWaiting", false); userData.SetProperty <bool>("ImageYesOrNoWaiting", true); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); Activity reply1 = activity.CreateReply($"Your image shows: {visionReply}. Is your request money related?"); await connector.Conversations.ReplyToActivityAsync(reply1); return(Request.CreateResponse(HttpStatusCode.OK)); } else { userData.SetProperty <bool>("ImageWaiting", false); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); Activity reply1 = activity.CreateReply($"Your image shows: {visionReply}. Sorry it's not related to our bank service."); await connector.Conversations.ReplyToActivityAsync(reply1); return(Request.CreateResponse(HttpStatusCode.OK)); } } if (userData.GetProperty <bool>("ImageYesOrNoWaiting")) { if (userMessage.ToLower() == "yes") { output = "You answered yes! Tell me more about your appointment please:"; userData.SetProperty <bool>("ImageYesOrNoWaiting", false); userData.SetProperty <bool>("SetAppointmentWaiting", true); userData.SetProperty <string>("RequestType", "Money"); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); } else { output = "You answered no! Tell me more about your appointment please:"; userData.SetProperty <bool>("ImageYesOrNoWaiting", false); userData.SetProperty <bool>("SetAppointmentWaiting", true); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); } Activity reply1 = activity.CreateReply(output); await connector.Conversations.ReplyToActivityAsync(reply1); return(Request.CreateResponse(HttpStatusCode.OK)); } //HttpClient LUISClient = new HttpClient(); //string LUISReply = await LUISClient.GetStringAsync(); if (userData.GetProperty <bool>("SetAppointmentWaiting")) { userData.SetProperty <bool>("SetAppointmentWaiting", false); userData.SetProperty <bool>("SetAppointment", true); userData.SetProperty <string>("RequestDescription", userMessage); if (userData.GetProperty <string>("RequestType") == "") { userData.SetProperty <string>("RequestType", "General"); } await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); output = "We have received your appointment, do you want to save it?"; Activity reply1 = activity.CreateReply(output); await connector.Conversations.ReplyToActivityAsync(reply1); return(Request.CreateResponse(HttpStatusCode.OK)); } if (userData.GetProperty <bool>("SetAppointment")) { if (userMessage.ToLower() == "yes") { output = "You answered yes! Appointment is saved."; // save appointment to database ServiceRequest request = new ServiceRequest(); request.UserId = userData.GetProperty <string>("UserId"); request.RequestDescription = userData.GetProperty <string>("RequestDescription"); request.ServiceType = userData.GetProperty <string>("RequestType"); await AzureManager.AzureManagerInstace.SetRequest(request); userData.SetProperty <bool>("SetAppointment", false); userData.SetProperty <string>("RequestDescription", ""); userData.SetProperty <string>("RequestType", ""); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); } else { output = "You answered no! Appointment is not saved."; userData.SetProperty <bool>("SetAppointment", false); userData.SetProperty <string>("RequestDescription", ""); userData.SetProperty <string>("RequestType", ""); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); } Activity reply1 = activity.CreateReply(output); await connector.Conversations.ReplyToActivityAsync(reply1); return(Request.CreateResponse(HttpStatusCode.OK)); } if (userData.GetProperty <bool>("CurrencyWaiting")) { string baseCurrency = userMessage.Split(' ')[0]; string compareCurrency = userMessage.Split(' ')[1]; HttpClient client = new HttpClient(); string x = await client.GetStringAsync(new Uri("http://api.fixer.io/latest?base=" + baseCurrency + "&symbols=" + compareCurrency)); Currency.RootObject rootObject; rootObject = JsonConvert.DeserializeObject <Currency.RootObject>(x); double rate = -1; switch (compareCurrency) { case "AUD": rate = rootObject.rates.AUD; break; case "GBP": rate = rootObject.rates.GBP; break; case "EUR": rate = rootObject.rates.EUR; break; case "CAD": rate = rootObject.rates.CAD; break; case "USD": rate = rootObject.rates.USD; break; default: rate = -1; break; } userData.SetProperty <bool>("CurrencyWaiting", false); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); output = $"1 {rootObject.@base} = {rate} {compareCurrency} "; Activity reply1 = activity.CreateReply(output); await connector.Conversations.ReplyToActivityAsync(reply1); return(Request.CreateResponse(HttpStatusCode.OK)); } if (userMessage.ToLower().Contains("image")) { userData.SetProperty <bool>("ImageWaiting", true); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); output = "Please upload an image:"; Activity reply1 = activity.CreateReply(output); await connector.Conversations.ReplyToActivityAsync(reply1); return(Request.CreateResponse(HttpStatusCode.OK)); } if (userMessage.ToLower().Contains("appointment")) { //output = "appointment?"; //userData.GetProperty<bool>("SetAppointment") if (userData.GetProperty <bool>("SetUser")) { if (!userData.GetProperty <bool>("SetAppointment")) { output = "Please tell me about your appointment please:"; userData.SetProperty <bool>("SetAppointmentWaiting", true); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); } else { // save appointment ServiceRequest request = new ServiceRequest(); request.UserId = userData.GetProperty <string>("UserId"); request.RequestDescription = userData.GetProperty <string>("RequestDescription"); await AzureManager.AzureManagerInstace.SetRequest(request); output = "Appointment is saved."; Activity reply1 = activity.CreateReply(output); await connector.Conversations.ReplyToActivityAsync(reply1); return(Request.CreateResponse(HttpStatusCode.OK)); } } else { output = "Please tell me your full name please:"; userData.SetProperty <bool>("SetUserWaiting", true); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); Activity reply1 = activity.CreateReply(output); await connector.Conversations.ReplyToActivityAsync(reply1); return(Request.CreateResponse(HttpStatusCode.OK)); } } if (userMessage.ToLower().Contains("name")) { if (userData.GetProperty <bool>("SetUserWaiting")) { string name = userMessage; userData.SetProperty <string>("FirstName", name.Split(' ')[name.Split(' ').Length - 2]); userData.SetProperty <string>("LastName", name.Split(' ')[name.Split(' ').Length - 1]); userData.SetProperty <string>("UserName", name.Split(' ')[name.Split(' ').Length - 2] + name.Split(' ')[name.Split(' ').Length - 1]); //await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); List <User> userinfo = await AzureManager.AzureManagerInstace.GetUsers(userData.GetProperty <string>("UserName")); if (userinfo.Count > 0) { userData.SetProperty <string>("UserId", userinfo[0].ID); userData.SetProperty <bool>("SetUserWaiting", false); userData.SetProperty <bool>("SetUser", true); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); output = $"Hey, {userData.GetProperty<string>("FirstName")} {userData.GetProperty<string>("LastName")}!"; Activity cardToConversation = activity.CreateReply(output); cardToConversation.Recipient = activity.From; cardToConversation.Type = "message"; cardToConversation.Attachments = new List <Attachment>(); List <CardImage> cardImages = new List <CardImage>(); cardImages.Add(new CardImage(url: "http://www.drawinghowtodraw.com/drawing-lessons/drawing-animals-creatures-lessons/images/howtodrawducksdrawinglessons_html_5f6ac075.png")); List <CardAction> cardButtons = new List <CardAction>(); CardAction cardButton = new CardAction() { Value = "http://google.com", Type = "openUrl", Title = "user name" }; cardButtons.Add(cardButton); ThumbnailCard Card = new ThumbnailCard() { Title = $"{userData.GetProperty<string>("FirstName")}'s Info", //Subtitle = userinfo[0].ToString(), Images = cardImages, //Buttons = cardButtons, Text = userinfo[0].Gender + " " + userinfo[0].Email + " " + userinfo[0].IpAddress }; Attachment oneAttachment = Card.ToAttachment(); cardToConversation.Attachments.Add(oneAttachment); await connector.Conversations.SendToConversationAsync(cardToConversation); return(Request.CreateResponse(HttpStatusCode.OK)); } else { output = "No matching name from our database, please try again."; Activity reply1 = activity.CreateReply(output); await connector.Conversations.ReplyToActivityAsync(reply1); return(Request.CreateResponse(HttpStatusCode.OK)); } } if (userData.GetProperty <bool>("SetUser")) { List <User> userinfo = await AzureManager.AzureManagerInstace.GetUsers(userData.GetProperty <string>("UserName")); output = $"Hey, {userData.GetProperty<string>("FirstName")} {userData.GetProperty<string>("LastName")}!"; Activity cardToConversation = activity.CreateReply(output); cardToConversation.Recipient = activity.From; cardToConversation.Type = "message"; cardToConversation.Attachments = new List <Attachment>(); List <CardImage> cardImages = new List <CardImage>(); cardImages.Add(new CardImage(url: "http://www.drawinghowtodraw.com/drawing-lessons/drawing-animals-creatures-lessons/images/howtodrawducksdrawinglessons_html_5f6ac075.png")); List <CardAction> cardButtons = new List <CardAction>(); CardAction cardButton = new CardAction() { Value = "http://google.com", Type = "openUrl", Title = "user name" }; cardButtons.Add(cardButton); ThumbnailCard Card = new ThumbnailCard() { Title = $"{userData.GetProperty<string>("FirstName")}'s Info", //Subtitle = userinfo[0].ToString(), Images = cardImages, //Buttons = cardButtons, Text = userinfo[0].Gender + " " + userinfo[0].Email + " " + userinfo[0].IpAddress }; Attachment oneAttachment = Card.ToAttachment(); cardToConversation.Attachments.Add(oneAttachment); await connector.Conversations.SendToConversationAsync(cardToConversation); return(Request.CreateResponse(HttpStatusCode.OK)); } else { output = "Please tell me your full name please:"; userData.SetProperty <bool>("SetUserWaiting", true); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); Activity reply1 = activity.CreateReply(output); await connector.Conversations.ReplyToActivityAsync(reply1); return(Request.CreateResponse(HttpStatusCode.OK)); } //else //{ // userData.SetProperty<bool>("SetUserWaiting", true); // userData.SetProperty<bool>("SetUser", false); // output = "Please tell me your full name please?"; //} } if (userMessage.ToLower().Contains("clear")) { output = "User Info is cleared!"; userData.SetProperty <bool>("SetUserWaiting", false); userData.SetProperty <bool>("SetUser", false); userData.SetProperty <string>("FirstName", ""); userData.SetProperty <string>("LastName", ""); userData.SetProperty <string>("UserName", ""); userData.SetProperty <string>("UserId", ""); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); Activity reply1 = activity.CreateReply(output); await connector.Conversations.ReplyToActivityAsync(reply1); return(Request.CreateResponse(HttpStatusCode.OK)); } if (userMessage.ToLower().Contains("currency")) { userData.SetProperty <bool>("CurrencyWaiting", true); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); output = "Could you tell us the two currencies please?"; Activity reply1 = activity.CreateReply(output); await connector.Conversations.ReplyToActivityAsync(reply1); return(Request.CreateResponse(HttpStatusCode.OK)); } Stock.RootObject rootObjectLUIS = await GetEntityFromLUIS(userMessage); if (rootObjectLUIS.topScoringIntent.intent != "None") { switch (rootObjectLUIS.topScoringIntent.intent) { case "StockPrice": output = await GetStock(rootObjectLUIS.entities[0].entity); break; case "StockPrice2": output = await GetStock(rootObjectLUIS.entities[0].entity); break; default: break; } Activity reply1 = activity.CreateReply(output); await connector.Conversations.ReplyToActivityAsync(reply1); return(Request.CreateResponse(HttpStatusCode.OK)); } Activity reply = activity.CreateReply(output); //List<User> users = await AzureManager.AzureManagerInstace.GetUsers(); //Activity reply = activity.CreateReply($"{users[0].LastName}"); // return our reply to the user //Activity reply = activity.CreateReply($"You sent {activity.Text} which was {length} characters"); await connector.Conversations.ReplyToActivityAsync(reply); } else { HandleSystemMessage(activity); } var response = Request.CreateResponse(HttpStatusCode.OK); return(response); }