///
        public CommunicationResponseViewModel GetMessageDeliveryReport(string MessageID)
        {
            CommunicationResponseViewModel report = new CommunicationResponseViewModel();

            EbulkSMSObject smsjson = new EbulkSMSObject();

            smsjson.SMS      = new SMS();
            smsjson.SMS.auth = new Auth {
                apikey = "1803b1f87c37134462dffd295ec6426a1e1853a0", username = "******"
            };

            string wsUrl = "http://api.ebulksms.com:8080/getdlr.json?username="******"&apikey=" + smsjson.SMS.auth.apikey + "&uniqueid=" + MessageID;



            List <Gsm> gsmNumbers = new List <Gsm>();
            //generate a unique id for the messages.


            var client = new HttpClient();


            var response = client.GetAsync(new Uri(wsUrl)).Result;

            string jsonResult = response.Content.ReadAsStringAsync().Result;

            if (response.IsSuccessStatusCode)
            {
                EbulkDeliveryReport res = JsonConvert.DeserializeObject <EbulkDeliveryReport>(jsonResult);

                //if this is successfully, iterate the resp object and populate the delivery object.
                report.ReturnObjects = new List <CommunicationReportDetail>();

                foreach (var item in res.dlr)
                {
                    try
                    {
                        if (!string.IsNullOrWhiteSpace(item.sendtime))
                        {
                            report.ReturnObjects.Add(new CommunicationReportDetail()
                            {
                                MesssageUUID = item.id, DeliveryReport = item.status, Date = DateTime.Parse(item.sendtime), Recipient = item.mobilenumber
                            });
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                }
            }
            return(report);
        }
        ///sends SMS,Returns Response
        private async Task <CommunicationResponseViewModel> SendSms(MessageObjectViewModel messageObjectViewModel, Dictionary <string, string> numbers)
        {
            var smsresponse = new CommunicationResponseViewModel();

            smsresponse.ReturnObjects = new List <CommunicationReportDetail>();
            smsresponse.MessageType   = CommunicationMedium.SMS;
            string wsUrl = "http://api.ebulksms.com/sendsms.json";

            EbulkSMSObject smsjson = new EbulkSMSObject();

            smsjson.SMS      = new SMS();
            smsjson.SMS.auth = new Auth {
                apikey = "", username = ""
            };

            smsjson.SMS.message = new Message {
                flash = "0", messagetext = messageObjectViewModel.Message, sender = messageObjectViewModel.Subject
            };
            List <Gsm> gsmNumbers = new List <Gsm>();
            //generate a unique id for the messages.


            string msgid = "";

            foreach (var item in numbers)
            {
                msgid = msgid = Guid.NewGuid().ToString();
                gsmNumbers.Add(new Gsm {
                    msidn = item.Key, msgid = msgid
                });

                smsresponse.ReturnObjects.Add(new CommunicationReportDetail()
                {
                    Date = DateTime.Now,
                    IsDeliveryReportChecked = false,
                    MesssageUUID            = msgid,
                    Recipient      = item.Key,
                    Name           = item.Value,
                    DeliveryReport = "awaiting report",
                    ID             = Guid.NewGuid()
                });
            }


            smsjson.SMS.recipients = new Recipients {
                gsm = gsmNumbers.ToArray()
            };

            var    client        = new HttpClient();
            string smsjsonString = Newtonsoft.Json.JsonConvert.SerializeObject(smsjson);

            HttpContent contentPost = new StringContent(smsjsonString, Encoding.UTF8, "application/json");
            var         response    = await client.PostAsync(new Uri(wsUrl), contentPost);

            string jsonResult = await response.Content.ReadAsStringAsync();

            if (response.IsSuccessStatusCode)
            {
                EbulkResponse res = JsonConvert.DeserializeObject <EbulkResponse>(jsonResult);
                switch (res.response.status)
                {
                case "INVALID_JSON":
                    smsresponse.Message   = "Invalid message formatting, please contact the software Provider";
                    smsresponse.Response  = "Message was not sent";
                    smsresponse.Status    = false;
                    smsresponse.UnitsUsed = 0;
                    break;

                case "MISSING_USERNAME":
                    smsresponse.Message   = "The missing username, please contact the software provider";
                    smsresponse.Response  = "Message was not sent";
                    smsresponse.Status    = false;
                    smsresponse.UnitsUsed = 0;
                    break;

                case "MISSING_APIKEY":
                    smsresponse.Message   = "The missing key, please contact the software provider";
                    smsresponse.Response  = "Message was not sent";
                    smsresponse.Status    = false;
                    smsresponse.UnitsUsed = 0;
                    break;

                case "AUTH_FAILURE":
                    smsresponse.Message   = "Authentication failure, please contact the software provider";
                    smsresponse.Response  = "Message was not sent";
                    smsresponse.Status    = false;
                    smsresponse.UnitsUsed = 0;
                    break;

                case "MISSING_SENDER":
                    smsresponse.Message   = "Missing Sender Name, please enter the sender's name";
                    smsresponse.Response  = "Message was not sent";
                    smsresponse.Status    = false;
                    smsresponse.UnitsUsed = 0;
                    break;

                case "MISSING_MESSAGE":
                    smsresponse.Message   = "Missing message, please enter the sms message";
                    smsresponse.Response  = "Message was not sent";
                    smsresponse.Status    = false;
                    smsresponse.UnitsUsed = 0;
                    break;

                case "MISSING_RECIPIENT":
                    smsresponse.Message   = "Missing recipients, please enter the sms recipients";
                    smsresponse.Response  = "Message was not sent";
                    smsresponse.Status    = false;
                    smsresponse.UnitsUsed = 0;
                    break;

                case "INVALID_MESSAGE":
                    smsresponse.Message   = "Missing recipients, please enter the sms recipients";
                    smsresponse.Response  = "Message was not sent";
                    smsresponse.Status    = false;
                    smsresponse.UnitsUsed = 0;
                    break;

                case "INVALID_SENDER":
                    smsresponse.Message   = "Invalid Sender, please enter a valid sender's name";
                    smsresponse.Response  = "Message was not sent";
                    smsresponse.Status    = false;
                    smsresponse.UnitsUsed = 0;
                    break;

                case "UNKNOWN_ERROR":
                    smsresponse.Message   = "Unknown issues, please try again";
                    smsresponse.Response  = "Message was not sent";
                    smsresponse.Status    = false;
                    smsresponse.UnitsUsed = 0;
                    break;

                case "INSUFFICIENT_MESSAGE":
                    smsresponse.Message   = "Error 101, please contact the administrator of the software";
                    smsresponse.Response  = "Message was not sent";
                    smsresponse.Status    = false;
                    smsresponse.UnitsUsed = 0;
                    break;

                case "SUCCESS":
                    smsresponse.Message          = "Success";
                    smsresponse.Response         = "Message sent";
                    smsresponse.Status           = true;
                    smsresponse.ValidationStatus = "Correct";
                    smsresponse.UnitsUsed        = decimal.Parse(res.response.cost);
                    smsresponse.Subject          = smsjson.SMS.message.sender;
                    smsresponse.MessageBody      = smsjson.SMS.message.messagetext;
                    smsresponse.MessageType      = CommunicationMedium.SMS;

                    break;

                default:
                    smsresponse.Message   = "Error 303, try again or please contact the administrator of the software";
                    smsresponse.Response  = "Message was not sent";
                    smsresponse.Status    = false;
                    smsresponse.UnitsUsed = 0;
                    break;
                }
                return(smsresponse);
            }
            else
            {
                return(new CommunicationResponseViewModel {
                    UnitsUsed = 0, Status = false, Message = "Error 404", Response = "The message was not sent please try again"
                });;
            }
        }