Handling inbound voice calls & inbound #SMS with #Twilio
For $1 a month, you can “buy” a phone number from twilio, and with that, you can intercept inbound SMS AND voice calls to that number. I’ve only started to experiment with this, but I set up a web hook and captured the Querystring to see what happens when you SMS the number, and when you call it.
These are the querystring variables (I’ve put XXXX on some sensitive data)
SMS:
?ToCountry=US
&ToState=FL
&SmsMessageSid=SM3cabdc50b56a945867a5ff92bd663797
&NumMedia=0
&ToCity=
&FromZip=
&SmsSid=SM3cabdc50b56a945867a5ff92bd663797
&FromState=
&SmsStatus=received
&FromCity=
&Body=Test+inbound+sms
&FromCountry=GB
&To=%2B123930xXXXX
&ToZip=
&NumSegments=1
&MessageSid=SM3cabdc50b56a945867a5ff92bd663797
&AccountSid=AC84d144631d43d12966be8c03e2c6a640
&From=%2B44786XXXXXXX
&ApiVersion=2010-04-01VOICE:
?Called=%2B123XXXXXXX
&ToState=FL
&CallerCountry=GB
&Direction=inbound
&CallerState=
&ToZip=
&CallSid=CAd8a28a1a98844f1c38d8ea68ce2ef8f6
&To=%2B12393XXXXXX
&CallerZip=
&ToCountry=US
&ApiVersion=2010-04-01
&CalledZip=
&CalledCity=
&CallStatus=ringing
&From=%2B44786XXXXXX
&AccountSid=AC84d144631d43d12966be8c03e2c6a640
&CalledCountry=US
&CallerCity=
&Caller=%2B447866XXXXXX
&FromCountry=GB
&ToCity=
&FromCity=
&CalledState=FL
&FromZip=
&FromState=
Sending SMS via C# is easy done via their library, but If you want to use WebClient, or an older version of .NET, you can use a HTTP post as follows;
However, of course you’d always prefer to use www.freebiesms.co.uk ! 🙂
/*https://www.twilio.com/docs/api/rest/sending-messages*/
string strUrl = “https://api.twilio.com/2010-04-01/Accounts/” + username + “/Messages.json”;
string strPostdata = “To=” + HttpUtility.UrlEncode(“+” + To);
strPostdata += “&From=12XXXXXXXX”;
strPostdata += “&Body=” + ISOEncode(Message);
WebClient wc = new WebClient();
wc.Headers[“Content-Type”] = “application/x-www-form-urlencoded”;
string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(username + “:” + password));
wc.Headers[HttpRequestHeader.Authorization] = string.Format(
“Basic {0}”, credentials);
string strStatus = “”;
try
{
strStatus = wc.UploadString(strUrl, strPostdata);
}
catch (WebException ex)
{
strStatus = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();