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
確認をする
- http://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Recordings/{RecordingSid}
- このURLにアクセスすると、音声が返ってくる
- とりあえず、Web管理画面にいくとidはわかる
Tips
- 変数を使って、動的に読み上げを扱うためには下記のように変数を囲う
- 当然だが、シングルコートではなく、ダブルコートで囲わないと「シャープ・中括弧・name・中括弧」ってなってしまう・・・
- #{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
は何個の変数を次の処理に渡すかの指定ということであっている?- 入力を受け付ける桁数でした
考えないといけない点
- 日本語を読み上げさせる時に、うまく文章を切っておかないと不自然な読み上げになっちゃう
- 関係ないけど、モヤさまのナレーションも機械の読み上げっていうのを知ってビックリした