どらちゃんのポッケ

R・統計・技術メモなど勉強ログ置き場

Twilioとsinatraとherouk(Twilio Ruby TwiML)

Twilio Ruby TwiML で電話をかけると、特定の言葉を返してくれるようにする

Twilioとは

Twilioに電話すると、音声を返すアプリを作成する

今回は、Rubyでアプリを作ることにした。chefをはじめ、Rubyベースでつくられているプロダクトが多いが、私自身がRubyを全く触れてないので、Rubyも触りつつ、Twilioも触って一石二鳥を狙うことにした。

sinatra

ローカルで動かす

  • 'sinatra'と'twilio-ruby'のgemが必要なので、インストールする
  • あとは上記のクイックスタートに記載されているコードを動かして、XMLが返ってくればOK
    • XMLを生成することができる

heroukにデプロイする

  • Twilioから作成したXMLが参照できないといけないので、外部サーバ(パブリックIP)で公開する必要がある
  • heroku toolbeltのインストール
  • ディレクトリを作成して、gitの管理下にする
    • herokuでは、アプリをgitでpushしてデプロイするためgitがいる

        mkdir mytwilliotest
        cd mytwilliotest
        git init
        heroku create mytwillioTest //これがアプリ名&サブドメインになる
      
  • アプリのソース等を作成する
    • Gemfile

      • Bundlerのためのファイル。依存しているgemを管理するためのもの

          source :rubygems
          gem 'sinatra'
          gem 'twilio-ruby'
        
    • config.ru

      • Rackのためのファイル。このコードで./app(下のやつ)が呼ばれて、Sinatraが起動するっぽい
        • ただ、Rackがなんなのかは、正確に把握できてない...
        • rackのgemがなかったら、インストールしておく

            require 'bundler'
            Bundler.require
          
            #sinatraファイルの指定
            require './app'
          
            run Sinatra::Application
          
    • app.rb(チュートリアルの名前を変えて、ルートディレクトリで“Hello World"返すようにした)

        require 'rubygems'
        require 'sinatra'
        require 'twilio-ruby'
      
        get '/hello-monkey' do
          Twilio::TwiML::Response.new do |r|
            r.Say 'Hello Monkey' :language => 'ja-jp'
          end.text
        end
      
        get '/' do
            "Hello World"
        end
      
  • bundle installを実行する

    • Gemfile.lockが生成される
    • bundlerのためのgemが必要なので、なかったらインストール
  • 最終的なディレクトリ構造はこんな感じになる

    • f:id:sleeping_micchi:20140131000115p:plain

    • gitをcommitして、ローカルでの起動確認
    • shotgunのgemがある便利らしい

        git add .
        git commit -m 'heroku hello world!'
      
  • ローカルで確認できたら、herokuにpushする

      git push heroku master
    
  • herokuでの動作確認

    • ルートパスで"Hello World"、/hello-monkeyでHello MonkeyのXMLが返ってくればOK

        heroku open
      
  • 鍵認証に失敗する場合は、鍵の再生成・再登録を行うとよい

      ssh-keygen  //keyの生成
      heroku keys:clear //herokuのssh keyを削除する
      heroku login    //複数ある場合は、ログイン後に鍵を聞かれるので選択
    

Twilioの設定

  • herokuでの動作確認が終わったら、Twilioの設定を行う
    • f:id:sleeping_micchi:20140130235911p:plain

    • f:id:sleeping_micchi:20140130235927p:plain

確認

  • 自分のTwilioの番号に電話をかけて、Hello Monkeyって言ってくれたら成功!

?なこと

  • 日本のKDDIからログインするのと、海外のTwilioでログインするのでは番号が違う・・・ - 日本のKDDIでやるとアプリケーションエラーになってこける・・・
    • 単純にPOSTとGETの設定がズレていただけでした・・・、しかし番号は謎だ。
    • 原因を知っている方いたら教えてください