/// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        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);
        }