Exemplo n.º 1
0
        public HttpResponseMessage SendSms()
        {
            // create a logger placeholder
            Logger logger      = null;
            var    httpRequest = new HttpRequestMessage();

            try
            {
                logger = NexmoLogger.GetLogger("MessagingSendSmsLogger");
                logger.Open();

                using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))
                {
                    var value         = reader.ReadToEndAsync();
                    var chatSmsObject = JsonConvert.DeserializeObject <ChatSmsObject>(value.Result);
                    logger.Log("Messaging Send SMS Chat body: " + JsonConvert.SerializeObject(chatSmsObject, Formatting.Indented));
                    logger.Log("Messaging Send SMS Chat - The text message entered is: " + chatSmsObject.Text);
                    logger.Log("Messaging Send SMS Chat - The text message recipient is: " + chatSmsObject.To);

                    if (!string.IsNullOrEmpty(chatSmsObject.Text))
                    {
                        var message = new MessagingModel()
                        {
                            Sender = configuration["appSettings:Nexmo.Application.Number.From.UK"],
                            Number = chatSmsObject.To,
                            Text   = chatSmsObject.Text
                        };

                        var smsResults = NexmoApi.SendSMS(message, configuration, "");
                        foreach (SMS.SMSResponseDetail responseDetail in smsResults.messages)
                        {
                            string messageDetails = "SMS sent successfully with messageId: " + responseDetail.message_id;
                            messageDetails += " \n to: " + responseDetail.to;
                            messageDetails += " \n at price: " + responseDetail.message_price;
                            messageDetails += " \n with status: " + responseDetail.status;
                            logger.Log(messageDetails);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                logger.Log(Level.Exception, e);
                return(httpRequest.CreateResponse(HttpStatusCode.InternalServerError));
            }
            finally
            {
                logger.Close();
                logger.Deregister();
            }

            return(httpRequest.CreateResponse(HttpStatusCode.OK));
        }
        public IActionResult Index(MessagingModel messagingModel)
        {
            if (ModelState.IsValid)
            {
                // create a logger placeholder
                Logger logger = null;

                try
                {
                    logger = NexmoLogger.GetLogger("MessagingLogger");
                    logger.Open();

                    // TODO: Update the content type based on content send (e.g. video, audio, text, etc...)
                    messagingModel.ContentType = "text";

                    switch (messagingModel.Type)
                    {
                    case "WhatsApp":
                        messagingModel.TemplateName = "whatsapp:hsm:technology:nexmo:simplewelcome";
                        if (NexmoApi.SendMessage(messagingModel, logger, configuration).IsSuccessStatusCode)
                        {
                            ViewData["feedback"] = "Your " + messagingModel.Type + " message was sent succesfully.";
                        }
                        else
                        {
                            ViewData["error"] = "We could not send your " + messagingModel.Type + " message. Please try again later.";
                        }
                        break;

                    case "Viber":
                        break;

                    case "Facebook Messenger":
                        break;

                    default:
                        var smsResults = NexmoApi.SendSMS(messagingModel, configuration, "");
                        foreach (SMS.SMSResponseDetail responseDetail in smsResults.messages)
                        {
                            string messageDetails = "SMS sent successfully with messageId: " + responseDetail.message_id;
                            messageDetails += " \n to: " + responseDetail.to;
                            messageDetails += " \n at price: " + responseDetail.message_price;
                            messageDetails += " \n with status: " + responseDetail.status;
                            logger.Log(messageDetails);
                            ViewData["feedback"] = messageDetails;
                        }

                        break;
                    }
                }
                catch (Exception e)
                {
                    logger.Log(Level.Exception, e);
                    ViewData["error"] = "There has been an issue dealing with your request. Please try again later.";
                }
                finally
                {
                    logger.Close();
                    logger.Deregister();
                }
            }

            return(View());
        }
        public IActionResult Index(RegistrationModel viewModel, string verifyAction)
        {
            if (ModelState.IsValid)
            {
                // create a logger
                Logger logger = NexmoLogger.GetLogger("RegistrationLogger");;

                try
                {
                    if (verifyAction == "Register")
                    {
                        if (logger == null)
                        {
                            logger = NexmoLogger.GetLogger("RegistrationLogger");
                        }
                        logger.Open();

                        if (string.IsNullOrEmpty(viewModel.PinCode) && viewModel.Workflow == "1")
                        {
                            var results = NexmoApi.SendVerifyRequest(viewModel, logger, configuration);
                            if (results.status == "0")
                            {
                                logger.Log("Verify request successfully created with requestId: " + results.request_id);
                                ViewData["feedback"]           = "Thanks " + viewModel.Name + ". We have sent a verification code to the number you provided.";
                                ViewData["requestId"]          = results.request_id;
                                ViewData["number"]             = viewModel.Number;
                                ViewData["model"]              = "0";
                                ViewData["RegistrationStatus"] = "started";
                            }
                            else if (results.status == "10")
                            {
                                ViewData["warning"] = "Please wait for the previous request to complete, then try again.";
                                logger.Log(Level.Warning, "Response code: " + results.status + " - Concurrent verifications to the same number are not allowed. Request ID: " + results.request_id);
                            }
                            else
                            {
                                ViewData["error"] = "Your request could not be created at this time. Please try again later.";
                                logger.Log(Level.Warning, "Response code: " + results.status + " - Request could not be completed. Request ID: " + results.request_id + " - Error Text: " + results.error_text);
                            }
                        }
                        else
                        {
                            // If a different workflow than the default has been selected but the PIN code is not generated in the UI
                            // then generate a random PIN
                            if (string.IsNullOrEmpty(viewModel.PinCode))
                            {
                                var    random = new Random();
                                string pin    = random.Next(0, 9).ToString();
                                pin += random.Next(0, 9).ToString();
                                pin += random.Next(0, 9).ToString();
                                pin += random.Next(0, 9).ToString();
                                pin += random.Next(0, 9).ToString();
                                pin += random.Next(0, 9).ToString();
                                pin += random.Next(0, 9).ToString();
                                pin += random.Next(0, 9).ToString();
                                pin += random.Next(0, 9).ToString();
                                pin += random.Next(0, 9).ToString();

                                viewModel.PinCode = pin;
                            }

                            var results  = NexmoApi.VerifyRequest(viewModel, logger, configuration);
                            var response = JsonConvert.DeserializeObject <VerifyResponse>(results);

                            if (response.status == "0")
                            {
                                logger.Log("Verify request successfully created with requestId: " + response.request_id);
                                ViewData["feedback"]           = "Thanks " + viewModel.Name + ". We have sent a verification code to the number you provided.";
                                ViewData["requestId"]          = response.request_id;
                                ViewData["number"]             = viewModel.Number;
                                ViewData["model"]              = "2";
                                ViewData["RegistrationStatus"] = "started";
                            }
                            else if (response.status == "10")
                            {
                                ViewData["warning"] = "Please wait for the previous request to complete, then try again.";
                                logger.Log(Level.Warning, "Response code: " + response.status + " - Concurrent verifications to the same number are not allowed. Request ID: " + response.request_id);
                            }
                            else
                            {
                                ViewData["error"] = "Your request could not be created at this time. Please try again later.";
                                logger.Log(Level.Warning, "Response code: " + response.status + " - Request could not be completed. Request ID: " + response.request_id + " - Error Text: " + response.error_text);
                            }
                        }
                    }
                    else if (verifyAction == "Check")
                    {
                        if (logger == null)
                        {
                            logger = NexmoLogger.GetLogger("RegistrationLogger");
                        }
                        logger.Open();

                        string pinCode   = viewModel.PinCode;
                        string requestId = viewModel.RequestId;
                        string number    = viewModel.Recipient;
                        var    results   = new NumberVerify.CheckResponse();

                        if (viewModel.Model == "2") // pay per request pricing model
                        {
                            results = NexmoApi.CheckVerify(viewModel, logger, configuration, requestId);
                        }
                        else
                        {
                            results = NexmoApi.CheckVerifyRequest(viewModel, logger, configuration, requestId);
                        }

                        // log the request response for future debugging
                        string response = "Response returned with status code: " + results.status;
                        response += " and error text: " + results.error_text;
                        response += " and price: " + results.price + " " + results.currency;
                        response += " and eventId: " + results.event_id;
                        logger.Log(response);

                        if (results.status == "0")
                        {
                            // provide feedback on the page
                            ViewData["feedback"] = "Your code has been successfully verified.";
                            logger.Log("PIN code: " + pinCode + " successfully verified. We have sent an confirmation message to the number provided.");
                            ViewData["RegistrationStatus"] = "completed";

                            // send confirmation message
                            var messagingModel = new MessagingModel()
                            {
                                Sender = viewModel.Name,
                                Number = viewModel.Number,
                                Text   = "Your account has been created successfully. You can access it here: http://dashboard.nexmo.com"
                            };
                            var smsResults = NexmoApi.SendSMS(messagingModel, configuration, "60");
                            foreach (SMS.SMSResponseDetail responseDetail in smsResults.messages)
                            {
                                string messageDetails = "SMS sent successfully with messageId: " + responseDetail.message_id;
                                messageDetails += " for Verify requestId: " + requestId;
                                messageDetails += " to: " + responseDetail.to;
                                messageDetails += " at price: " + responseDetail.message_price;
                                messageDetails += " with status: " + responseDetail.status;
                                logger.Log(messageDetails);
                            }
                        }
                        else
                        {
                            ViewData["warning"] = "Your code could not be verified. Please try again.";
                            logger.Log(Level.Warning, "The code could not be verified with status: " + results.status + " and message: " + results.error_text);
                            ViewData["RegistrationStatus"] = "started";
                        }
                    }
                }
                catch (Exception e)
                {
                    logger.Log(Level.Exception, e);
                    ViewData["error"] = "There has been an issue dealing with your request. Please try again later.";
                }
                finally
                {
                    if (logger != null)
                    {
                        logger.Close();
                        logger.Deregister();
                    }
                }
            }

            return(View(viewModel));
        }