public Task ChatBot(string authToken, string AuctionId, string phone)
        {
            try
            {
                phone = WebClientHelper.HandlePhoneFormat(phone);

                UserAuctionId[phone] = AuctionId;
                UserAuthToken[phone] = authToken;

                string APIUrl = $"checkout/cars/getauctiondetails?auctionid={AuctionId}&authtoken={authToken}&source = androidphone";

                var result = WebClientHelper.Consume(APIBaseUrl, HttpMethod.Get, APIUrl);

                UserAuctionDetails[phone] = JsonSerializer.Deserialize <AuctionDetailsVM>(result.Content.ReadAsStringAsync().Result);


                UserWatsonResult[phone] = _watsonHelper.Consume(phone, "hello", true);

                string message   = UserWatsonResult[phone].Output.Generic[0].Text.Replace("{SOPCode}", UserAuctionDetails[phone].SOPNumber).Replace("{TotalAmount}", UserAuctionDetails[phone].TotalAmount.ToString());
                var    send      = false;
                string carOption = "{0} lot# {1} with the price of {2} {3} ";
                for (int i = 0; i < UserAuctionDetails[phone].Cars.Count; i++)
                {
                    send = true;
                    var car = UserAuctionDetails[phone].Cars[i];
                    message += Environment.NewLine + (i + 1) + "-" + string.Format(carOption, car.makeEn + " " + car.modelEn, car.AuctionInfo.lot, car.AuctionInfo.currencyEn, car.AuctionInfo.currentPrice);
                }
                if (send)
                {
                    WebHookHelper.sendTXTMsg(phone, message);
                }

                message = string.Empty;
                if (!UserCars.ContainsKey(phone))
                {
                    UserCars[phone] = new List <CarVM>(UserAuctionDetails[phone].Cars);
                }
                var cars      = UserCars[phone];
                var carsCount = cars.Count;
                for (int i = 0; i < carsCount; i++)
                {
                    var car = cars[i];
                    if (car.BidderHyazaOrigin == string.Empty && car.RequireSelectHyaza == 1)
                    {
                        UserCarNum[phone] = i;
                        message           = _watsonHelper.Consume(phone).Output.Generic[0].Text;
                        message           = message.Replace("{CarNum}", car.makeEn + " " + car.modelEn).Replace("{number}", car.AuctionInfo.lot.ToString()).
                                            Replace("{currency}", car.AuctionInfo.currencyEn).Replace("{price}", car.AuctionInfo.currentPrice.ToString());

                        message += Environment.NewLine + "1- Abu Dhabi" + Environment.NewLine + "2- Dubai" + Environment.NewLine + "3- Sharja" + Environment.NewLine + "4- Ras Al Khaimah" +
                                   Environment.NewLine + "5- Fujairah" + Environment.NewLine + "6- Ajman" + Environment.NewLine + "7- Umm Al Quwian";

                        UserCars[phone].Remove(car);
                        _sessionsManager.UpdateSessionStep(phone);

                        break;
                    }
                    else if (car.DeliveryStatus != 1 && car.CheckOutInfo.HasSourceLocation == 1 && car.CheckOutInfo.AllowDeliveryRequest == 1)
                    {
                        UserCarNum[phone] = i;
                        _sessionsManager.UpdateSessionStep(phone, 3);
                        message = _watsonHelper.Consume(phone, "1").Output.Generic[0].Text.Replace("{CarNum}", car.makeEn + " " + car.modelEn).Replace("{lot}", car.AuctionInfo.lot.ToString());
                        UserCars[phone].Remove(car);
                        break;
                    }
                }
                WebHookHelper.sendTXTMsg(phone, message);
            }
            catch (Exception ex)
            {
                LogHelper.LogException(ex);
            }

            return(null);
        }
        public Task ChatBot([FromForm] object data)
        {
            try
            {
                var webHookMessage = JsonSerializer.Deserialize <WebhookResponse>(this.HttpContext.Request.Form["data"].ToString());

                var senderPhone = _config.GetValue <string>("SenderPhone");
                if (senderPhone == webHookMessage.from)
                {
                    return(null);
                }
                var userStep = _sessionsManager.GetSession(webHookMessage.from)?.LatestResponseStep;
                switch (userStep)
                {
                case 1:
                {
                    var car = UserAuctionDetails[webHookMessage.from].Cars[UserCarNum[webHookMessage.from]];

                    UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from, webHookMessage.text);

                    string message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text;
                    if (message.Contains("please select from choices"))
                    {
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                    }
                    else
                    {
                        using (var multiPartFormData = new MultipartFormDataContent())
                        {
                            multiPartFormData.Add(new StringContent(webHookMessage.from), "authtoken");
                            multiPartFormData.Add(new StringContent(car.AuctionInfo.lot.ToString()), "ciaid");
                            multiPartFormData.Add(new StringContent(Emirates.GetValueOrDefault(int.Parse(webHookMessage.text)).Key.ToString()), "hayazaOriginId");
                            var result = WebClientHelper.Consume(APIBaseUrl, HttpMethod.Get, "carsonline/updatehyazaorigin?source=androidphone", multiPartFormData);
                        }

                        UserSelectedEmirate[webHookMessage.from] = webHookMessage.text;
                        message = message.Replace("{number}", webHookMessage.text).Replace("{country}", Emirates.GetValueOrDefault(int.Parse(webHookMessage.text)).Value);
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                        _sessionsManager.UpdateSessionStep(webHookMessage.from);
                    }


                    break;
                }

                case 2:
                {
                    var car = UserAuctionDetails[webHookMessage.from].Cars[UserCarNum[webHookMessage.from]];



                    UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from, webHookMessage.text);
                    var message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text;

                    if (message.Contains("please type yes or no"))
                    {
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                    }
                    else if (UserWatsonResult[webHookMessage.from].Output.Entities[0].Value.Contains("no"))
                    {
                        message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text.Replace("{CarNum}", car.makeEn + " " + car.modelEn).Replace("{number}", car.AuctionInfo.lot.ToString()).
                                  Replace("{currency}", car.AuctionInfo.currencyEn).Replace("{price}", car.AuctionInfo.currentPrice.ToString());

                        message += Environment.NewLine + "1- Abu Dhabi" + Environment.NewLine + "2- Dubai" + Environment.NewLine + "3- Sharja" + Environment.NewLine + "4- Ras Al Khaimah" +
                                   Environment.NewLine + "5- Fujairah" + Environment.NewLine + "6- Ajman" + Environment.NewLine + "7- Umm Al Quwian";
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                        _sessionsManager.UpdateSessionStep(webHookMessage.from, 1);
                    }
                    else if (UserWatsonResult[webHookMessage.from].Output.Entities[0].Value.Contains("yes"))
                    {
                        message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text.Replace("{country}", Emirates.GetValueOrDefault(int.Parse(UserSelectedEmirate[webHookMessage.from])).Value).Replace("{lot}", car.AuctionInfo.lot.ToString());
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                        _sessionsManager.UpdateSessionStep(webHookMessage.from);
                    }

                    break;
                }

                case 3:
                {
                    if (webHookMessage.text.Contains("https://maps.google.com/maps?q="))
                    {
                        var locationText    = WebUtility.UrlDecode(webHookMessage.text);
                        var splits          = locationText.Split(new string[] { "?q=", "&" }, options: StringSplitOptions.RemoveEmptyEntries);
                        var locationLatLong = splits[1];
                        var locationSplits  = locationLatLong.Split(",");
                        var latitude        = locationSplits[0];
                        var longitude       = locationSplits[1];

                        UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from, "1");
                        var message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text;
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                        _sessionsManager.UpdateSessionStep(webHookMessage.from);
                    }
                    else
                    {
                        UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from);
                        var message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text;
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                    }
                    break;
                }

                case 4:
                {
                    UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from, webHookMessage.text);
                    var message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text;
                    message += Environment.NewLine + "1- 9:00AM - 1:00PM" + Environment.NewLine + "2- 1:00PM - 5:00PM" + Environment.NewLine + "3- 5:00PM - 9:00PM";
                    WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                    _sessionsManager.UpdateSessionStep(webHookMessage.from);
                    break;
                }

                case 5:
                {
                    UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from, webHookMessage.text);
                    var message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text;
                    if (message.Contains("please choose from choices"))
                    {
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                    }
                    else
                    {
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                        _sessionsManager.UpdateSessionStep(webHookMessage.from);
                    }

                    break;
                }

                case 6:
                {
                    UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from, webHookMessage.text);
                    var message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text;
                    WebHookHelper.sendTXTMsg(webHookMessage.from, message);

                    var nextCars = UserCars[webHookMessage.from].Where(c => (string.IsNullOrEmpty(c.BidderHyazaOrigin) && c.RequireSelectHyaza == 1) ||
                                                                       (c.DeliveryStatus != 1 && c.CheckOutInfo.HasSourceLocation == 1 && c.CheckOutInfo.AllowDeliveryRequest == 1));
                    if (nextCars != null && nextCars.Any())
                    {
                        UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from, "1");
                        message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text.Replace("{lot}", nextCars.FirstOrDefault().AuctionInfo.lot.ToString());
                    }
                    else
                    {
                        UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from);
                        message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text;
                    }
                    WebHookHelper.sendTXTMsg(webHookMessage.from, message);

                    ChatBot(UserAuthToken[webHookMessage.from], UserAuctionId[webHookMessage.from], webHookMessage.from);

                    break;
                }



                default:
                {
                    break;
                }
                }
            }
            catch (Exception ex)
            {
                LogHelper.LogException(ex);
            }
            return(null);
        }