別サイトで2014/4/6に投稿した記事です。別サイト閉鎖につき、移転しました。情報が古い可能性があるので、ご注意ください。
今回は、Twilioを使って、自分の携帯番号に電話して、アナウンスを流してみます。
Twilioアカウントの取得は終わっていることを前提にしています。Twilioアカウントの開設は、日本のTwilio公式サイトからどうぞ。
今回の流れ
- Railsのコンソールから Call.voice_message メソッドを呼び出すことで、
- Twilioから自分の携帯番号にコールし、
- 着信したら、「お電話ありがとうございます。こちらはABCお客様サポートセンターですです。」というメッセージを流します。
Ruby on Railsで実装してみよう
Railsプロジェクトの作成
$ rails new twilio_rails_test # 「twilio_rails_test」という新しいRailsプロジェクトを作成する
$ cd twilio_rails_test
RubyでTwilioで制御するためのgemを Gemfile に追加
gem "twilio-ruby"
call.rb というモデルを追加
class Call
def self.voice_message
account_sid = ENV['TWILIO_SID'] # Twilioで取得したSID
auth_token = ENV['TWILIO_TOKEN'] # Twilioで取得したトークン
client = Twilio::REST::Client.new(account_sid, auth_token)
client.account.calls.create(
from: ENV['TWILIO_CALL_FROM'], # 発信元電話番号: 取得したTwilioの電話番号
to: ENV['TWILIO_CALL_TO'], # 発信先電話番号: トライアルの場合は、発信先電話番号に制限があります。自分の場合は、Twilioの管理画面から自分の携帯番号を設定しました。すると、SMSで携帯番号を通知が来てました。無事、Twilioが認識すると、その番号に発信できます。
url: ENV['TWILIO_XML_URL'], # インターネット上にあるXML形式のファイル。XMLにアナウンスする内容を記載。設定内容は後ほど。
method: 'GET' # HPPTのGETメソッドを使うことにしました。
)
end
end
環境変数を設定
call.rb のENV['xxx']を使って、環境変数を取得できます。
export TWILIO_SID=xxx
export TWILIO_TOKEN=xxx
export TWILIO_CALL_FROM=+8150xxx
export TWILIO_CALL_TO=+8180xxx
export TWILIO_XML_URL=http://xxx
.bash_profile 辺りに上記の環境変数を設定しておくと便利です。
設定後、
source ~/.bash_profile
コマンドを実行して、追加した環境変数を有効にするのをお忘れなく。
XMLファイルサンプル
call.rb の ENV['TWILIO_XML_URL'] は、コール着信後に流すメッセージをXML形式で定義しています。
↓ は今回使用するXMLファイルです。
このファイルをTwilio(インターネット)からアクセスできる所に置いてください。
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say language="ja-jp">お電話ありがとうございます。こちらはABCお客様サポートセンターです。</Say>
</Response>
Railsコンソールでテストコール
$ rails console
> Call.voice_message
トライアルの場合は、現在トライアルで使用中であるというTwilioアナウンスが流れた後、Twilioから自分の携帯番号に電話がかかってきます。
応答すると、「お電話ありがとうございます。こちらはABCお客様サポートセンターです。」というアナウンスが流れます。
サンプルコードのダウンロード
上記のサンプルコードは、Githubよりダウンロードできます。
https://github.com/fuji3zpg/twilio-call-test
次回
無事、アナウンスが流れたでしょうか?
はじめてアナウンスが流れた時は、私は感動しました。
今でもコンピュータ側から公衆回線網経由の電話を制御するのは相当なコストと労力が必要ですが、Twilioの登場によって、クラウドAPIで操作できるようになりました。
Railsのプログラマになる前、私はCTIという電話とコンピュータを連動させる分野の仕事をしていました。私が携わっていたプロダクトは高品質なものでしたが、その分複雑で理解するのも動かすもの、なかなか骨が折れたものです。
今回の例は単純なものだとはいえ、こうして公衆回線網の電話をRailsを通じて動かせたというのは大変な驚きです。
さて、次回は、エージェント(コールセンターで電話に対応する人)がブラウザでTwilioのコールを扱えるようにします。