Twilioを使った気象情報架電通知システムの試作
1. 概要
気象情報の変化を市区町村別、かつ注意報/警報/特別警報別のアカウントに投稿する、既存のツイッターbotを拡張し、登録してある電話番号に架電して音声合成で通知するシステムを試作しました。
ユーザは下記情報を登録し、該当する気象情報が発生した時に、架電通知されます。
- 電話番号
- エリア(市区町村)
- 通知して欲しい情報
ー 注意報/警報/特別警報別
ー 発表/解除/継続
Pubsubhubbubプロトコルにより気象庁の実証実験で提供されている気象情報が当システムに通知され、その情報を解析してメッセージを構成し、Twilio APIに架電と音声合成による通知を要求し、Twilioがユーザに対し架電通知を行います。
2. 入力
① 気象庁の実証実験では、Googleが運用するAlert Hubを介してpubsubhubbubプロトコルによるPush方式で、都道府県単位の気象情報の変化の概要がAtom形式で通知されます。
② この概要情報には詳細情報(市区町村単位の注意報/警報/特別警報)へのリンクが含まれており、概要情報に含まれる都道府県名が、当システムが架電通知またはツイートするエリアを含むときに、HTTP GETによりXML形式の詳細情報を取得します。
- 気象庁防災情報XMLフォーマット形式電文の公開(試行)
試行公開されているXML電文のうち、気象特別警報・警報・注意報(随時)のみ当システムに通知されるように、気象庁に登録してあります。 - pubsubhubbub
Googleが考案した publisher - hub - subscriber 型の情報配信のためのオープンプロトコルです。subscriberへはHTTP POSTによりリアルタイムにpush通知されます。 - Alert Hub
GoogleのCrisis Response Teamにより運用されているpubsubhubbubのhubで、publisherであるいくつかの国の気象/防災情報提供者からの情報を、subscriberに配信しています。当システムもAlert Hubのsubscriberの一つです。
3. システム
4つのDockerコンテナにより構成されています。
いずれのコンテナにおいてもnginxが稼働しており、HTTPアクセスによりperlまたはphpのスクリプトが起動され、処理されます。
今回、既存システムにPhoneコンテナ、Dockwilioコンテナを追加して、システムの拡張を行いました。
3.1. AlertSubコンテナ(既存)
2.で述べたAlert Hubや気象庁からの情報を受け取り、解析して、エリア毎*1に通知する要素(発表/解除/継続、注意報/警報/特別警報、注意報警報の内容)を構成し、Phoneコンテナ、Tweetコンテナに通知します(図の③、⑥)。
*1 架電通知またはツイート対象として登録されているエリアのみ対象にします。
3.2. Phoneコンテナ
登録ユーザ情報から、通知して欲しい条件がAlertSubコンテナから通知されたエリア、発表/解除/継続、注意報/警報/特別警報に一致するユーザを検索し、通知要素を元に構成したメッセージと電話番号をDockwilioコンテナに通知します(図の④)。
3.3. Dockwilioコンテナ
Phoneコンテナから通知された情報に従い、架電するようにTwilio APIに要求し(図の⑤)、その後TwilioからのHTTPS GETアクセスに対しメッセージを音声合成して伝える旨通知します(図の⑥)。
- Twilioは通話をはじめとする各種コミュニケーション手段を提供するクラウドサービスです。
- DockwilioコンテナはTwilioを使った架電と音声合成メッセージ通知を簡単にできるDockerコンテナです。
3.4. Tweetコンテナ(既存)
AlertSubコンテナから通知された情報のエリア、注意報/警報/特別警報に対応するツイッターのアカウントに、構成したメッセージを投稿するようにTwitter APIに要求します(図の⑦)。
AlertSub, Phone, Tweetのコンテナは、emerry/jmaをカスタマイズしたものです。
Dockwilioコンテナのリポジトリはemerry/dockwilioです。
当システムは試作システムで、一般にサービスを提供していません。