NSEG #40 で発表した時のスライドです。
Twilio 入門NSEG #40 2013.06.08@thinkAmi
View Slide
自己紹介• @thinkAmi• hatenaID: thinkAmi• C#, Python, Ruby• 自社インフラ管理• NSEG, GDG信州• あとで資料&ソースコードは公開します
Twiliohttp://www.twilio.com/company/logos
Twilioとは• プログラムからAPI経由で電話を操作– 電話への発信– 電話からの着信– 通話の録音– SMSの送受信など、いろいろ
日本では• KDDIウェブコミュニケーションズと提携• 4/17、日本版提供のプレスリリースhttp://www.kddi-webcommunications.co.jp/news/press/20130417.html• 最近はいろいろなイベントを見かけます• クラスメソッドさんのBlogに連載あり– 実装の参考に。ありがとうございます。http://dev.classmethod.jp/series/クラウド電話api-twilio/
事例• アメリカ– Uber:配車コール– Airbnb・Hulu:ユーザーサポート• 日本– ヤフー:サーバーの監視– イプロス: B2B向けビジネスマッチングサイトのコールトラッキングhttp://jp.startup-dating.com/2013/04/twilio-launched-in-japan-what-kind-of-business-can-work-wellhttp://ascii.jp/elem/000/000/781/781134/
身近な例• CTIとかの構築をしたいけれど、コスト...– プログラムを組んで対応できるかも• 出張時に独自のモーニングコールが...– プログラムを組んで、Cronでコールすれば!• インフラ障害時に (ry
対応プログラム言語• 公式ライブラリはいろいろとあり– PHP, Ruby, Python, .NET, Java,Salesforce/Force.com, Node.js• その他言語は、以下を参照– http://www.twilio.com/docs/libraries
Twilioアカウント• 今回は、米TwilioのTrialアカウント– 以前GDG信州でやったものをリサイクル• KDDIのTwilioアカウントでは試せず– 米TwilioのアカウントではKDDIのTwilioにログインできなかった• 日本の電話番号ではSMSの送受信できずhttp://www.twilio.com/help/faq/phone-numbers/which-countries-does-twilio-have-phone-numbers-in-and-what-are-their-capabilities
TwilioのTrialアカウント• いくつか制限がある– アカウントで認証した電話番号のみ、Twilioへの発信や着信が可能– 他にもいくつかある(How does Twilio’s Free Trial work?)http://www.twilio.com/help/faq/twilio-basics/how-does-twilios-free-trial-work
Trialアカウントの不明点• Twilioへの費用は発生しないものの、電話の着信・発信時の通話料は必要?• まだ明細確認してなかった...
プログラムからTwilioを使う
Twilioの設定• Twilioの電話番号とTwiMLのURLを設定Trialアカウントの場合は、手元の電話番号も認証しておく– TwiML: Twilioの動作を記載したXML
TwiML• 静的TwiMLを公開する– XMLを作るのが、めんどうくさい– あんまり自由ではない• プログラムでTwiMLを生成する– ライブラリを使えば、めんどくさくない• 例: Rubyであれば、twilio-ruby とか
TwiMLの例
英語テキストの読み上げ• デフォルトは男性の声、女性の声もありTwilio::TwiML::Response.new do |r|r.Say('Hello World', voice: 'man')end.text
英語テキストの読み上げ• デフォルトは男性の声、女性の声もありHello World
日本語テキストの読み上げ• 今のところ、女性の声でしか再生できずTwilio::TwiML::Response.new do |r|r.Say('ようこそ、松本へ', language: 'ja-jp')end.text
日本語テキストの読み上げ• 今のところ、女性の声でしか再生できずようこそ、松本へ
メニューの選択Twilio::TwiML::Response.new do |r|r.Gather(action: '/hoge', method: 'GET', numDigits: 1 ) do |g|g.Say('再生は1、録音は2', language: 'ja-jp')endend.text
メニューの選択再生は1を、録音は2を押してくださいTwiMLはもう省略してもいいですよね...
音声の録音Twilio::TwiML::Response.new do |r|r.Record(action: '/fuga',method: 'GET',maxLength: 10finishOnKey: '#')end.text
録音内容の再生Twilio::TwiML::Response.new do |r|r.Play()end.text
指定番号宛への電話発信client = Twilio::REST::Client.new ,client.account.calls.create(from: ,to: ,url: )
基本的な流れ• 携帯からTwilioへ電話をかける• Webから携帯へ電話をかける携帯 Twilio TwiMLのホスティング先 兼Webのホスティング先
基本的な流れ• 携帯からTwilioへ電話をかける①Twilio番号へ発信 ②TwiMLを確認③TwiMLを返却④TwiMLに従い動作
基本的な流れ• Webから携帯へ電話をかける②TwiMLを確認③TwiMLを返却④TwiMLに従い動作①Twilioへアクセス
デモ
デモ環境• 米TwilioのTrialアカウント• Ruby + twilio-ruby• Heroku• Redis To Go (Herokuのアドオン版)– テキストデータの保存先として利用
デモ:テキストの読み上げ1• Redis To Goへテキストを保存• Webから携帯へ発信• テキストの読み上げを確認
デモ:テキストの読み上げ2• Redis To Goへテキストを保存• 携帯からTwilioへ発信• メニューから、テキスト再生を選択• テキストの読み上げを確認
デモ:音声の記録と再生• 携帯からTwilioへ発信• メニューから、録音を選択• 声を録音• 直後に、内容を再生・確認
デモ:ブラウザから録音を再生• 指定した録音内容を再生
デモ:ブラウザから録音を削除• 指定した録音内容を削除
デモ:wavファイルの再生• web上にあるwavファイルを再生する• どうせなので、話題のCeVIOと聴き比べ– CeVIO• http://cevio.jp/• 参考– 業務改善提案「さとうささらで弁当の注文忘れ防止」– http://sho.tdiary.net/20130605.html#p01
やってみて• テキストをもとにTwilioが話す内容は、意外と聞き取りやすい• 句読点で一呼吸置いてくれる• アルファベットはもちろん、ひらがな・カタカナ・漢字も読み上げる– ただし、漢字の読み方は微妙なので、ひらがなで設定したほうが確実
やってみて• 通話料のところが不明だけれど、Trialアカウントでもいろいろと試せそう• URLへGET/POSTで発着信できるので、いたずらとかアタックに気をつける– 実際、作成中に食らって電話が鳴り続いた...
参考文献• Twiliohttp://www.twilio.com/• KDDIウェブコミュニケーションズhttp://kddi-web.twilio.jp/http://blog.twilio.kddi-web.com/• クラスメソッドBlog – Twilioシリーズ (中村 修太 さん)http://dev.classmethod.jp/series/クラウド電話api-twilio/• koeだめ - 「ぼくもTwilioで爆速な電話ツールをつくりたい」->通知ツールつくった\(^o^)/http://d.hatena.ne.jp/bash0C7/20130420/1366443003