/// <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)); LuisMessage luisMessage = await LuisClient.ParseMessage(activity.Text); string replyMessage = string.Empty; if (luisMessage.intents.Count() > 0) { switch (luisMessage.intents[0].intent) { case "GetFlightInfo": FlightInformation flightInfo = await FlightAwareClient.GetFlightData( ConfigurationManager.AppSettings["FlightAwareUserName"], ConfigurationManager.AppSettings["FlightAwareApiKey"], luisMessage.entities[0].entity); replyMessage = FlightAwareClient.GetFlightStatus(flightInfo); break; case "GetDepartureStatus": replyMessage = luisMessage.intents[0].intent; break; case "GetArrivalStatus": replyMessage = luisMessage.intents[0].intent; break; case "RepeatPrevious": replyMessage = luisMessage.intents[0].intent; break; default: replyMessage = "I didn't catch that."; break; } } else { replyMessage = "I didn't catch that."; } // return our reply to the user Activity reply = activity.CreateReply(replyMessage); await connector.Conversations.ReplyToActivityAsync(reply); } else { HandleSystemMessage(activity); } var response = Request.CreateResponse(HttpStatusCode.OK); return(response); }
/// <summary> /// Handles the Windows Store Analytics query. /// </summary> /// <param name="message">The LUIS message.</param> /// <returns>Returns the message with response to Windows Store Analytics API.</returns> public async Task <LuisMessage> HandleWindowsStoreAnalyticsQueryAsync(LuisMessage message) { if (message.Luis.Entities.Count <= 0) { message.Response = "Please tell me for what app(s) you want the stats for."; return(message); } this.RetrieveWindowsStoreData(message); message.Response = "Let me contact Microsoft for that info..."; return(message); }
private void RetrieveWindowsStoreData(LuisMessage message) { Task.Run(async() => { var connector = new ConnectorClient(); var client = new Sparkiy.WindowsStore.Analytics.Client.AnalyticsClient(); await client.AuthorizeAsync(Keys.WindowsStoreAnalyticsId, Keys.WindowsStoreAnalyticsKey); var appNames = message.Luis.Entities.Where(e => e.Type == "StoreApp"); foreach (var entity in appNames) { // TODO Resolve application id from database string appId = string.Empty; if (entity.Entity == "sparkiy") { appId = "9NBLGGH10R5Z"; } else if (entity.Entity == "quantastic") { appId = "9WZDNCRDRKSB"; } else { connector.Messages.SendMessage( message.CreateReplyMessage($"I don't know an app named {entity.Entity}.", "en")); continue; } var storeResponse = (await client.GetAppAcquisitionsAsync(appId, DateTime.MinValue, DateTime.MaxValue, 1000, 0, true)).ToList(); var lastWeekDate = DateTime.Now.ToUniversalTime().Subtract(TimeSpan.FromDays(7)).ToUniversalTime().Date; var totalAcquisitionsCount = storeResponse .Sum(a => a.AcquisitionQuantity) .ToString(CultureInfo.InvariantCulture); var dayAcquisitionsCount = storeResponse .Where(a => a.Date >= lastWeekDate) .Sum(a => a.AcquisitionQuantity) .ToString(CultureInfo.InvariantCulture); connector.Messages.SendMessage( message.CreateReplyMessage( $"{entity.Entity} has total {totalAcquisitionsCount} (+{dayAcquisitionsCount} last 7 days) acquisitions", "en")); } }); }
/// <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)); string symbol = await GetLastSymbol(activity); bool saveSymbol = false; string replyMessageText = String.Empty; LuisMessage luisMessage = await LuisClient.ParseMessage(activity.Text); if (luisMessage.intents.Count() > 0) { switch (luisMessage.intents[0].intent) { case "GetStockPrice": replyMessageText = await GetStockPrice(luisMessage.entities[0].entity); symbol = luisMessage.entities[0].entity; saveSymbol = true; break; case "RepeatStockPrice": if (symbol == null) { replyMessageText = "I don't have a previous symbol to look up."; } else { replyMessageText = await GetStockPrice(symbol); } break; default: replyMessageText = "I'm afraid I didn't catch that."; break; } } else { replyMessageText = "I'm afraid I didn't catch that."; } if (saveSymbol == true) { SetLastSymbol(activity, symbol); } Activity reply = activity.CreateReply(replyMessageText); await connector.Conversations.ReplyToActivityAsync(reply); } else { HandleSystemMessage(activity); } var response = Request.CreateResponse(HttpStatusCode.OK); return(response); }