Twilioを使ってSMSを受信する
twilioでSMSを受信してrailsアプリでwebhookを受け取りたい
twilioとは
Twilioは音声通話、メッセージング(SMS/チャット)、ビデオなどの 様々なコミュニケーション手段をアプリケーションやビジネスへ容易に組み込むことのできるクラウドAPIサービスです。
雑に手順を書くと
- twilioアカウント作成
- 電話番号を取得
- railsアプリでwebhookを受け取るcontroller/actionを作成
- SMS受信時にpostするwebhook URLを設定
1,2は割愛
3. railsアプリでwebhookを受け取るcontroller/actionを作成
routes.rb
resources :twilio_webhooks, only: %i(create)
twilio_webhooks_contoller.rb
class TwilioWebhooksController < ApplicationController def create p params end end
基本的にpostを受け付ける口さえ作ればいい 試しにngrokを利用して外からのアクセスを受け取れるようにし TwilioにURLを設定し、hello world とSMSを送信してみる
Parameters: {"ToCountry"=>"US", "ToState"=>"MN", "SmsMessageSid"=>"SMXXXXXXXXXXXXXXXXXXXXXXX", "NumMedia"=>"0", "ToCity"=>"MINNEAPOLIS", "FromZip"=>"", "SmsSid"=>"SMXXXXXXXXXXXXXXXXXXXXXXX", "FromState"=>"", "SmsStatus"=>"received", "FromCity"=>"", "Body"=>"hello world", "FromCountry"=>"JP", "To"=>"+10000000000", "ToZip"=>"55401", "NumSegments"=>"1", "MessageSid"=>"SMXXXXXXXXXXXXXXXXXXXXXXX", "AccountSid"=>"ACXXXXXXXXXXXXXXXXXXXXXXX", "From"=>"+810000000000", "ApiVersion"=>"2010-04-01"}
電話番号等はマスクしているがこんなリクエストが飛んでくるのでこれらをいい感じに処理する
これだけと関係ないところから不正なリクエストが来ても判断がつかないため
公式が用意してくてるgemで認証の仕組みも用意されているのでそれを設定する
Gemfile
gem 'twilio-ruby'
bundle install
application.rbに以下を追記
config.middleware.use Rack::TwilioWebhookAuthentication, ENV['TWILIO_AUTH_TOKEN'], '/twilio'
ENV['TWILIO_AUTH_TOKEN']にはTwilioからAUTH TOKENを取得し設定する
これでwebhookで飛んでくるリクエストのバリデーションを行ってくれる