SORACOM Buttonで会議脱出ボタンをつくる

先日より発売になりました、SORACOM LTE-M Button powered by AWSを購入しました。(写真の上のもの)


ご存じの無い方のために説明しますと、これはAWS IoT 1-Clickに対応した国内初のボタンとなり、これ1つで任意のLambda関数の実行などAWS上での処理が実行できるボタンとなります。

従来からAWS IoT Enterprise Button(写真の下のもの)の販売はありましたが、WiFi環境を別途用意する必要がありました。本製品はKDDIが提供するLTE回線にて接続できますので、屋外でも広い範囲で利用できます。(エリアはこちらでご確認ください)

またLTEを用いたLPWAであるLTE-Mの回線を利用しますので、通常のLTEよりも低電力で駆動でき、乾電池で長寿命が実現できることもポイントとなっています。

何を作ろうか

さて何を作ろうかと思っていた矢先、マイクロソフトのクラウド デベロッパー アドボケイト、「ちょまど」こと千代田まどかさんの以下のツイートが目にとまりました。

誰しも、退屈な会議の経験はありますよね・・・

要人の方はボタンを押すことで側近の人が連れ出してくれるらしいのですが、一般人にはそれは無理ですね。そのため(こそっと)ボタンを押すことで自分の電話に掛かってきて、会議を中座できればいいな、ということで実装してみることにしました。

アーキテクチャ

記述するまでも無いほどシンプルなものになりました。

  1. SORACOM LTE-M Buttonを押す
  2. Lambda関数を実行し、TwilioのAPIを呼び出す
  3. Twilioにて携帯電話に電話を掛ける

設定方法

SORACOM LTE-M Buttonのセットアップ

ボタンに電池を挿入する際、内部に記載してあるDSNコードを控えておき、これをSORACOM ConsoleとAWS IoT 1-Clickに登録します。

SORACOMユーザコンソールへの登録

まずSORACOMユーザコンソールにログインし、メニューからガジェット⇒Buttonsに遷移します。デバイス登録ボタンをクリックし、控えていたDSNコードを入力します。

AWS IoT 1-Clickへの登録

続いてAWSマネジメントコンソールにログインし、IoTグループのIoT 1-Clickに遷移します。

デバイスの登録をクリックし、DSNコードを入力します。

続いてボタンをクリックするよう要求されます。

ボタンを押すと登録完了です。完了ボタンを押しましょう。

いやはや、事前に聞いてはいたものの恐ろしく簡単ですね。

Twilioのセットアップ

TwilioはAPIによってコントロールできる電話サービスです。
登録することで電話番号を取得でき、その電話番号での受発信がAPIでコントロール可能です。今回は発信のコントロールを行います。

アカウントの取得

今回私は初めての利用であったのでアカウント取得から行いました。
まず、Twilioのページにアクセスし、無料サインアップのアイコンをクリックします。

利用規約に同意後、氏名・メールアドレス等の情報を入力した後、携帯電話の電話番号の入力を求められます。入力した携帯電話に対してSMSで検証コードが送信され認証が完了です。

なお、トライアル(無料)アカウントではここで登録した電話番号のみに発信が可能であるため、電話を受けたい電話番号を登録することをお勧めします。
(有料アカウントにアップグレードすれば任意の番号に発信可能)

電話番号の取得

Twilioで利用できる電話番号を取得します。
電話番号の取得画面にアクセスします。

「最初のTwilio電話番号を取得」をクリックし電話番号を取得します。

トライアルで利用できる電話番号は050のIP電話番号のみです。
なお、選び直しが可能なようです。

クレデンシャル情報の確認

APIで呼び出しできるよう、クレデンシャル情報を確認しておきます。
設定画面にアクセスします。

ライブクレデンシャルの ACCOUNT SID と AUTH TOKENの内容を控えておきます。
この情報がLambda関数からの呼び出しに必要になります。

Lambda関数の設置

TwilioのAPIを呼び出して電話を掛けるPython 3.6関数を設置します。
まずLinux OS上の任意のフォルダでTwilioライブラリーを設置します。

$ pip install twilio -t .

続けて以下の内容で lambda_function.py ファイルを設置します。

from twilio.rest import Client

account_sid = "(ACCOUNT SID)"
auth_token = "(AUTH TOKEN)"

def lambda_handler(event, context):
    client = Client(account_sid, auth_token)

    call = client.calls.create(
        to="+81 (発信先電話番号)",
        from_="+81 (自分の050電話番号)",
        url="http://demo.twilio.com/docs/voice.xml"
    )

    return call.sid

アップロード用にzipアーカイブにまとめます。

$ zip -r upload.zip ./*

Python 3.6の新規Lambda関数を作成し、作成したzipファイルをアップロードします。
AWS内のリソースには特にアクセスしないため、最低限のロールで問題ありません。

Twilio APIの応答は若干時間が掛かるため、Lambdaのデフォルト実行時間(3秒)では終了しないことがあり、時間を10秒程度まで延ばすことをお勧めします。

AWS IoT 1-Clickのプロジェクト作成

最後にAWS IoT 1-Clickのプロジェクトを作成します。

今回のプロジェクト情報として任意の情報を入力します。

続けて呼び出すLambda関数と紐付けます。

プロジェクトが作成されました。続けてプレイスメントの設定を行います。

プレイスメントの設定で、登録したボタンのDSNコードと紐付けます。

これでボタンをクリックすることでLambda関数を呼べるようになりました。

動作

SORACOM LTE-M Buttonをクリックし、私の携帯電話に電話が掛かってくるようになりました。これで退屈な会議から脱出できます。

なお、ここまでの開発は2時間程度で完了しました。
お手軽に開発できる SORACOM LTE-M ButtonとAWSサービス、Twilioに感謝です。

またアイディアが思いついたら開発してみます。

なお、電話で聞こえる音声はTwilioのサンプル音声になっています。 
Lambda関数に記載してある http://demo.twilio.com/docs/voice.xml の部分を書き換えることで任意の音声に変更することが可能です。