Edited at
SORACOMDay 19

Twilio x SORACOM Air で SIM の停止/再開を音声電話経由で制御する

More than 3 years have passed since last update.

SORACOM Advent Calendar 2015の19日めの記事をお届けします.

Twilio API を使って、音声電話経由で SORACOM API を叩くアプリケーションを作ってみました. 名づけて、SoraTel(ソラテル) です.

SoraTel は、専用の電話番号に電話をかけた後、操作メニュー番号と IMSI をプッシュするだけで、SORACOM Air SIM の停止や再開をおこなえる Web アプリケーションです.

SoraTel は Heroku アカウントと Twilio アカウントがあれば、下のボタンを押すだけで、いますぐ自分専用のアプリケーションを動かせます!よろしければ、ぜひお試しください.

ソースコードは GitHub にホストしています.


SoraTel のしくみ

SoraTel の実体は、100 行に満たない Sinatra アプリケーションです.

Twilio で取得した電話番号への着信を HTTP リクエストとして受信し、電話機からのプッシュ信号に応じて、SORACOM API との通信をおこないます.


使い方

README でも見られますが、ざっと解説しておきます.


Heroku の準備

Heroku アカウントを取得します. 皆さんお持ちですよね.

初めての方も、サインアップ後にブラウザでログイン状態にしておけば、ひとまず OK です.


Twilio の準備


アカウント取得

Twilio アカウントを取得します. Twilio は国内用のサービスサイトが本家とは別のところにあるようなのですが、僕は本家で取得してしまいました. たぶんどっちでやっても使えます. アカウント取得時には、SMS や音声電話による本人認証手順があります.


電話番号取得

アカウント取得後に、SoraTel で使用する電話番号を取得します.

ログイン後の画面から Get your first Twilio phone number ボタンを押します.

適当な番号が割り当てられますので Choose this Number で確定します. +813 から始まる番号ということで、03 局ですね. 着信先は東京なんでしょうか. 050 が降ってくると思っていたので意外でした.

ここで取得した電話番号が、SIM をコントロールするための発信先番号となります.


Twilio AuthToken の取得

SoraTel では Twilio で受け付けた通話を HTTP リクエストとして受け取ります. ですが、リクエスト先の URL がバレてしまうと、第三者から勝手に SIM をコントロールされてしまって、よろしくありません.

SoraTel では Twilio 経由でのリクエストであることを検証するため、認証トークンを設定しておくことができます. ダッシュボードで認証トークンを確認しておきましょう. このトークンは、デプロイ時の設定に使用します.


SoraTel アプリケーションの配備

Heroku へ SoraTel をデプロイします. まだやっていない方は、下のボタンからどうぞ.

デプロイボタンを押すと、デプロイ前に環境変数の設定画面が表示されます. ここで、Soracom の認証情報と、先ほど取得した Twilio AuthToken をセットしてください. (この情報は Heroku でのアプリケーション実行時の環境変数として使用されるだけで、勝手にどこかに送信したりはしていませんのでご安心を.)

デプロイが終わると、View ボタンが表示され、起動したアプリケーション URL にアクセスできるようになります. この URL は、Twilio 側の設定に使用します.


Twilio への通話の転送先 URL を設定

Twilioで取得した電話番号一覧画面から、電話番号をクリックし、電話着信時の転送先 URL を設定します. 設定する URL は、以下のとおりです.

https://<Herokuで稼働しているSoraTelのドメイン>/twilio

設定は以上です.


動作確認

さっそく、手元の電話機から Twilio で取得した電話番号に電話をかけてみましょう!


  • 電話が繋がると、音声ガイダンスによるメニューが再生されます. (トライアルアカウントの場合、先にトライアルのガイダンスが流れる場合があります.) 1で再開、2で停止です.

  • IMSI を入力するよう求める音声ガイダンスが再生されます. 15桁の IMSI を入力すれば、再開/停止処理が実行されます.

  • 処理が終わったら、任意のタイミングで電話を切ってかまいません.


こんなことができそう

クリスマスまで、まだちょっと日がありますので、こんなハックはいかがでしょうか.


対応するAPIを増やす

SoraTel は今のところ activate/deactivate にしか対応していません. register に対応させて SIM 即売会場で即時開通してニヤニヤするのもよし、みんな大好き update_speed_class に対応してワクワクしたり、禁断の terminate に対応させてドキドキしたりするのはいかがでしょうか.


発信者電話番号認証をする

今のままだと、Twilio 電話番号がバレてしまうと、第三者に SIM 状態を操作されてしまいます. Twilio から転送されてくる HTTP リクエストからは、発信者電話番号を取得することができますので、これを使って発信者番号認証を付けておくのが良さそうです.


発信者電話番号に応じて IMSI 入力をスキップする

別途ユーザのメイン電話番号と IMSI をひも付けておけば、IMSI の入力を不要にできますし、複数ユーザ向けになんちゃって MVNO サービスができちゃうかもしれません. うまくいったら、ぼくにクリスマスプレゼントを贈ってください.


国際化対応

locales ディレクトリの下に、辞書ファイルがあります. ja と en だけ作ってありますが、せっかくなのでいろんな言語に対応させてみてはどうでしょうか. Twilio の voice = alice20種類以上の言語読み上げに対応しているようです.


作ってみての感想

電話による音声通話や、SIM 開通のような回線契約状態変更など、ちょっと前までは、API 経由で制御できるようになるなんて思いもよらなかったサービスだと思います. API のおかげで、こういう新しいことができるようになっていくのは楽しいですね!


注意事項


  • SoraTel は MIT License のもと公開するアプリケーションです. 本ソフトウェアの利用に関して、作者は何の責任も負いません.

  • Heroku, Twilio ともに、無料で利用できる範囲には限りがあります. 制限事項については各サービス側で確認してください.


その他


  • アイコンが無いので、もし作ってくださる方がいらっしゃったらご連絡ください.

  • ソラコムたのしいので、IoT というか、なんかやりたいわーって方、いらっしゃったら誘ってください.


参考