public static async Task Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, TraceWriter log)
        {
            using (BotService.Initialize())
            {
                var subscriptionFacade = new SubscriptionFacade();
                var reportsFacade      = new ReportsFacade();
                var unavailableDevices = await reportsFacade.GetUnavailableDeviceReports();

                var subscriptions = (await subscriptionFacade.GetAllSubscriptions()).ToArray();

                foreach (var subscription in subscriptions.Where(t => t.LastActivity != null && DateTime.UtcNow.Subtract(t.LastActivity.Created) > TimeSpan.FromDays(1)))
                {
                    var connector = new ConnectorClient(new Uri(subscription.ServiceUrl), Environment.GetEnvironmentVariable("MicrosoftAppId"), Environment.GetEnvironmentVariable("MicrosoftAppPassword"));
                    await connector.Conversations.DeleteActivityAsync(subscription.LastActivity.ConversationId, subscription.LastActivity.ActitityId);

                    subscription.LastActivity = null;
                    await subscriptionFacade.UpdateBotSubscription(subscription);
                }

                foreach (var deviceGroup in unavailableDevices.GroupBy(t => t.Group))
                {
                    var message    = new DeviceStatusMessage(deviceGroup.ToList());
                    var recipients = subscriptions.Where(t => t.GroupName == deviceGroup.Key);
                    await message.SendMessageToChannel("Found unavailable devices!", recipients);
                }
            }
        }
        public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "spot/{group}/{address}")] HttpRequestMessage req, string group, string address, TraceWriter log)
        {
            var reportsFacade = new ReportsFacade();

            await reportsFacade.ReportDeviceSpot(group, address);

            return(req.CreateResponse(HttpStatusCode.OK));
        }
        protected async Task <string> ReportStatus(IMessageActivity message, string groupName)
        {
            var reportsFacade = new ReportsFacade();
            var devices       = await reportsFacade.GetDeviceReports();

            var replyMessage = new ProactiveMessages.DeviceStatusMessage(devices.Where(t => t.Group == groupName));

            return(await replyMessage.Build());
        }