public async Task <ActionResult> SendTextMessage(TextMessageViewModel viewModel)
        {
            if (viewModel == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var smsClient = new TwillioWrapperClient();

            smsClient.Init();

            // Get 'from number'
            string fromNumber = GetFromNumber(viewModel);

            if (!viewModel.Bulk)
            {
                await SendSingleTextMessage(viewModel, smsClient, fromNumber);
            }
            else
            {
                await SendBulkTextMessages(viewModel, smsClient, fromNumber);
            }

            viewModel.TextMessageSent = true;

            return(View(viewModel));
        }
Ejemplo n.º 2
0
        public async Task SendBulkSMSToAllDeacons(string message)
        {
            string fromNumber = GetFromNumber();
            var    deacons    = _unitOfWork.AppUserRepository.FindUsersByRole(enums.AppUserRole.Deacon);

            var smsClient = new TwillioWrapperClient();

            smsClient.Init();

            foreach (var deacon in deacons)
            {
                var smsMessage = new SmsMessage
                {
                    ToNumber   = deacon.PhoneNumber,
                    FromNumber = fromNumber,
                    Message    = message
                };

                // Send SMS message
                var response = await smsClient.SendSmsAsync(smsMessage);
            }
        }
        /// <summary>
        /// Sends change request managers a text message and notification.
        /// </summary>
        /// <param name="crManagers">The change request managers.</param>
        private async Task SendCRManagersMessageAsync(string appUserName)
        {
            string title    = "New Change Request";
            string message  = $"Deacon {appUserName} has submitted a new change request.";
            string url      = Url.Action("Index", "ChangeRequests");
            string linkText = "Change Requests";

            // user(s) assigned to handle change requests
            var crManagers = unitOfWork.AppUserRepository.FindUsers(u => u.ChangeRequestManager).ToList();

            var smsClient = new TwillioWrapperClient();

            smsClient.Init();

            foreach (var cr in crManagers)
            {
                NotifyHelper.SendUserNotification(cr.UserName, title, message, url, linkText, type: NotificationType.Info);

                var smsMessage = new SmsMessage
                {
                    Message  = message,
                    ToNumber = string.IsNullOrEmpty(cr.CellNumber) ? cr.PhoneNumber : cr.CellNumber
                };

                try
                {
                    // Send SMS message
                    await smsClient.SendSmsAsync(smsMessage);
                }
                catch (Exception ex)
                {
                    // log caught exception with Elmah
                    ErrorSignal.FromCurrentContext().Raise(ex);
                }
            }
        }
        private async Task <ActionResult> SendBulkTextMessages(TextMessageViewModel viewModel, TwillioWrapperClient smsClient, string fromNumber)
        {
            bool isGoodResponse = true;

            foreach (var member in viewModel.Members)
            {
                var ccgMember = unitOfWork.MemberRepository.FindMemberById(member.MemberId);

                string toNumber = string.Empty;

                // check if cell number exists first
                if (!string.IsNullOrEmpty(ccgMember.CellPhoneNumber))
                {
                    toNumber = ccgMember.CellPhoneNumber;
                }
                else
                {
                    toNumber = ccgMember.PhoneNumber;
                }

                // use test number is exists
                if (!string.IsNullOrEmpty(viewModel.TestToNumber))
                {
                    toNumber = viewModel.TestToNumber;
                }

                var smsMessage = new SmsMessage
                {
                    ToNumber   = toNumber,
                    FromNumber = fromNumber,
                    Message    = viewModel.TextMessageContact.Message,
                };

                try
                {
                    // Send SMS message
                    IResponse response = await smsClient.SendSmsAsync(smsMessage);

                    if (IsResponseOk(response))
                    {
                        viewModel.TextMessageContact.DateSent = DateTime.Now;

                        // Store contact record
                        viewModel.TextMessageContact.MemberId = member.MemberId;
                        StoreTextMessage(viewModel.TextMessageContact);
                    }
                    else
                    {
                        isGoodResponse = false;
                    }
                }
                catch (Exception ex)
                {
                    // log caught exception with Elmah
                    ErrorSignal.FromCurrentContext().Raise(ex);

                    isGoodResponse = false;
                }
            }

            // Send notification to user with bulk text message status.
            // If any text fails user gets a not delivered message.
            if (isGoodResponse)
            {
                viewModel.StatusNotification = GetStatusNotification(TextMessageStatus.BulkTextsDelivered, viewModel.TextMessageContact.MemberFullName);
            }
            else
            {
                viewModel.StatusNotification = GetStatusNotification(TextMessageStatus.BulkTextsNotDelivered, viewModel.TextMessageContact.MemberFullName);
            }

            if (viewModel.StatusNotification != null)
            {
                viewModel.HasStatusNotification = true;
            }

            return(View(viewModel));
        }
        private async Task <ActionResult> SendSingleTextMessage(TextMessageViewModel viewModel, TwillioWrapperClient smsClient, string fromNumber)
        {
            var smsMessage = new SmsMessage
            {
                Message    = viewModel.TextMessageContact.Message,
                FromNumber = fromNumber
            };

            // set 'to' number
            if (!string.IsNullOrEmpty(viewModel.TestToNumber))
            {
                smsMessage.ToNumber = viewModel.TestToNumber;
            }
            else if (!string.IsNullOrEmpty(viewModel.TextMessageContact.ToPhoneNumber))
            {
                smsMessage.ToNumber = viewModel.TextMessageContact.ToPhoneNumber;
            }

            try
            {
                // Send SMS message
                IResponse response = await smsClient.SendSmsAsync(smsMessage);

                if (IsResponseOk(response))
                {
                    viewModel.StatusNotification = GetStatusNotification(TextMessageStatus.SingleTextDelivered, viewModel.TextMessageContact.MemberFullName);

                    viewModel.TextMessageContact.DateSent = DateTime.Now;

                    // Store contact record
                    StoreTextMessage(viewModel.TextMessageContact);
                }
                else
                {
                    viewModel.StatusNotification = GetStatusNotification(TextMessageStatus.SingleTextNotDelivered, viewModel.TextMessageContact.MemberFullName);
                }
            }
            catch (Exception ex)
            {
                // log caught exception with Elmah
                ErrorSignal.FromCurrentContext().Raise(ex);

                viewModel.StatusNotification = GetStatusNotification(TextMessageStatus.SingleTextNotDelivered, viewModel.TextMessageContact.MemberFullName);
            }

            if (viewModel.StatusNotification != null)
            {
                viewModel.HasStatusNotification = true;
            }

            return(View(viewModel));
        }