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

どらちゃんのポッケ

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

twilioで電話の声を録音させる

twilioで電話の声を録音させる

チュートリアル通りにやれば動くが、チュートリアルを日本語化してみた。あと、録音の終了をユーザがハンドリングできるようにした。

  • https://jp.twilio.com/docs/quickstart/ruby/twiml/record-caller-leave-message

      require 'rubygems'
      require 'sinatra'
      require 'twilio-ruby'
    
      get '/hello' do
        #電話番号と名前をあらかじめ知っている人のマッピング
          people = {
          '+81XXXXX' => '_name',
        }
        name = people[params['From']] || 'Monkey'
    
        Twilio::TwiML::Response.new do |r|
          r.Say "こんにちは   #{name}さん",:language => 'ja-jp'
          r.Play 'http://hoge/test.mp3'
          r.Gather :numDigits => '1', :action => '/handle-record', :method => 'get' do |g|
            g.Say '録音をするめには1キーを押してください',:language => 'ja-jp'
            g.Say '最初からメニューを聞く場合はほかのキーを押してください',:language => 'ja-jp'
          end
        end.text
      end
    
      get '/handle-record' do
          redirect '/hello' unless ['1'].include?(params['Digits'])
            if params['Digits'] == '1'
              response = Twilio::TwiML::Response.new do |r|
                r.Say 'ピーという音の後に録音をします。終わったら、0を押してください。最大の時間は10秒です。',:language => 'ja-jp'
                r.Record :maxLength => '10', :action => '/record', :method => 'get',:finish_on_key => 0
              end
            end
            response.text
      end
    
      get '/record' do
          Twilio::TwiML::Response.new do |r|
          r.Say 'ただいまの録音は以下の通りです',:language => 'ja-jp'
          r.Play params['RecordingUrl']
          r.Say 'Goodbye.',:language => 'ja-jp'
        end.text
      end
    

確認をする

Tips

  • 変数を使って、動的に読み上げを扱うためには下記のように変数を囲う
    • 当然だが、シングルコートではなく、ダブルコートで囲わないと「シャープ・中括弧・name・中括弧」ってなってしまう・・・
      • #{name}
  • 日本語で読み上げをさせるには、:language => 'ja-jp'のオプションをつける
  • MP3などの再生をさせるには、r.Play 'http://hoge/test.mp3'とする
    • ちなみに、私が今回、ホスティングしているHerokuはmp3とかをおいても読み込めないので、S3とかAzureとかにしないといけない
  • r.Gather :numDigits => '1', :action => '/handle-record', :method => 'get'
    • /handle-recordにgetでルーティングするようにする
  • r.Play params['RecordingUrl']で前で録音したURLを引き継いでいる

わからない点

  • end.textとか、response.textとかってなんだ?
  • numDigitsは何個の変数を次の処理に渡すかの指定ということであっている?
    • 入力を受け付ける桁数でした

考えないといけない点

  • 日本語を読み上げさせる時に、うまく文章を切っておかないと不自然な読み上げになっちゃう
    • 関係ないけど、モヤさまのナレーションも機械の読み上げっていうのを知ってビックリした