TwilioとLaravel(PHP)を使って大量のSMSを送信する方法

[原本](https://www.twilio.com/blog/send-bulk-sms-twilio-laravel-php)

あなたが多数のユーザを持っていて、あなたがSMSを通してそれらを同時に更新するか、または通知する必要がある時があります。 たぶんあなたは会員制サイトや個人的なブログを運営しています。 どのような場合でも、このチュートリアルはあなたのWebアプリを使って大量のSMSを送信するための効率的で簡単な方法を提供します。

# 環境/対象
- ターミナル(コマンドライン)
- Composerインストール済み
- PHPに精通している
- Laravel(5+)に精通している
- 既存のLaravelプロジェクトがある
- Twilioアカウントを保持している

# インストールとTwilio Laravel SDKの設定
最初にやるべきことはTwilio Laravel SDKをインストールすることです。TwilioLaravel SDKは、私たちの一括SMSアプリを起動するために必要な機能を提供します。 そのためにコマンドラインを使用します。 コマンドラインで次のように入力します:

```
$ composer require twilio/sdk
```

SDKがインストールされたので、Twilioアカウントを認識するように設定する必要があります。
.envファイルを開き、次のコードを貼り付けます。 必ず変数を[Twilioの認証情報](https://jp.twilio.com/console)に置き換えてください。 TWILIO_FROMはあなたの[Twilio番号](https://jp.twilio.com/console/phone-numbers/incoming)です。

```
TWILIO_SID=ACXXXXXXXXXXXXXXXXXXX
TWILIO_TOKEN=XXXXXXXXXXXXXXXXXXXXX
TWILIO_FROM=+81XXXXXXXXXX
```

# BulkSMS ControllerのViewとCodeを設定する
BulkSMSアプリには専用のControllerが必要です。[Laravelのartisanコマンド](https://laravel.com/docs/5.7/artisan)を使用してControllerを作成します。
以下コマンドを貼り付けてControllerを作成します。

```
$ php artisan make:controller BulkSmsController
```

Controllerを開き、上部にTwilioクラスをincludeします。

```php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Twilio\Rest\Client;
use Validator;
```

次に、`bulksms.blade.php`という名前のビューファイルを作成して、BulkSMSアプリケーションに必要なフィールドを作成するためのHTMLフォームを作成します。

```
$ touch resources/views/bulksms.blade.php
```

新しく作成された`resources/views/bulksms.blade.php`ファイルを開き、以下のコードを貼り付けます:

```html
<html>
      <body>
         <form action='' method='post'>
              @csrf
                      @if($errors->any())
              <ul>
             @foreach($errors->all() as $error)
            <li> {{ $error }} </li>
             @endforeach
        @endif

        @if( session( 'success' ) )
             {{ session( 'success' ) }}
        @endif

             <label>Phone numbers (seperate with a comma [,])</label>
             <input type='text' name='numbers' />

            <label>Message</label>
            <textarea name='message'></textarea>

            <button type='submit'>Send!</button>
      </form>
    </body>
</html>
```

`routes`フォルダにある`web.php`を開き、一番下に次のコードを貼り付けます。

```php
<?php

Route::view('/bulksms', 'bulksms');
Route::post('/bulksms', 'BulkSmsController@sendSms');
```

それでは、HTMLフォームを検証してテキストメッセージを送信するための関数を作成します。`app/Http/Controllers`フォルダーにある`BulkSmsController.php`ファイルを開き、最後の中括弧の前に次のコードを入力します。

```php
<?php

        public function sendSms( Request $request )
    {
       // Your Account SID and Auth Token from twilio.com/console
       $sid    = env( 'TWILIO_SID' );
       $token  = env( 'TWILIO_TOKEN' );
       $client = new Client( $sid, $token );

       $validator = Validator::make($request->all(), [
           'numbers' => 'required',
           'message' => 'required'
       ]);

       if ( $validator->passes() ) {

           $numbers_in_arrays = explode( ',' , $request->input( 'numbers' ) );

           $message = $request->input( 'message' );
           $count = 0;

           foreach( $numbers_in_arrays as $number )
           {
               $count++;

               $client->messages->create(
                   $number,
                   [
                       'from' => env( 'TWILIO_FROM' ),
                       'body' => $message,
                   ]
               );
           }

           return back()->with( 'success', $count . " messages sent!" );
              
       } else {
           return back()->withErrors( $validator );
       }
   }
```

# テスト
アプリをテストするには、プロジェクトディレクトリでコンソールを開き、次のコマンドを入力します。

```
$ php artisan serve
```

お好みのブラウザを使用して`http://localhost:8000/bulksms`にアクセスし、フォームに記入して送信します。

# Conclusion
これで、一括SMS送信アプリを設定したので、SMS機能の拡張がどれほど簡単かを確認できます。
これはあなたの電話番号をあなた自身のデータベースに保存させるという利点をあなたに与えます。