さて、今回は昨年のアメリカ大統領選でも使用されたというクラウド電話API「Twilio(トゥイリオと読むらしい)」を使ってみましたよ。

クラウド電話 API は、インターネット上から、電話をかけたり(アウトバウンド)、電話を受けたり(インバウンド)できるサービスです。公開された API をウェブサイトやアプリケーションなどに実装するだけで、電話の送受信機能、アップロードした音声を再生する再生機能、文字列を音声に変換できる音声合成機能、ネットワークを通して音声データを送受信する VoIP や SMS の機能など、さまざまな機能がご利用になれます。

(http://kddi-web.twilio.jp/news/2013/20130417.htmより抜粋)

なるほどね。

日本版はつい先日、KDDIよりサービスが提供開始されました。

フリーのトライアルアカウントを作ることができるので、こちらよりユーザーを作成します。

アカウント作成が完了し、ログインすると以下のようなダッシュボードが表示されます。

Twilioユーザーアカウント

ヘッダのタブから「ツール」を選択するとAPIエクスプローラーに飛びます。

右にAPIのリストがあるので「通話」=>「発信する」を選択します。

(ちなみに現時点ではSMSのAPIはアメリカとカナダでのみ提供されているそうです)

表示されたフォームにしたがって項目を入力していくと、一番下にcurlまたはRubyのコードが作成されます。

Twiliユーザー-アカウントデベロッパーツールAPI Explore

Ruby側の準備はtwilio-rubyというgemをインストールしておくだけです。

少しいじってコードはこんな感じになりました。

require "rubygems"
require "yaml"
require "twilio-ruby"


config = YAML.load(File.read(File.join(File.dirname(__FILE__), '..', 'config.yml')))

if !config
  print "config.yml does not found!"
end


@client = Twilio::REST::Client.new config["twilio_config"]["account_sid"] , config["twilio_config"]["auth_token"]

@call = @client.account.calls.create(
  :from => "+81**********",
  :to => "+81**********",
  :url => ''
  )

puts @call

「:from」にはTwilioの電話番号、
「:to」には発信したい電話番号を指定します(フリーアカウントではアカウント作成時に認証した電話番号にしか発信できません。)
「:url」はAPIエクスプローラー上ではCONDITIONALとなっていましたが、無いとエラーになりましたね。
このURLには”TwiML”という電話がつながった際のTwilioの動作を定義したURLを指定するようですが、適当なURLでも一応電話はかかってきます(エラーメッセージが流れますが)。

とは言っても、流石になにか喋ってほしいですよね。
TwiMLを返すサーバーは自作もできるようですが、TwimletsというAPIサーバ(?)があり、これを使ってTwiMLを返すURLを作ることができます。

ただこのTwimlets、日本版にはまだ未対応なのか、先ほど作ったアカウントではログインできませんでした。
なのでTwimlets用に海外版でアカウントを作成してなんとかログイン。

Twilio Labs

今回は指定した文章を喋るTwimletsを作りました。
(こっくりさんなんて、今の二十歳前後の人は知らないんじゃないかって気もしますが、とりあえず。。。)

Twilio Labs-1

http://twimlets.com/AC2b56ebcd72e16b316dafe78f1da77f86/kokkuri

こんなURLで保存されます。
リンク先を見てもわかるとおり、TwiMLはXMLライクな記述形式になっています。
あとはこれを実行するだけです。

このTwilio、電話をかける以外にも音声合成やオーディオ再生機能もあるらしいので色々遊べそうですねー。
これでハッカソンとかやりたいなあ。

日本語の情報については公式のリファレンスが結構充実してます。
あとは以下のBlogを参考にさせていただきました。

  • クラウド電話API 「Twilio」を使ってみよう#1
  • [twilio] Twilioから電話にかけるときのURLって何を指定すればいいの? => TwiMLを返すURLを指定しよう