第40回NSEGにて、Rubyを使ったTwilioのデモを作りましたが、その際に調べたことをまとめておきます。
リンク先にはお世話になりました。ありがとうございました。
■Twilio関係
公式ドキュメント
英語のほか、日本語訳もあります。ホスト名を「www」「jp」を変えることで英語/日本語が切り替えられます。
- Twilio Docs - API REST Making Calls
- Twilio Docs - API REST 録音
- Twilio Docs - Quickstart Ruby TwiML Play Mp3 For Caller
- Twilio Docs - API TwiML Gather
サンプルはGitHubのtwilio-rubyのところにもありました。
Status APIもあるようです。
■Sinatra関係
リファレンス
公式ドキュメントの他、以下のリファレンスを参考にしました。
ルート('/')で、静的ファイル('public/index.html')を返す
どんな方法があるのかを調べたところ、stackoverflowに回答がありました。
send_file File.join(settings.public_folder, 'index.html')
Heroku + Sinatraで、HerokuのURLを取得する
WebからTwilioを経由して自分の携帯へ電話をかける場合、引数にTwiMLのURLを渡す必要があります。今回はHerokuでTwiMLを返すので、そのURL取得に悩みました。
最初は、以下の方法で実装してみましたが、自分のアプリ名ではないものが取れました。
ただ、Herokuのconfigに設定することも考えましたが、設定するのはわざわざ設定するのは面倒でした。
そこで、リファレンスをよく見たところ、求めていたそのものズバリの uri() がありました。
client.account.calls.create( from: ENV['TWILIO_PHONE_NUMBER'], to: ENV['TWILIO_VALIDATED_PHONE_NUMBER'], url: uri('/read') )
SinatraでMIME-TYPEを変更する
CaVIOを使ってwavファイルを作成し、Twilioで再生することを考えましたが、何もしないとMIME-TYPEが正しくないため、wavを再生することができませんでした。
設定する方法を探したところ、こちらも content_type() がありました。
なお、該当するMIME-TYPEは、以下の一覧から探しました。
Twilioのdate_createdがRFC2822形式を変換する処理の記載箇所
Viewの中に変換処理を記載したくなかったため、helperを使いました。
helpers do def make_time(rfc2822_time) utc = Time.rfc2822(rfc2822_time) local = utc + 60 * 60 * 9 local.strftime('%Y/%m/%d %T') end end
■Redis To Go関連
GoogleAppEngineで作った時にはDatastoreを使いましたが、そのような感じで気軽に使えるものがHeroku本体にはなかったため、アドオンの「Redis To Go」を入れました。
redis_uri = URI.parse(ENV['REDISTOGO_URL']) REDIS = Redis.new(host: redis_uri.host, port: redis_uri.port, password: redis_uri.password) # 入れる REDIS.set('hoge', 'fuga') # 出す piyo = REDIS.get('hoge')
■Heroku関連
ログを見る
Twilioと連携させる必要があり、基本的にHerokuに上げて動作確認をしたため、Herokuのログを追いかけました。
■CeVIO関連
Twilioはmp3/wav再生も可能だと知っていたのですが、良いデータがなかったため、最初は音声を再生するデモは諦めていました。
ところが、前日に以下のエントリが流れてきたため、デモのネタになりました。ありがとうございます。