2015年11月14・15にTechCrunch主催のハッカソンが開催されました。そのハッカソンにTwilioのサポーターとして参加しました。
ハッカソンのルールとして、2日間で何かを開発するのですが、APIスポンサーが提供するAPIをどれか1つ以上使うというのがルールです。
今回は36チーム中、なんと12チームでTwilioを利用し開発いただけました。
Twilioのサポーターとして参加していると、皆さんつまずくポイントは同じだなーという印象を受けました。今回はTwilioの利用用途として最も多かったSMS送信で皆さんがつまずいたポイントなどを紹介いたします。
なお、以前にもTwilioの記事を投稿していますので、そちらもよろしければどうぞ。
Twilioを使って電話Webアプリケーションを構築しよう
「Webサイトからお問い合わせが来ない…」とお悩みの方必見!
当サイトのノウハウを詰め込んだ『Web集客の無料ガイド』をご提供
SMSの送信方法
SMSを送信する方法は下記の手順で送ることができます。
- Twilioのアカウント登録
- 電話番号を取得する(アメリカの電話番号)
- TwiMLか、TwilioのライブラリよりSMSを送信
まず、Twilioのアカウント登録ですが、こちらは説明を割愛させていただきます。
電話番号の取得
Twilioの管理画面にログインし「電話番号」、「Buy a Number」をクリックします。
購入する電話番号を検索しますが、ここで国を「United States」を選択してください。
ポイント:
SMSの送信は日本の050番号から送ることができません。アメリカの番号を購入する必要があります。
電話番号購入後に、TwiMLか、Twilioのライブラリを使いSMSを送信します。
今回はTwilioのライブラリを使用した送信方法をご紹介いたします。
まず、Twilioのラブララリーをダウンロードしてください。(PHP以外の言語はこちら)
- <?php
- // ダウンロードしたライブラリーを読み込みます
- require "lib/Services/Twilio.php";
- // アカウントのSIDと、トークンをTwilio(www.twilio.com/user/account)
- // の管理画面よりコピーします。
- $AccountSid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
- $AuthToken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
- // TwiloのRESTインスタンスを起動します
- $client = new Services_Twilio($AccountSid, $AuthToken);
- // 発信先の電話番号と名前を入力(複数指定可能)
- // 日本国内の場合 +81 を頭に付ける。080-1111-1111に発信する場合、
- // +818011111111と指定ください。
- $people = array(
- "+818011111111" => "Masayuki Abe",
- );
- foreach ($people as $number => $name) {
- $sms = $client->account->messages->sendMessage(
- // Twilioで購入した電話番号を入力
- "201-831-9820",
- $number,
- // smsで送信する内容
- "SMSのテストメッセージ"
- );
- }
以上でSMSを送信することが出来ます。
ポイント:
Twilio登録直後のアカウントはトライアルアカウントです。
トライアルアカウントの場合、Twilio登録時の認証に使った電話番号へSMSを発信することは可能です。それ以外の番号にSMSを発信する場合はアカウントのアップグレードが必要です。
作成したPHPファイルを何らかの方法で起動してください。SMSが指定の電話番号に送信されます。
SMS送信時のStatus Callbackを受け取る
次にこのSMSを送信するメソッドsendMessage()にSMSの送信が成功したかどうかのCallbackを受け取ります。
サンプルでは、sendMessage()をキックするときに$smsに代入しているので、SMSの送信結果等が入るのかなと思い出力してみると、,"error_code":null や、"error_message":null," などの何とも微妙な値が返ってきました。うーんこれ、なんか微妙だなと思い調べてみました。
調べてみると、Statsu Callbackを受け取るには、別のメソッドが容易されていました。。。。
$client->account->sms_messages->create( ) です。
第一引数、第二引数、第三引数までは、同じです。第四引数にCallbackを受けるファイルを配列で指定します。
- $client->account->sms_messages->create(
- "201-831-9820",
- "+818011111111",
- "メッセージの送信テストです",
- array('StatusCallback'=>'http://example.com/statuscallback_recive.php')
- );
もしくはTwilio REST APIというものでもCallbackを受け取ることができます。
- <?php
- $client->account->messages->create(array(
- 'To' => "+16518675309",
- 'From' => "+14158141829",
- 'Body' => "Hey Jenny! Good luck on the bar exam!",
- 'StatusCallback' => "http://example.com/statuscallback_recive.php"
- ));
様々なメソッドが用意されているのも、混乱のポイントですよね。。。
(Twilioチームにメソッドの統一を提案しました)
あとはStatsucallback_recive.phpにPOSTデータとして受け取ることができます。
- $_POST['SmsSid']:SMSの送信時に発行されるID
- $_POST['SmsStatus']:sent
- $_POST['MessageStatus']:sent
- $_POST['To']:発信先
- $_POST['MessageSid']:メッセージID
- $_POST['AccountSid']:アカウントID
- $_POST['From']:発信元
- $_POST['ApiVersion']:2010-04-01
JavaScriptで受け取りたいという質問もありましたので、少し無理矢理な気もしますが、こんな感じで受け取ることもできます。
- <script>
- var MessageStatus = "<?php echo $_POST['MessageStatus'] ?>";
- console.log(MessageStatus);
- </script>
その他の質問で多かったのが、Callbackの受け取り方や、mp3の音声ファイルの流し方などです。
これらの方法はまた後日書きたいと思います。