Beispiel #1
0
        public async Task SendSMSAsync(string toNumber, string text, string FromNumber)
        {
            TwilioData config = await TwilioConfigDataProvider.GetConfigAsync();

            string accountSid = config.TestMode ? config.TestAccountSid : config.LiveAccountSid;
            string authToken  = config.TestMode ? config.TestAuthToken : config.LiveAuthToken;
            string fromNumber = config.TestMode ? config.TestSMSNumber : config.LiveSMSNumber;

            if (!string.IsNullOrWhiteSpace(FromNumber))
            {
                fromNumber = FromNumber;
            }
            fromNumber = PhoneNumberNationalAttribute.GetE164(fromNumber);
            if (fromNumber == null)
            {
                throw new InternalError($"Invalid fromNumber {fromNumber} - {nameof(SendSMSAsync)}");
            }
            toNumber = PhoneNumberNationalAttribute.GetE164(toNumber);
            if (toNumber == null)
            {
                throw new InternalError($"Invalid toNumber {toNumber} - {nameof(SendSMSAsync)}");
            }
            string callbackUrl = null;

            if (config.DeliveryReceipts)
            {
                callbackUrl = YetaWFManager.Manager.CurrentSite.MakeUrl(
                    Utility.UrlFor(typeof(TwilioResponseController), nameof(TwilioResponseController.Response), new { ValidateToNumber = toNumber }),
                    PagePageSecurity: config.UseHttps?YetaWF.Core.Pages.PageDefinition.PageSecurityType.httpsOnly: YetaWF.Core.Pages.PageDefinition.PageSecurityType.httpOnly
                    );
            }

            TwilioClient.Init(accountSid, authToken);
            MessageResource m = MessageResource.Create(
                from: fromNumber, // From number, must be an SMS-enabled Twilio number
                to: toNumber,
                body: text,
                statusCallback: callbackUrl != null ? new Uri(callbackUrl) : null
                );

            if (m.ErrorCode != null)
            {
                Logging.AddErrorLog("TwilioProcessor SendSMS failed: {0} {1} - {2} - {3}", fromNumber, toNumber, m.ErrorCode, m.ErrorMessage);
            }
            else
            {
                Logging.AddLog("TwilioProcessor SendSMS queued: {0} {1}", fromNumber, toNumber);
            }
        }
        public async Task <ActionResult> AddPhoneNumber(string data, string fieldPrefix, string newPhoneNumber, bool sms)
        {
            List <ListOfPhoneNumbersEditComponent.Entry> list = Utility.JsonDeserialize <List <ListOfPhoneNumbersEditComponent.Entry> >(data);
            string phoneNumber = PhoneNumberNationalAttribute.GetE164(newPhoneNumber);

            if (string.IsNullOrWhiteSpace(phoneNumber))
            {
                throw new Error(this.__ResStr("invPhone", "Phone number {0} is not a valid phone number", newPhoneNumber));
            }
            if ((from l in list where l.PhoneNumber == phoneNumber select l).FirstOrDefault() != null)
            {
                throw new Error(this.__ResStr("dupPhone", "Phone number {0} has already been added", newPhoneNumber));
            }
            ListOfPhoneNumbersEditComponent.Entry entry = new ListOfPhoneNumbersEditComponent.Entry(phoneNumber, sms);
            return(await GridRecordViewAsync(await ListOfPhoneNumbersEditComponent.GridRecordAsync(fieldPrefix, entry)));
        }
        public async Task <bool> AddItemAsync(ExtensionEntry data)
        {
            data.Created = DateTime.UtcNow;
            foreach (ExtensionPhoneNumber ext in data.PhoneNumbers)
            {
                ext.PhoneNumber = PhoneNumberNationalAttribute.GetE164(ext.PhoneNumber);// standardize
            }
            if (!await DataProvider.AddAsync(data))
            {
                return(false);
            }
            await Auditing.AddAuditAsync($"{nameof(ExtensionEntryDataProvider)}.{nameof(AddItemAsync)}", Dataset, Guid.Empty,
                                         $"Add Extension Entry {data.Id}",
                                         DataBefore : null,
                                         DataAfter : data
                                         );

            return(true);
        }
        public async Task <UpdateStatusEnum> UpdateItemAsync(ExtensionEntry data)
        {
            ExtensionEntry origData = Auditing.Active ? await GetItemByIdentityAsync(data.Id) : null;

            data.Updated = DateTime.UtcNow;
            foreach (ExtensionPhoneNumber ext in data.PhoneNumbers)
            {
                ext.PhoneNumber = PhoneNumberNationalAttribute.GetE164(ext.PhoneNumber);// standardize
            }
            UpdateStatusEnum status = await DataProvider.UpdateByIdentityAsync(data.Id, data);

            if (status != UpdateStatusEnum.OK)
            {
                return(status);
            }

            await Auditing.AddAuditAsync($"{nameof(ExtensionEntryDataProvider)}.{nameof(UpdateItemAsync)}", Dataset, Guid.Empty,
                                         $"Update Extension Entry {data.Id}",
                                         DataBefore : origData,
                                         DataAfter : data
                                         );

            return(UpdateStatusEnum.OK);
        }