「Twilio Welcome イベント Vol.24 アイデアソン」から生まれたアイデアを形に

20140115.png2013年12月19日開催した「Twilio Welcome イベント Vol.24 アイデアソン」にて生まれたアイデアをTwilioを使ってコード化してみました。

Twilio Welcome イベントは Twilioに興味があるなら誰でも気軽に参加し、電話やSMSを使ってできることを考えたり、新しい情報の共有、Twilioの体験など、電話・ SMS API を直感できる内容で月1回開催しています。

このブログでは前回のアイデアソンで紹介された、「おねだりサンタ」という心を温まるアイデアを紹介してみたいと思います。
※ コードに関してはTwilioで対応できる範囲内で少し変更しました。

おねだりサンタは子供が欲しがっているプレゼントを録音で預かっておいとくと、両親や祖父母はSMSや音声メッセージで子供が欲しがっているものを知る事ができるサービスです。

みなさんからのアイデア

  • 子供が「050」(Twilio電話番号)に電話をかけてサンタさんからもらいたいプレゼントを録音。
  • 録音が終わったら既に登録されている両親や祖父母など身内の人に電話もしくはSMSが送信される。
  • SMSには録音メッセージ確認用の電話番号が送られるので、その電話番号に電話をかければ子供が録音したメッセージを確認できる。
  • サンタさんからアラーム、予約コール機能として朝7時(事前設定)になると自動的に子供に電話をかけ、プレゼントのある場所を教えてくれる。

このブログでは下記の手順を実装しました
子供 → 050(Twilio番号) → 録音 → 録音終了 → SMS配信(両親など)→
SMS本文内の電話番号をクリック → 録音メッセージ確認 → プレゼントを用意する(親の判断)

アイデアに必要なTwilio機能一覧

  • 受信:incoming
  • 録音:<Record>
  • メッセージ:<Sms>
  • プッシュ音認識:<Gather>
  • 録音ファイル再生:<Play>
  • テキスト音声合成:<Say>
  • 通話終了:<Hangup>

※ 各動詞の詳しい説明はこちらをご覧ください。

子供によるメッセージ録音、家族による確認

050番号に電話をかけると最初このファイルが実行されます。

$_POST["Digits"]:<Gather>を使えば発信者が入力したキーを認識できます。
この値はリアルタイムで渡され、電話の分岐処理をこのコードだけで実現できます。

子供が「050」に電話をかけ、「1」を押すと録音が始まります。
家族が「050」に電話をかけ、「2」を押すとメッセージの確認ができます。

録音されたメッセージを確認するには認証キーの入力が必要です。
今回は子供がかけた電話番号(自宅など)の下4桁を認証キーとして利用します。

処理の遷移
  • 10行目:<Record action="URL">
    この処理はRecording(録音)終了後の処理を指定できます。
    録音が終わったら録音された音声ファイルのURLを「santa.php」渡します。
    ※ Twilioは<Record>から録音ファイルのURLを発行しますので、そのURLを<Play>動詞に設定することで音声ファイルの再生が可能になります。
  • 13行目:<Gather action="URL">
    <Gather>の入力終了判断は2つ。
    その1は、numDigitsに設定した桁数が入力されたら。
    その2は、timeoutに設定された時間(秒単位)が経過したら。
    <Gather>はこの2つの条件で入力終了を判断し、「action」のURLに入力された値を渡します。

これで子供は電話をかけることでサンタさんにメッセージを送る事ができるようになりました!
また、家族は子供が欲しがっているプレゼントを電話にて確認することが可能です。

家族がサンタになります

このスクリプトでは「onedari-santa.php」から渡された値を元に録音完了メッセージや認証、SMSの送信、録音ファイルの確認を行います。

8行〜11行までが「onedari-santa.php」から渡されたパラメータを受け取る部分です。
この値はリアルタイムで渡され基本「POST」で取得できます。

9行:発信者番号の取得。

11行:Twilioから発行された録音ファイルのURLを取得。

32行で録音ファイルの存在チェックを行います。
録音ファイルのURLが設定されていることは子供が録音を完了したことになります。

33行では<Say>動詞を使って録音完了メッセージを流します。
※ <Say>を使えばテキストを音声に変換できます。

34行で登録されている(仮定)家族の電話番号にSMSを送信します。
届いたSMSにメッセージ確認用の電話番号を入れて送信されるのでクリックするだけで
メッセージの確認ができます。

次は家族側が「050」に電話をかけ、認証キー4桁を入力すると 35行の処理に入ります。
この処理では前処理(onedari-santa.php)の13行目の<Gather>動詞より渡された4桁と
DBから取得された4桁を比較し認証を行います。
認証に通ると<Play>動詞より録音ファイルが再生されます。

ここでは「1」を押したら再確認、「2」を押したら通話終了の選択ができます。

Twilioの処理終了は大きく2つあります。

  1. 次に処理するものが無い場合
  2. <Hangup>による切断

上記の、
①は34行のように<Sms>を送信した後、次に処理するものがないため通話は終了されます。
②は45行のように<Hangup>を使って通話を切断させます。

まとめ

今回はスクリプト2枚でアイデアソンから生まれたアイデアを形にしてみました。
もちろん、より細かい処理を追加したり、SMSではなく電話による通知も可能ですし、
DBを使わずに処理をさせる方法など、やり方は沢山あるかと思います。

開発の簡単さ

Twilioは自由自在にコードを組み込むことによっていろんな形のアプリケーションを開発する
ことが可能です。
元になる形式は XMLですが、今回のようにPHPはもちろんRubyやJAVAなど様々な
プログラミング言語を使ってアプリケーションの開発ができるのもTwilioの強みの一つです。

これからTwilio Welcomeイベントはアイデアソンはもちろんより多様なテーマで
Twilioの楽しさや強み、可能性の情報を共有できるようにして行きたいと思います。
次回はどんなアイデアがどんな形で生まれるのかも楽しみにしてください。

今月は「1月29日(水)19:30〜」、Twilio機能をテーマで開催致します。

Twilioのビジネスの話や2013年追加された新しい機能、簡単なコードを通じて開発の簡単さなどの共有ができればと思います。

この記事をシェア


最新記事

すべての記事へ