示例#1
0
        private TwilioSmsCredentials GetCredentials(ISiteContext site)
        {
            if (site == null)
            {
                return(null);
            }
            if (string.IsNullOrWhiteSpace(site.SmsClientId))
            {
                return(null);
            }
            if (string.IsNullOrWhiteSpace(site.SmsSecureToken))
            {
                return(null);
            }
            if (string.IsNullOrWhiteSpace(site.SmsFrom))
            {
                return(null);
            }

            TwilioSmsCredentials creds = new TwilioSmsCredentials();

            creds.AccountSid = site.SmsClientId;
            creds.AuthToken  = site.SmsSecureToken;
            creds.FromNumber = site.SmsFrom;

            return(creds);
        }
        /// <summary>
        /// Send an sms message using Twilio REST API
        /// </summary>
        /// <param name="credentials">TwilioSmsCredentials</param>
        /// <param name="toPhoneNumber">E.164 formatted phone number, e.g. +16175551212</param>
        /// <param name="message"></param>
        /// <returns></returns>
        public async Task <bool> SendMessage(
            TwilioSmsCredentials credentials,
            string toPhoneNumber,
            string message)
        {
            if (string.IsNullOrWhiteSpace(toPhoneNumber))
            {
                throw new ArgumentException("toPhoneNumber was not provided");
            }

            if (string.IsNullOrWhiteSpace(message))
            {
                throw new ArgumentException("message was not provided");
            }

            var client = new HttpClient();

            client.DefaultRequestHeaders.Authorization = CreateBasicAuthenticationHeader(
                credentials.AccountSid,
                credentials.AuthToken);

            var keyValues = new List <KeyValuePair <string, string> >();

            keyValues.Add(new KeyValuePair <string, string>("To", toPhoneNumber));
            keyValues.Add(new KeyValuePair <string, string>("From", credentials.FromNumber));
            keyValues.Add(new KeyValuePair <string, string>("Body", message));

            var content = new FormUrlEncodedContent(keyValues);

            var postUrl = string.Format(
                CultureInfo.InvariantCulture,
                TwilioSmsEndpointFormat,
                credentials.AccountSid);

            var response = await client.PostAsync(
                postUrl,
                content).ConfigureAwait(false);

            if (response.IsSuccessStatusCode)
            {
                if (log != null)
                {
                    log.LogDebug("success sending sms message to " + toPhoneNumber);
                }

                return(true);
            }
            else
            {
                if (log != null)
                {
                    string responseBody = await response.Content.ReadAsStringAsync();

                    var logmessage = $"failed to send sms message to {toPhoneNumber} from {credentials.FromNumber} { response.ReasonPhrase } { responseBody }";
                    log.LogWarning(logmessage);
                }

                return(false);
            }
        }