public static async Task<List<ISystemData>> GetRealtimeData(string requestType, string dataType, string campaignId, string startDate, string endDate, string maxResults, int? interval)
        {
            SiteRealtimeRequest.Singleton.InitialRequest(SiteRealtimeResource.SiteRealtimeDataClient, User.UserToken.Access_Token);

            // input parameter
            InteractionInfo interactionInfo = new InteractionInfo
            {
                StartHour = "0:00:00",
                EndHour = "23:59:59",
                StartIndex = "0",
                MaxResults = maxResults
            };

            // input parameter
            string siteId = campaignId;
            // input parameter
            //string requestType = "Current";//[Current Daily InteractionSummary InteractionDetail InteractionEvent]
            //string dataType = "Summary";//[Summary(for current and daily and interaction) Detail Source Province City Ads Page Event Organic Keyword Hour(for interaction)]           

            
            try
            {
                List<ISystemData> responseData;
                switch (requestType)
                {
                    case "online":
                        responseData = await SiteRealtimeRequest.Singleton.GetRealtimeData(siteId, dataType, interval);
                        break;
                    case "statistics":
                        responseData = await SiteRealtimeRequest.Singleton.GetRealtimeData(siteId, dataType, interval);
                        break;
                    case "transform":
                        responseData = await SiteRealtimeRequest.Singleton.GetInteractionData(siteId, dataType, interactionInfo);
                        break;
                    default:
                        responseData = new List<ISystemData>();
                        break;
                }

                return responseData;
            }
            catch (Exception ex)
            {
                return new List<ISystemData>();
            }
        }
       public async Task<List<ISystemData>> GetInteractionData(string siteId, string dataType, InteractionInfo interactionInfo)
       {
           var systemData = new List<ISystemData>();
           switch (dataType)
           {
               case "summary":
                   systemData = await GetInteractionSummaryData(siteId, dataType);
                   break;
               case "hour":
                   systemData = await GetInteractionSummaryData(siteId, dataType);
                   break;
               case "detail":
                   systemData = await GetInteractionDetailData(siteId, interactionInfo);
                   break;
               case "event":
                   systemData = await GetInteractionEventData(siteId, interactionInfo);
                   break;
           }

           return systemData;
       }
        private async Task<List<ISystemData>> GetInteractionEventData(string siteId, InteractionInfo interactionInfo)
        {
            var resource = string.Format(SiteRealtimeResource.SiteRealtimeInteractionEventRequest, siteId);
            var request = new RestRequest(resource, Method.GET);
            if (accessToken != null)
            {
                request.AddParameter("access_token", accessToken);
            }

            if (interactionInfo != null)
            {
                request.AddParameter("start-hour", interactionInfo.StartHour);
                request.AddParameter("end-hour", interactionInfo.EndHour);
                request.AddParameter("start-index", interactionInfo.StartIndex);
                request.AddParameter("max-results", interactionInfo.MaxResults);
            }

            var response = await client.ExecuteGetTaskAsync<List<string>>(request);
            

            if (!IsStatusCodeOK(response.StatusCode))
            {
                return null;
            }

            var systemData = GetInteractionEventData(response.Data[0]);
            await InteractionDataRequest.Singleton.CompleteData(systemData);
            //return response.Data;
            return systemData;
        }