※この記事は、苫小牧高専 Advent Calendar 2016 - Adventar 1日目の記事です。
はじめに
学生は学校の動向を監視し、これ以上間違った方向に進むのをやめさせるべきだという気持ちから、学校のWebサイトで公開されているニュースをTwitterやメールで配信する「苫小牧高専ニュース」というシステムを開発・運用してきた。
このシステムによって、学校が間違った方向に進んでいくのを止められたかどうかはわからないが、学生や部活がどこかの大会で賞を受賞しただとか、ニュージーランド研修がどうだとか、奨学金の書類の締切がどうだとか、もっとみんなが知るべき学校のニュースをTwitterやメールを通じて配信することが出来ていると思う。
しかし、今後も学校の動向を監視し正しい方向へ導くにあたって、Twitterやメールではスピード感にかけるという問題があった。やはり、いち早くニュースを受け取りたい。
そこで登場するのが、"電話"だ。
というわけで、このシステムに、Twilioを利用した電話通知機能を付けてみようと思う。
Twilioとは
Twilio for KDDI Web Communications | クラウド電話API
Twilioは、 Webから電話をかけたりSMSを送信したりするAPIを提供しているWebサービスである。Twilioを利用すれば、自動化されたコールセンターを構築したり、サーバのエラーやアプリのURLをSMSで送ったりすることができるようになる。
興味のある人は、公式のドキュメントやSDKが充実しているので見てみると良いと思う。RubyやPHP、Python、SwiftやJavaScriptなどサーバ・クライアント問わずいろいろな言語に対応したSDKが用意されている。
開発資料 | Twilio for KDDI Web Communications
とりあえず電話させてみる
会員登録を済ませた後、とりあえずTwilio経由で電話させてみることにした。コードはこんな感じ。Twilio公式でRubyのSDKが提供されているので、簡単に電話することができる。
通話時に何をさせるかの指示は、TwiMLと呼ばれるTwilio独自のXMLに記述する。TwiMLは、Webから見られる場所に設置する必要があるらしい。とりあえず、自分のサーバに下のようなTwiMLファイルを設置した。サンプルコード中のtwiml_urlには、このTwiMLファイルのURLを設定している。その他TwiMLについてはドキュメントを参照して欲しい。
これを実行してみると、こんな感じで電話が来る。
ニュースのタイトルを読み上げさせる
Twilioの使い方を確認したところで、システムにTwilioを組み込んでいきたいと思う。 とりあえず、「ニュースが更新されたら、筆者の電話番号にニュースのタイトルを電話する」ところまでやることにする。
毎回同じメッセージを流すならサーバにTwiMLファイルを置いておけば良いが、今回は最新のニュースのタイトルを喋らせたいので、サーバ側で動的にTwiMLファイルを生成する必要がある。今回は、既に動かしてある苫小牧高専ニュース Web版にその機能を担わせることにした。
まず、サーバ側のコードの一部。"http://tmnct-news.herokuapp.com/twilio?title=NewsTitle" という感じでGETリクエストを投げてやると、ニュースのタイトルを喋らせるTwiMLが返ってくる。なお、Web版のシステムはSinatraで書かれており、TOPページやメールアドレス登録機能などを含めた完全なコードはGitHubに置いてある。
次に、クライアント側のコード。システムのlib/notifiersディレクトリに、twilio-notifier.rb を追加し、configファイルを書き換えてやればいい感じに動いてくれる。こちらも、ニュースの更新検知部分やTwitter通知などを含めた完全なコードはGitHubに置いてある。
ニュースが更新されると、下の動画のように、電話でニュースが通知される。
今後
今後は、Web版をもう少し改造して他の人にも電話通知できるようにしたり、特定のワードが含まれているニュースだけを電話通知する(例えば、書道部のニュースのみ電話通知する)ようにしていけたらおもしろいと思う。
あと、TwiMLの生成部分は、既存のWeb版(SinatraアプリをHerokuで動かしているもの)より、AWS lambdaとか使ってやったほうがスマートだったかもしれない。テスト期間が終わったらやってみたい。
おわりに
これで、苫小牧高専の最新ニュースを電話でいち早く受け取ることができるようになった。電話を受け取り次第、内容によってはすぐに学校へ駆けつけて正義の鉄鎚を下していきたい。
基本的なプログラミングの方法を学べば、あとは既存のライブラリやサービスを組み合わせていろいろなシステムを作ることができる。個人の趣味レベルのくだらないものでも、適当にいじってみると案外楽しい。
以上、苫小牧高専アドベントカレンダー 1日目「苫小牧高専の気になるニュースを電話でいち早く受け取る」でした。2日目は、Sackey718さんの「留年について」です。よろしくお願いします!!!