TwilioでSMSの送信方法。(初心者がつまずくポイント)

2015年11月14・15にTechCrunch主催のハッカソンが開催されました。そのハッカソンにTwilioのサポーターとして参加しました。
ハッカソンのルールとして、2日間で何かを開発するのですが、APIスポンサーが提供するAPIをどれか1つ以上使うというのがルールです。

今回は36チーム中、なんと12チームでTwilioを利用し開発いただけました。
Twilioのサポーターとして参加していると、皆さんつまずくポイントは同じだなーという印象を受けました。今回はTwilioの利用用途として最も多かったSMS送信で皆さんがつまずいたポイントなどを紹介いたします。

なお、以前にもTwilioの記事を投稿していますので、そちらもよろしければどうぞ。
Twilioを使って電話Webアプリケーションを構築しよう

 

「Webサイトからお問い合わせが来ない…」とお悩みの方必見!
当サイトのノウハウを詰め込んだ『Web集客の無料ガイド』をご提供

SMSの送信方法

 

SMSを送信する方法は下記の手順で送ることができます。

  1. Twilioのアカウント登録
  2. 電話番号を取得する(アメリカの電話番号)
  3. TwiMLか、TwilioのライブラリよりSMSを送信

 

まず、Twilioのアカウント登録ですが、こちらは説明を割愛させていただきます。

電話番号の取得

Twilioの管理画面にログインし「電話番号」、「Buy a Number」をクリックします。

 

購入する電話番号を検索しますが、ここで国を「United States」を選択してください。

ポイント:

SMSの送信は日本の050番号から送ることができません。アメリカの番号を購入する必要があります。

 

電話番号購入後に、TwiMLか、Twilioのライブラリを使いSMSを送信します。
今回はTwilioのライブラリを使用した送信方法をご紹介いたします。

まず、Twilioのラブララリーをダウンロードしてください。(PHP以外の言語はこちら

 

  1. <?php
  2. // ダウンロードしたライブラリーを読み込みます
  3. require "lib/Services/Twilio.php";
  4.  
  5. // アカウントのSIDと、トークンをTwilio(www.twilio.com/user/account)
  6. // の管理画面よりコピーします。
  7. $AccountSid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
  8. $AuthToken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
  9.  
  10. // TwiloのRESTインスタンスを起動します
  11. $client = new Services_Twilio($AccountSid, $AuthToken);
  12.  
  13. // 発信先の電話番号と名前を入力(複数指定可能)
  14. // 日本国内の場合 +81 を頭に付ける。080-1111-1111に発信する場合、
  15. // +818011111111と指定ください。
  16. $people = array(
  17. "+818011111111" => "Masayuki Abe",
  18. );
  19.  
  20. foreach ($people as $number => $name) {
  21. $sms = $client->account->messages->sendMessage(
  22. // Twilioで購入した電話番号を入力
  23. "201-831-9820",
  24. $number,
  25. // smsで送信する内容
  26. "SMSのテストメッセージ"
  27. );
  28. }

以上で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を受けるファイルを配列で指定します。

  1. $client->account->sms_messages->create(
  2. "201-831-9820",
  3. "+818011111111",
  4. "メッセージの送信テストです",
  5. array('StatusCallback'=>'http://example.com/statuscallback_recive.php')
  6. );

 

もしくはTwilio REST APIというものでもCallbackを受け取ることができます。

  1. <?php
  2.  
  3. $client->account->messages->create(array(
  4. 'To' => "+16518675309",
  5. 'From' => "+14158141829",
  6. 'Body' => "Hey Jenny! Good luck on the bar exam!",
  7. 'StatusCallback' => "http://example.com/statuscallback_recive.php"
  8. ));

 

様々なメソッドが用意されているのも、混乱のポイントですよね。。。
(Twilioチームにメソッドの統一を提案しました)

 

あとはStatsucallback_recive.phpにPOSTデータとして受け取ることができます。

  1. $_POST['SmsSid']:SMSの送信時に発行されるID
  2. $_POST['SmsStatus']:sent
  3. $_POST['MessageStatus']:sent
  4. $_POST['To']:発信先
  5. $_POST['MessageSid']:メッセージID
  6. $_POST['AccountSid']:アカウントID
  7. $_POST['From']:発信元
  8. $_POST['ApiVersion']:2010-04-01

 

JavaScriptで受け取りたいという質問もありましたので、少し無理矢理な気もしますが、こんな感じで受け取ることもできます。

  1. <script>
  2. var MessageStatus = "<?php echo $_POST['MessageStatus'] ?>";
  3. console.log(MessageStatus);
  4. </script>

 

その他の質問で多かったのが、Callbackの受け取り方や、mp3の音声ファイルの流し方などです。
これらの方法はまた後日書きたいと思います。

 

関連タグ:

CPIの最新情報をTwitterでチェックできます!
@cpiadjp
次へ
前へ