完成作品

2020年6月20日に開催された、MAハッカソンで余興で作った作品です。

アイデア出しのときに出ていた「宇多田ヒカル」というキーワードが、その後「Automatic」→「7回目のベル」と発展していき、最終的にこの作品が誕生しました。

若い方はご存じないかもしれませんが、宇多田ヒカルさんのデビュー曲が「Automatic」です。デビューは1998年ですから、まだiモードすら登場する前です(iモードが出たのが1999年)。そして、Automaticの冒頭の歌詞に「7回目のベルで受話器をとった君」が出てくるのです。

ということで、その歌詞にちなんで、着信コールが7回目だった場合にAutomaticの該当歌詞が流れ、7回目以外で出た場合は、通常の会話ができるという作品になります。

 何のため? 目的はとくにないです。そんなもんです。

何が一番苦労したかというと、そもそも最近のスマホはベルがならない(サイレントだったり、着信音がベルじゃないw)ので、ベルがなる電話機(ガラケー)を引き出しから探し出したところです。完全放電してますから、電源入れるのも一苦労だし、テスト用として契約をしているけどそろそろいらないよなーと思ってた矢先でした。

内部的にはTwilioのみで作っています。Twilioエバンジェリストとして正しい姿ですね。

まず、Twilioで着信したコールを、Functionsから自分のガラケーに転送します。このときにStatusCallback Event(ringingとanswered)を指定します。ringingイベントは、相手先(今回はガラケー)のキャリアから返ってくるRinging(呼び出し開始)を通知するものです。answeredイベントは、相手が応答したことを通知するものです。

この2つの時間差を計算することで、どのくらい呼び出し時間がかかったかがわかるのですが、TwilioのStatusCallbackはステートレスで行われるため、まずはringingイベントが発火した時点でその時の時間をどこかに保存しておく必要があります。今回は、この部分にTwilio Syncを使いました。Twilio Syncは、WebSocketのようなしくみで、多数のデバイスに対してPub/Subのような同報通信を実現するものですが、Pub/Subを実現するためにTwilio側にデータを蓄積することを利用して、簡易的なDBとして使っています。

肝心な7回目のベルの時間ですが、これが正直あまり正確ではないです。キャリアがRingingを返してから、実際に電話機が鳴動するまでにはどうしてもタイムラグが生まれるからです。なので、ここは実際に何度もテストをして、概ね7回目くらいであろう、24.0秒〜25.5秒の間に応答した場合を7回目のベルで応答したと判定しています。

では7回目だった場合に音楽を流す方法ですが、これはTwilioのREST APIのCall.updateを利用します。これは、特定のコールに対して強制的に別のTwiMLを実行させることができるAPIで、今回はこちらを使って、本来は発信者と通話するべきコールを、強制的に宇多田さんの曲に切り替えています。宇多田さんの曲データもTwilio AssetsというTwilio上で使えるストレージサービスにホストしています。

簡単にできるかと思いきや、意外と手間取ってしまいました。

チーム名
赤い芸人
チーム
プロトタイパー
Wow
意味なんてないんだよ、人生に。