Both of your requirements (accepting inbound SMS, and sending without
knowing the carrier) imply that you need a real SMS service provider.
I've personally had experience only with Clickatell and that experience
has been a good one.
To send, you'll need to use one of their APIs- I use their HTTP API, via
the Clickatell gem (http://github.com/lukeredpath/clickatell), and it's
simple. Outbound cost is around 2.9c per text in the US.
On the receive side, Clickatell will accept the inbound texts for you,
then route to a URL you provide- so you just write a normal action
handler in Rails and, voila, your inbound text start arriving on that
The bad part is the inbound cost- while the actual per-message cost is
cheap (about 1c per inbound text, I think), you'll also need to rent a
shortcode, so your outbound message will appear to be from that code
(Twitter uses 40404, for example), and your users will send you messages
by texting to your shortcode (or replying to your outbound texts).
The process to rent a shortcode is an asinine ball of shit, thanks to
the carriers. It takes 2-3 months to complete the process, the carrier
actually DICTATE to you what words you have to include in the texts to
your users, then, as if that weren't insulting enough, you have to pay
$1600/mo for the privilege of renting the shortcode, after they've
wasted 2-3 months of your time just acquiring it. Prepare for
frustration in that process is all I can say.
The good news is, if you can afford the monthly charge, and the
heartburn of getting the shortcode, once you've got one, the actual
day-to-day operation using Clickatell's API for outbound and inbound
works great. In my experience they have been exceptionally reliable.