Integrating SMS Messaging with your Rails Application ...
-
Upload
garry54 -
Category
Technology
-
view
3.103 -
download
4
Transcript of Integrating SMS Messaging with your Rails Application ...
![Page 1: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/1.jpg)
Integrating SMS Messaging with your Rails Application
Blythe [email protected]
spongecell.com / snowgiraffe.com
![Page 2: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/2.jpg)
Why SMS?Oldest most reliable means to communicate with mobile usersCell phone agnosticEverybody is doing itGreat way to receive emergency messages at the bar
QuickTimeª and a decompressor
are needed to see this picture.
SERVER IS DOWNSPARKS ARE UP
![Page 3: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/3.jpg)
Popular Applications to Send SMSStandard Email
yournumber@gatewayaddr Example:[email protected]
Find your provider gateway
Instant Message
AOL (US only)
Skype (small fee)
Other
Teleflip RIP
remindblast.com - Send SMS reminders to be awesome or do laundry
Facebook SMS app
Cell providers web page (ex. http://www.t-mobile.com)
![Page 4: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/4.jpg)
Overview: One Way MessagingMobile Terminated (MT) or Outbound
Black Box ofYour application &
gateway & other
Party at A1A Beach front Ave
Mobile Terminated
(MT)
![Page 5: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/5.jpg)
Overview: Two Way Messaging
Black Box ofYour application &
gateway & other
ROCK
MO
Respond with "ROCK" for Free party tix
MT
Mobile Originated (MO) or Inbound
![Page 6: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/6.jpg)
Simplest approach: SMS as email
![Page 7: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/7.jpg)
Pros and Cons of sending SMS through email
The Good
• Free to application (end-user with phone might pay)
• Easy to integrate. Only email setup required.
• Excellent for use with known numbers
• Emergency Messages with plugins like Exception Notification
![Page 8: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/8.jpg)
Pros and Cons of sending SMS through email
The Tricky
• User carrier must be known
• additional user input
• storage considerations
• No delivery confirmation
• Supported by most US but not all cell phone carriers
• No two way messaging
![Page 9: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/9.jpg)
Giant Black Box Explained: SMSCs, SMS Gateways, Service Providers
Before exploring the other available SMS options, lets look at how SMS works
![Page 10: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/10.jpg)
SMS Centers (SMSC)
SMSC SMSCSMSC
![Page 11: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/11.jpg)
GSM Modem
SuperApp
GSMModem
(Cell Phone)
SMSC
AT Commands
![Page 12: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/12.jpg)
GSM Modem APIs and Applications• Kannel in C (open source) supports an API
• RubyGSM - Written by Unicef for RapidSMS to inexpensively send text messages
![Page 13: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/13.jpg)
GSM Modem LoDownAdvantages
Cheap
Can use almost anywhere
Two way messaging support
Disadvantages
Difficult to setup
Slow
Doesn’t scale (only 6 to 10 messages per second)
Must connect modem to a server
![Page 14: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/14.jpg)
Talk directly to all SMS Centers
SMSC SMSCSMSC
AwesomeApp
![Page 15: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/15.jpg)
Mission Impossible: Coding for each SMSCLarge number of SMS Centers
Each use different and proprietary communication protocols
Don’t do this unless you are me!
![Page 16: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/16.jpg)
SMS Gateway translates SMSC protocols
SMSC SMSCSMSC
RockstarApp
SMS Gateway
![Page 17: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/17.jpg)
SMS GatewaysFree Open Source Gateways
Kannel - written in C supports many SMSCs and also acts as a WAP gateway
Must setup/configure on a server yourself
![Page 18: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/18.jpg)
Pay the middleman!• Charge for sending messages
• ~ 5 cents per message
• Bulk discounts
• Provide convenient APIs
• Most provide two way messaging
• Can help obtain short code
![Page 19: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/19.jpg)
SMS Gateway: Sending Outbound (MT)Typical approach for Outbound messages is simple:
• Create an account
• Buy credits (or messages)
• Start sending messages through the API
![Page 20: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/20.jpg)
Ruby Outbound (MT) message with HTTPS
http = Net::HTTP.new(CLICKATELL_BASE_URL, 443)
http.use_ssl = true
http.enable_post_connection_check = true
http.start {response = http.request_get(url_string)}
![Page 21: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/21.jpg)
Choosing an API (if you have a choice)• HTTP/S (GET & POST)
- By far the easiest to implement- Great for sending < 10k messages a month
• SMPP- Best for bulk messages (over 10k per month)- Leaves Connection open
• STMP - send through mail
Other options (not so hot)• FTP - Bulk option for legacy systems• XML (use HTTP if available)• SOAP (use HTTP if available)• Com Object (Seriously? What wah?)
![Page 22: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/22.jpg)
SMS Gateway: Two way messaging and MOs• Typically enable Outbound messaging
• Obtain or rent a short code
• Respond to Inbound MOs
1. Use a provider campaign management tool ($$$)
2. Parse yourself and write some regexp!
/^OPT(\s*[-_]?\s*)OUT|STOP|END|QUIT|UNSUBSCRIBE|EXIT|HALT|FUCK(\s*[-_]?\s*)OFF|REMOVE|CANCEL)/i
![Page 23: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/23.jpg)
Two way messaging: PullSetup a cron task to pull new messages every few seconds.
![Page 24: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/24.jpg)
Two way messaging: PushProvide a callback URL that service provider invokes for each new
message
![Page 25: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/25.jpg)
Do I need a short code?
If your awesome app is:
• A giant spam machine• Implementing two way messaging• (Recommended) Sending > 5000
messages per month
![Page 26: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/26.jpg)
Shared (Rented) Versus Dedicated Short Codes
Shared short code shared with othersrequires keyword like "RUBY"
Dedicated short codeall to yourselfTakes around 2 months to obtain$1000 for a selected code or $500 for a random code per month
![Page 27: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/27.jpg)
Chewing on a Cactus
• Choose a short code (selected or random)• Apply by sending registration data for 3, 6 or 12 months• Receive approval email from CSCA• Pay all up front $500 per month for Random, $1000/mo for Selected• Apply for approval from each wireless service provider• Sign a contract with each provider• Implement and Test each connection with each provider
Sms gateway service providers(connection aggregators) will help with this process or you can go directly through the CSCA in the US
![Page 28: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/28.jpg)
Opt out concerns• Handled by most providers
• Implement yourself
- Tracking
- Opting out different senders
![Page 29: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/29.jpg)
Choosing a Service ProviderCost: how many sms messages will you send per month?
Credit vs. sms
Hidden costs
Monthly fee
Coverage: does the provider cover all needed areas?
Implementation Time: is the API you want to use easy to integrate?
Opt-out: is it handled?
Two way messaging: is it supported? Do you need it?
Help with short code cactus eating experience?
![Page 30: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/30.jpg)
Developer Integration Concerns
![Page 31: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/31.jpg)
Save message informationDo you need to save a history or audit trail for reporting?
Lots of messages to send?
Can't send in real time (before controller action times out?)
![Page 32: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/32.jpg)
Inside the SMS ORM: Check out SMS ON RAILS
DraftMessage
Delivery By Date
PhoneNumberNumber
WhiteList?DoNotSend?
PhoneCarrierName
Email gateway
Sender/UserUsernamePassword
Favorite beer
OutboundStatus
Time SentService Provider UID
![Page 33: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/33.jpg)
Outbound Status: Produce and Consume• Web action creates an Outbound record with status
NOT_PROCESSED
• Cron task processes messages with status NOT_PROCESSED and marks them SUCCESS or FAIL
ControllerAction
Producer
Cron/Background Task
Consumer
NOT_PROCESSED
SUCCESS
![Page 34: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/34.jpg)
Locking and Delivering: Outbound StatusNo transactions; no take backs
When delivering a message, try locking Outbound ORM object
NOT_PROCESSED PROCESSING
SUCCESS
FAILED
![Page 35: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/35.jpg)
Bulk Message Delivery • Use batch API call to send multiple phone numbers the same msg
• For huge deliveries, use SMPP to maintain an open connection
• Set delivery date and send to provider in advance
• Lock multiple records with your database (MySQL FOR UPDATE)
• Use Multiple servers
![Page 36: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/36.jpg)
Bulk Message Delivery Tips• Reduce contention for competing servers storing data
• Assign a group of records (ID mod X srvrs) to each server
• (non dedicated servers) put tasks on staggered timers (ex. every 2 min) that execute for a shorter duration(ex. 45 seconds)
• Identify fatal errors and stop the task
• Fatal, stop task: Ex. No response from service provider
• Single message error: Mark failed and continue processing
• Cron to Recover messages in 'PROCESSING' state with updated_at field > duration of consumer task (ex. 10 min)
• Delivery status background task to request delivery information
• Set priority on messages
![Page 37: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/37.jpg)
Sanitize Phone NumbersPhoneNumber.create!(:number => '(206)-555-1212 ')
PhoneNumber.find_by_number('12065551212') == nil
Your database without data integrity
![Page 38: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/38.jpg)
Sanitize Phone NumbersSanitize all phone numbers before
search or insert or update
Store with country code (for USA auto add a 1 for 10 digit numbers not inputted with a + or 0)
My database runs on flowers
![Page 39: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/39.jpg)
Outbound Attributes: White List and Opt OutSave safe numbers on a white list and enable checking to
• prevent accidents (test mode)
• restrict access
Store Opt-Out Information
• Prevent paying for a message to a recipient provider opted out
• Can make a distinction between opt out, opt in, and bounce, abuse
smsi
![Page 40: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/40.jpg)
SMS Gateway Service Providers
Short List of Providers
http://www.redoxygen.com
http://www.redrabbitsms.com/
http://clickatell.com
http://quios.com
http://messagepub.com/
http://www.openmarMeket.com/products-and-services/message-and-content-delivery.html
http://www.mobilemarketing.net
http://www.textmarks.com/
http://www.mozes.com/
Long list and comparison table of providers:
http://www.developershome.com/sms/smsGatewayProvComp.asp
![Page 41: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/41.jpg)
Useful ReferencesGeneral SMS: http://www.developershome.com/sms/Provider Gateway addresses: http://en.wikipedia.org/wiki/SMS_gatewaySms On Rails Engine: http://github.com/blythedunham/smsonrailsClickatell Gem: http://clickatell.rubyforge.org/Exception Notification Plugin: http://github.com/rails/exception_notification/tree/masterKannel: http://www.kannel.org/RapidSms http://mobileactive.org/tagging/rapid-smsRubyGSM http://mobilehacking.org/index.php/RubyGSMMore Mobile Tools: http://mobilehacking.org/index.php/Main_PageCommon Short Code Admin(CSCA) http://www.usshortcodes.com/
![Page 42: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/42.jpg)
Demo
SMS On Rails Engine: SMS in minutesscript/plugin install git://github.com/blythedunham/smsonrails
Support for:
• Email Gateway Integration with phone carrier email domains
• Clickatell HTTPS Integration
• ORM/DB tables and migrations to store messages
• RESTful admin views to show message history
• Safe Locking and delivery
• Safely store phone numbers
• Dynamic parameter substitution
Not included: (yet)
• Crons tasks or bulk message delivery
• Stale message recovery
• Pretty UI with rounded corners customized to your application
• Inbound Message support
Please log tickets on github!
![Page 43: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/43.jpg)
Questions?
Yo Dawg, I heard you like Rails Apps so I put an SMS Rails App in your Rails App so you can
SMS yourself to be awesome
![Page 44: Integrating SMS Messaging with your Rails Application ...](https://reader033.fdocuments.net/reader033/viewer/2022052911/559f52861a28ab4b208b47c8/html5/thumbnails/44.jpg)
PhotosTrash can http://www.flickr.com/photos/knittingskwerlgurl/396165625/
Flowers http://www.flickr.com/photos/blondepowers/2722511769/
Timepiece: http://www.flickr.com/photos/lebron/223223725/
Bear http://www.flickr.com/photos/guenterleitenbauer/697065143/
Email http://www.flickr.com/photos/charuca/2448685976/
Golden gate: http://www.flickr.com/photos/h2orange/63606734/
Beetles: http://www.flickr.com/photos/lhtang2006/3490285407/
Computer Cat: http://www.flickr.com/photos/sammrowe/3491788169/
Giant: http://www.flickr.com/photos/andreatallone/2841979961/