プログラマでありたい

おっさんになっても、プログラマでありつづけたい

TwilioとAmazon SNSを組み合わせて、電話で自動通知

 今年の4月にTwilioのアカウントをとって早8ヶ月。これは色々なことに使えるとワクワクしながら、すっかり放置していました。日本ではKDDIさんと組んで展開し、色々な所でハンズオンなども開催されていたので、知名度的にも手軽に使える音声APIのデファクトになりつつあるのではないでしょうか?簡単ながらTwilioの紹介とユースケースを考えみます。

Twilioから電話を掛けてみる



 アカウントと電話番号の取り方は忘れました。アカウントは本家とKDDI経由での取り方あるようです。私は本家の方でとっています。APIの使い方は色々なところで載っていてあまり悩むことはないと思いますが、おさらいを含めてまとめておきます。


rubyで電話を掛けるサンプル
make_call.rb

require 'rubygems'
require 'twilio-ruby'

@account_sid = 'Your Account SID'
@auth_token = 'Your Account auth token'

# set up a client to talk to the Twilio REST API
@client = Twilio::REST::Client.new(@account_sid, @auth_token)


@account = @client.account
@call = @account.calls.create(
{
    :from => '+twilio phone number',
    :to => '+your phone number',
    :method => 'GET',
    :status_callback_method => 'GET',
    :url => 'https://s3-ap-northeast-1.amazonaws.com/examples-misc/sample_response.xml'
})
puts @call


sample_response.xml

<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Say language="ja-jp">Twilioからの自動メッセージ。電話番号の停止を忘れずにお楽しみください。</Say>
</Response>

 urlで電話のメッセージの設定を行います。MethodはGetでも大丈夫なので、適当なところに静的ファイルをおいておけば大丈夫です。このサンプルのURLも暫くおいておくので、試しに使って貰っても構いません。


 早速試してみましょう。エラーが出なければ、電話が掛かってくるはずです。languageを日本語に設定しておけば、ちゃんと日本語で読み上げてくれます。

$ ruby make_call.rb 
#<Twilio::REST::Call:0x007feaa538beb8>

AWSと連携したユースケースを考える



 Twilioのユースケースは何でしょうか?色々ありますが、例えば障害監視にも使えます。メールやその他の方法は沢山あるにしても、電話で通知して欲しいというシチュエーションはまだまだあります。また、誰か一人だけに連絡するのではなく、電話に出なければ優先順位に従ってコールして欲しいというのはあります。TwilioのAPIを使えば、プログラミングで実装できます。
 サンプルにAWSの障害検知のパターンを書いてみました。AWS側の障害検知はSNSを使い、SNSからHTTP通知でサーバに送りTwilioAPIを叩くパターンと、SNSからSQSで通知しサーバからSQSのキューをポーリングし続けるパターンです。ケースバイケースで使い分ければと思います。HTTPの場合は、HTTP通知を受けるサーバの冗長性を考える必要があります。HTTPなので、通知を受け取ったかの管理が出来ないところが辛いです。SQSパターンの方は、ポーリングを受ける方の稼働の担保が必要です。一方で通知を受け取ったかの管理はキューを見れば解るので楽ですね。

注意点



 電話番号を取得していると、毎月$5掛かります。残高が足りなくなると、アカウントはロックされます。更に恐ろしいことに、ロック中も毎月$5課金され続けます。つまりマイナスになります。私は冒頭に書いてある通り、半年以上ぶりにログインしました。するとアカウントがロックされている旨が出ていたので、仕方がないので$20をチャージしました。しかし、何故かそれでも残高がマイナスの状態に。課金履歴を見てると使っていない間もロックされている間も、毎月課金され続けていました。やむなく再度$20のチャージ。つまりこのエントリーを書くために$40かかっています。不要な電話番号は開放するのをお忘れずに。Twilio本家サイトであれば、電話番号はNumbersで該当の番号を選んでRelease Numberを選ぶと開放できます。これだけは覚えておいてください。骨身にしみました。