public IHttpActionResult FacebookWebhook()
        {
            // verify webhook
            var challenge = HttpContext.Current.Request.Params.Get("hub.challenge");

            var token = HttpContext.Current.Request.Params.Get("hub.verify_token");

            if (token != null && token == secretVerifCode)
            {
                return(Ok(challenge));
            }

            //receive data dump
            string input      = new StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd();
            var    jsonParsed = JObject.Parse(input);
            var    leadInfo   = jsonParsed["entry"][0]["changes"][0]["value"];

            if (leadInfo == null)
            {
                FacebookManager.SendMailToAdmins("Lead info was null.", "Lead data error");
                return(Ok()); // send a 200 OK to facebook so they do not send the request over and over
            }
            if (leadInfo["leadgen_id"] == null)
            {
                FacebookManager.SendMailToAdmins("Leadgen_id was null.", "Lead data error");
                return(Ok());
            }

            var leadId = leadInfo["leadgen_id"].ToString();

            // var formId = leadInfo["form_id"].ToString();
            // var adId = leadInfo["ad_id"] != null ? leadInfo["ad_id"].ToString() : " ";
            // var adGroupId = leadInfo["adgroup_id"] != null ? leadInfo["adgroup_id"].ToString() : " ";


            if (FacebookManager.GetPageAccessToken())
            {
                // token verification passed, continue to get info about lead from graph api
                //process lead data in the system
                FacebookManager.ProcessLead(leadId);
                return(Ok());
            }

            return(BadRequest()); // make facebook resend the request
        }