読者です 読者をやめる 読者になる 読者になる

Shred IT!!!!

IT全般について試したこと・勉強したことを綴ったり、趣味について語るブログ

Twilio を使って Rails から ショートメール(SMS) を送信する

Rails

概要


Rails サーバからショートメールを送信する方法。

http://qiita.com/kidach1/items/cd63063fa98aaa5030bd 記事を残してくれている方がいるので、この記事を元にショートメールが送信できるまでを試す。

Twilio アカウント作成


http://twilio.kddi-web.com/ へアクセスする。

右上のサインアップをクリックする。

名前とメールアドレス、パスワードを設定して、ボタンをクリックする。

次の画面で電話番号の入力を求められるので入力して、ボタンをクリックする。

その電話番号にショートメールで認証コードが送信されるので、 認証コードを入力してボタンをクリックする。

認証が通ると Twilio の管理画面へ遷移する。

Twilio SMS用電話番号の取得


SMS を送信するには電話番号を購入する必要がある。
上部のメニュー「電話番号」をクリックし、右側の「電話番号を購入」ボタンをクリック。

日本の番号だと、SMS 送信に対応していないので、SMS 送信に対応した国を探す。
好きなバンドがフィンランド出身なのでフィンランドで検索してみる。

月額 ¥150 で電話番号を維持することができ、 SMS 送信: ¥10、SMS 受信: ¥1 で利用することができる。

厳密にはキャリア毎に価格が異なっているので下記を参照すること。
http://twilio.kddi-web.com/price/

購入ボタンをクリックし、電話番号を抑える。

トライアルアカウントだからか、クレジットカードの入力を求められることはなかった。

Rails 環境構築


Rails の環境を構築し、SMS送信画面を作成する。
予定だったが、コンソールで確認取れるので画面の作成はなし。

Rails のプロジェクトを作る。

# bundle exec rails new sms
# cd sms
# bundle install --path vendor/bundler

※結局、rails console で動作確認するので下記作業は必要なし。
Scaffold でテンプレを作る。

# bundle exec rails g scaffold sms to:integer from:integer body:string
# rake db:migrate

上記で作ると sm の複数形として扱われていたので、名前を付け直すw
scaffold で間違った場合は下記のようにすればまとめて削除できる。

# rake db:rollback
# bundle exec rails destroy "sms"

名前を付け直して再実行。

# bundle exec rails g scaffold short_message to:integer from:integer body:string
# rake db:migrate

Rails を起動して下記へアクセスできることを確認する。

# bundle exec rails s -b 0.0.0.0
http://192.168.33.10:3000/short_messages

ショートメール送信


Twilio はエンジニアがこういったページを利用することを想定しているのか、 わかりやすく API の使い方が記載されている。

さらっと確認できるだけでも、下記のサンプルコードが記載されている。

Ruby においては下記。

require 'rubygems' # not necessary with ruby 1.9 but included for completeness 
require 'twilio-ruby' 
 
# put your own credentials here 
account_sid = 'xxxxxxxxxx' 
auth_token = '[AuthToken]' 
 
# set up a client to talk to the Twilio REST API 
@client = Twilio::REST::Client.new account_sid, auth_token 
 
@client.account.messages.create({
    :from => '+00000000',    
})

scaffold で簡易的な CRUD を備えた画面ができているので、 create されるときに ショートメールを送信するように作成する。

gem の追加

公式の gem があるのでそれをインストールする。

https://github.com/twilio/twilio-ruby

下記を Gemfile へ追記する。

# vim Gemfile
gem 'twilio-ruby', '~> 4.2.1'
サービスの実装

require 'rubygems' # not necessary with ruby 1.9 but included for completeness 
require 'twilio-ruby' 

class ShortMessageService 
  ACCOUNT_SID = 'xxxxxxxxxxxxxx' 
  AUTH_TOKEN = 'yyyyyyyyyyyyy' 
  FROM = '+00000000'

  def self.send_short_message(to, body)
    client = Twilio::REST::Client.new account_sid, auth_token 
    client.account.messages.create({
      from: FROM,
      to: to,
      body: body
    })
  end
end

動作確認


コンソールを立ち上げて、上記のサービスを使ってみる。

# bundle exec rails c
# 送信先の電話番号はダミー
2.1.0 :001 >   ShortMessageService.send_short_message('+819000000000', 'test')
 => <Twilio::REST::Message @path=/2010-04-01/Accounts/ACfaa1a28aaed07a3f9e374269e7e05da2/Messages/SM32a1045276da47ca9342d64da3d40ce1>

日本の携帯にショートメールを送信する場合は 「+81」を先頭につけて、「090-0000-0000」の先頭の0を外したものをつなげる。 つまり、「+81900000-0000」を to に指定する。

実際にショートメールが飛んでくる。
Twilio のトライアルアカウントだと「Sent from your Twilio trial account - 」こんな文字列が付加されてくる。