LaravelとTwilioでSMSポータルを作る方法
読む所要時間: 17 分
アプリケーションのワークフローにおいて、重要な情報をユーザーに渡すことが必要になる場合があります。Webテクノロジーが進歩したおかげで、この処理はプッシュ通知で簡単にできます。ただし、このようなサービスの多くは、ユーザーがインターネットに接続していることが必要です。残念なことに、実際にはすべてのユーザーが常にインターネットに接続できるわけではありません。
この問題は、インターネットに依存しない通知システムを使用することにより解決できます。
このチュートリアルでは、TwilioのProgrammable SMSとLaravelを使用してSMS通知ポータル(管理画面)を作成する方法をご紹介します。
目標
このチュートリアルを最後まで進めると、LaravelとTwilioを使って以下のようなSMSポータルの作成方法を学べます。
このポータルでは、ダッシュボードを介してSMSでユーザーに通知ができます。
必要条件
このチュートリアルを進めるには、以下の項目が必要です。
- Twilioのアカウント。Twilioホームページをブラウザで開き、[今すぐ無料サインアップ]ボタンをクリックするか、Twilioアカウントの作成リンクからサインアップします。このリンクを使用するとアカウントのアップグレード時に$10(米国ドル)相当分のクレジットが追加で付与されます。
プロジェクトを設定する
まず、LaravelインストーラーかComposerを使用し、新しいLaravelプロジェクトを作成します。このチュートリアルでは、Laravelインストーラーを利用します。Laravelがインストールされていない場合は、Laravel公式ドキュメントでインストール方法を確認してください。
新規にLaravelプロジェクトを生成するには、以下のコマンドをターミナルで実行します。
sms-portal
に移動し、Composerを介してTwilio SDKをインストールします。
SMSの送信に使用する電話番号を購入します。
TwilioコンソールのBuy a Numberにアクセスします。
Countryで、電話番号が属する国を選択します。現在、TwilioではSMS送信機能付きの日本の電話番号は販売しておりませんので、米国等を選択してください。
各国の電話番号で使用できる機能について詳しくは、TwilioヘルプセンターのTwilioの国際電話番号の利用と機能(英語)を参照してください。
CapabilitiesでSMSがチェックされていることを確認してください。
購入した電話番号を記録しておきます。
次に、Twilio認証情報を使用し、.envファイルを更新します。プロジェクトのルートディレクトリにある.envを開き、次の値を追加します。
*E.164形式について詳しくは、Twilioヘルプセンターの「Twilioがサポートする国際電話番号のフォーマット(E164) とは?」を参照してください。
データベースを設定する
Twilio SDKがインストールされた基本的なLaravelプロジェクトが生成されました。次に、データベースを作成します。phpMyAdminなどのGUIアプリケーションを使用してデータベースを管理している場合は、それを使用してsms_portal
という名前のデータベースを作成し、このセクションをスキップしてください。
同等のアプリケーションやツールがなく、MySQLがインストールされていない場合は、プラットフォームの公式サイトからMySQLをインストールします。
ターミナルを起動し、以下のコマンドを実行し、MySQLにログインします。
ログイン後、次のコマンドを実行し、新しいデータベースを作成します。
プロジェクトフォルダのルートにある.envファイルのデータベース設定を適宜変更します。
コマンドを実行すると、{現在のタイムスタンプ}_create_users_phone_number_table移行ファイルが/database/migrationsディレクトリに生成されます。
プロジェクトフォルダをIDEまたはテキストエディタで開くと、必要に応じて変更できるようになります。作成した移行ファイルを開きます。内容は次のようになります。
phone_number
列をテーブルに追加する必要があります。これを行うには、up()
メソッドを次のように編集します。
ファイルを移行できるようになりました。次のコマンドをターミナルで実行するだけで移行できます。
出力結果は次のようになります。
ユーザーインターフェイスを作成する
この時点において、プロジェクトのセットアップが完了しています。次に、データをデータベースに追加し、SMS通知を送信するためのシンプルなユーザーインターフェースを構築します。
/resources/views/welcome.blade.phpを開き、<head>
ブロックを次のように変更します。
ページの初期スタイルを削除し、簡単にスタイル設定できるようBootstrapCDNを使用し、Bootstrapを追加しました。次に、2つのフォームをページに作成します。フォームのうち、1つはユーザーの電話番号を登録するため、もう1つは特定のユーザーにカスタム通知メッセージを送信するためのものです。body
ブロックを次のように変更します。
上記のコードのうち、次の部分に注目します。
このスニペットは、このビューで返される利用可能なユーザーの電話番号を保存する任意フィールドを生成します。この機能は後ほど実装します。
ユーザーの電話番号を保存する
まず、クエリを実行し、データベースへのレコードの追加に使用するモデルを作成します。プロジェクトディレクトリでターミナルを起動し、次のコマンドを実行します。
app/UsersPhoneNumber.phpにある作成したファイルを開き、次のコードを追加します。
ここでは、次の点に注意してください。
protected $table= “users_phone_number”;
を追加するということは、Eloquentにテーブル名の使用を指示するということです。テーブル名の使用を指定しない場合は、クラス名の複数形がテーブル名として使用されます。protected $fillable
を追加すると、Eloquentにフィールドの一括割り当てを可能にするよう指示します。詳しくは、Laravel公式ドキュメントを参照してください。
次に、各リクエストルートに必要なロジックを実装するコントローラーを作成します。再度、ターミナルを起動し、次のコマンドを実行します。
その結果、次のような内容のコントローラーファイルがapp/Http/Controllers/HomeController.phpに生成されます。
電話番号の保存メソッドを作成する
リクエスト本文から渡されたデータを使い、新しいUsersPhoneNumber
モデルをインスタンス化する関数を作成します。
上記のコードでは、$request
本文から渡されたデータで検証を実行してから、UsersPhoneNumber
の新しいインスタンスを作成しています。ユーザーの電話番号を保存後、ウェルカムページに戻り、成功メッセージがセッションにフラッシュされます。
ユーザーの電話番号をビューに返す
次に、登録された電話番号のデータをビューに返す必要があります。HomeController
にて、users_phone_number
テーブルのクエリを実行し、クエリ結果をビューに表示するシンプルな関数を記述します。
Twilio Programmable SMSによるメッセージの送信
次のステップでは、TwilioのProgrammable SMSライブラリを使用したSMSの送信を実装します。HomeController
にて、メッセージ送信のhelper関数として機能するprivate関数を作成します。
この関数は、$message
と$recipients
の2つのパラメーターを受け取ります。次に、ビルトインのPHP getenv()
関数を使用し、保存されているTwilio認証情報を環境変数から取得します。その後、新しいTwilioクライアントを、認証情報を使いインスタンス化します。以下の呼び出しにより、SMSを送信できるようになります。
Twilioのmessages->create()
関数は、2つのパラメーターを受け取ります。1つはメッセージの受信者、もう1つはfrom
とbody
のプロパティによる配列です。from
は有効なTwilio電話番号です。
登録時にユーザー通知を送信する
sendMessage()
関数が完成しました。この関数を使用し、メッセージをユーザーに送信します。次に、ユーザー登録が成功したことをユーザーに通知するためにstorePhoneNumber()
関数を更新します。
storePhoneNumber()
関数を次のように変更します。
これで、ユーザーの電話番号がデータベースに追加されるたびに、実行されたアクションについて通知するメッセージをユーザーに送信できるようになりました。
カスタム通知を送信する
次に、特定のユーザーにカスタムメッセージを送信するための関数を記述します。HomeController
に次のコードを追加します。
フォームフィールドをルートで更新する
次に、resources/views/welcome.blade.phpに移動し、各フォームフィールドを次のように変更します。
電話番号を登録するフォーム:
特定のユーザーにカスタム通知メッセージを送信するためのフォーム:
コードをテストする
これまでに作成したすべてのコードを1つにまとめましょう。この時点において、HomeController.phpは次のようになります。
welcome.blade.phpは、次のようになります。
Laravelアプリケーションは、ローカルホストポート(通常は8000
)にて実行されます。ブラウザにおいてコマンドの実行後に表示されるローカルホストリンクを開きます。ページは次のように表示されます。
次に進み、新しい電話番号を登録します。すべての処理が正常に完了すると、まもなく登録について通知するSMSが届きます。
フィールドからユーザーを選択し、選択したユーザーに送信するテキストを入力すると、カスタム通知の送信もテストできます。
完了後、Send Notificationボタンをクリックすると、カスタム通知SMSが届きます。
まとめ
チュートリアルが完了しました。Twilio Programmable SMSをLaravelアプリケーションに統合し、SMSを介して通知メッセージを送信する方法をご紹介しました。このチュートリアルの全ソースコードは、GitHubにて確認できます。
次のステップとして、ユーザーが受け取ったSMSに対して何らかのアクションをとった場合に、特定の処理を実行してみてはいかがでしょうか?
このチュートリアルに関する質問はお気軽にお寄せください。連絡先は次のとおりです。
- Email: brian.iyoha@gmail.com
- Twitter: thecodearcher
- GitHub: thecodearcher