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); } }