LaravelとNexmoを使用してSMSを送受信する

画像



Phil Leggetterによるこの短いチュートリアルでは、LaravelアプリでSMSを送受信する方法について説明します。 電話番号の初期化、SMSの送受信(使用する)、および通話を行うためのAPIを提供するクラウド通信プラットフォームであるNexmoを使用して、この機会を実現します。





前提条件



Nexmo CLI (コマンドラインインターフェイス)によってインストールされ Nexmo アカウント事前にインストールされたLaravelアプリケーションが必要です。 さらに、NexmoサービスがローカルWebサーバーにHTTPリクエストを送信できるように、ローカルトンネリングが必要になります。 ngrokをお勧めします





はじめに



まず、Laravel SMSアプリケーションを作成します。

composer create-project --prefer-dist laravel/laravel laravel-sms cd laravel-sms
      
      





次に、 Nexmo Laravelパッケージをcomposer.jsonに追加します

 "require": { ..., "nexmo/laravel": "dev-master as 1.0", "nexmo/client": "dev-master as 1.0" },
      
      





注:これらのパッケージがベータ版から出る場合、 nexmo/laravel



を有効にするだけで、 nexmo/client



が依存関係として自動的に追加されます。




Nexmoサービスプロバイダーをapp.php



構成ファイルに追加します。

 'providers' => [ ..., Nexmo\Laravel\NexmoServiceProvider::class ]
      
      





注:ファサードを使用する場合は、 aliases



追加することもできます。




パッケージをインストールし、Nexmo構成ファイルをコピーします。

 › composer update php artisan vendor:publish
      
      





最後に、Nexmo APIキーとAPIシークレットを/config/nexmo.php



に追加し、NexmoダッシュボードのAPI設定に含まれる値に基づいてAPI_KEYとAPI_SECRETの値を更新します。

 'api_key' => 'API_KEY', 'api_secret' => 'API_SECRET',
      
      





注:オプションで.env



およびenv(...)



値を宣言できます。






SMS送信



注:簡単にするために、すべての機能をapp/Http/routes.php



追加しapp/Http/routes.php







app/Http/routes.php



次のルートを追加しapp/Http/routes.php





 Route::get('/sms/send/{to}', function(\Nexmo\Client $nexmo, $to){ $message = $nexmo->message()->send([ 'to' => $to, 'from' => '@leggetter', 'text' => 'Sending SMS from Laravel. Woohoo!' ]); Log::info('sent message: ' . $message['message-id']); });
      
      





上記のコードでは、 @leggetter



値が含まれていることに注意して@leggetter



。 これは英国で機能しますが、他の国では機能しません。



画像








実際の番号を使用する必要がある人のために、既存の番号の使用とその購入について見てみましょう。





部屋のリスト、検索、レンタル



このレッスンの前提条件の1つは、 Nexmo CLIです。 アカウントに関連付けられている電話番号(正確には仮想番号)の操作など、多くのアクションに使用できます。 まだ行っていない場合は、CLIをインストールして構成する必要がありますAPI_KEY



API_SECRET



は、以前に使用したAPI資格情報に置き換える必要があります。

 › npm install -g nexmo-cli nexmo setup API_KEY API_SECRET
      
      





これで、すでにレンタルした利用可能な部屋を表示したり、レンタル可能な部屋を探したり、特定の部屋をレンタルまたはキャンセルしたりできます。 まず、アカウントで既に利用可能な番号のリストを見てみましょう。

 nexmo number:list 14155550123
      
      





上記の例では、数字があります。 部屋がない場合は、レンタル番号を検索できます。 このために知っておく必要があるのは、 ISO 3166-1 alpha-2形式の国コードの2文字です 。 実際、これは思ったより簡単です。 たとえば、英国の場合はGBであり、米国の場合はUSです。 アメリカでレンタル番号を見つけましょう:

 › nexmo number:search US 14155550111 14155550222 14155550333
      
      





番号がない場合は購入する必要があります。その後、実際の発信番号を必要とする国でSMSを送受信できます。

 › nexmo number:buy 14155550111 --confirm Number purchased: 14155550111
      
      







最後に、SMSを送信します!



次に、購入したばかりの番号を使用するようにコードを更新する必要があります。 これを行うには、次の例のように、 from



値をenv('NEXMO_NUMBER')



に変更します。

 Route::get('/sms/send/{to}', function(\Nexmo\Client $nexmo, $to){ $message = $nexmo->message()->send([ 'to' => $to, 'from' => env('NEXMO_NUMBER'), 'text' => 'Sending SMS from Laravel. Woohoo!' ]); Log::info('sent message: ' . $message['message-id']); });
      
      





次に、サーバーを起動します。

 › php artisan serve Laravel development server started on http://localhost:8000/
      
      





http://localhost:8000/sms/send/YOUR_NUMBER



。ここで、 YOUR_NUMBER



は、国番号を含むE.164形式の実数に置き換える必要があります。 上記のすべての例で示されたのと同じ形式で。



storage/logs/laravel.log



には、送信されたばかりのメッセージに関連するログエントリが表示されます。たとえば、エントリの最後にあるメッセージの一意の識別子が含まれます。

 [2016-08-02 13:45:01] local.INFO: sent message: 03000000068F5D97
      
      







着信SMSを受信する



アプリケーションが着信SMSを受信するには、いくつかのアクションを実行する必要があります。

  1. アプリケーションがローカルトンネルを介してNexmoに表示されることを確認します
  2. SMSを受信するためのルートを作成します
  3. SMSを受信するルートのCSRFを無効にする
  4. メッセージを受信したときにwebhookを呼び出すルートをNexmoに伝えます。




Nexmoプラットフォームにローカルトンネルを介してアプリケーションへのアクセスを許可することから始めましょう。 ngrokを使用していて、Laravel Webサーバーがポート8000​​でリッスンしていると仮定すると、次のようにこれを実行できます。

 › ngrok http 8000 ngrok by @inconshreveable (Ctrl+C to quit) Tunnel Status online Version 2.1.3 Region United States (us) Web Interface http://127.0.0.1:4041 Forwarding http://814882e9.ngrok.io -> localhost:8000 Forwarding https://814882e9.ngrok.io -> localhost:8000 Connections ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00
      
      





上記のように、ngrokのサブドメインが正常に作成されたことがわかり、そのサブドメインへの要求はすべて、 localhost:8000



トンネリングされます。



次に、 routes.php



ファイルでSMSを受信するためのルートを作成する必要があります。

 Route::post('/sms/receive', function(\Nexmo\Client $nexmo){ });
      
      







デフォルトでは、LaravelはCSRFトークンなしでこのルートのPOSTリクエストを見逃しません。 このルートのリクエストはトークンを持たないNexmoによって行われるため、このルートのCSRFを無効にする必要があります。 App/Http/Middleware/VerifyCsrfToken.php



次を追加します。

 protected $except = [ '/sms/receive' ];
      
      





最後に、SMSを受信したときにwebhook呼び出しを行うルートをNexmoに知らせましょう。 Nexmo CLIでこれを行うことができます。 次のコマンドを実行するときは、レンタルした電話番号とngrokサブドメインを使用する必要があります。

 › nexmo link:sms 14155550111 https://814882e9.ngrok.io/sms/receive Number updated
      
      





このコマンドを実行すると、Nexmoサービスはroute /sms/receive



呼び出しを試行し、ngrokターミナルにリクエストが表示されるはずです。

 HTTP Requests ------------- POST /sms/receive 200 OK
      
      







Nexmo PHPクライアントライブラリは、NexmoからLaravelアプリケーションに送信されたHTTPパラメーターを簡単にキャプチャし、 InboundMessage



インバウンドメッセージInboundMessage



を作成するInboundMessage



します。 次のように、ルートコード/sms/receive



を更新します。

 Route::post('/sms/receive', function(\Nexmo\Client $nexmo){ $message = \Nexmo\Message\InboundMessage::createFromGlobals(); Log::info('got text: ' . $message->getBody()); });
      
      





その後、レンタル番号にSMSを送信し、 storage/logs/laravel.log



を確認します。送信したメッセージはログに記録されているはずです。

 [2016-08-02 13:45:01] local.INFO: sent message: 03000000068F5D97 [2016-08-02 14:20:50] local.INFO: sent message: 0300000006917797 [2016-08-02 14:21:17] local.INFO: got text: Sending one back.
      
      







画像










着信SMSへの自動返信



そして最後に、着信メッセージの自動応答を作成しましょう。 Nexmo PHPクライアントは、 InboundMessage->createReply



関数を使用してこれを行う良い方法を提供します。

 Route::post('/sms/receive', function(\Nexmo\Client $nexmo){ $message = \Nexmo\Message\InboundMessage::createFromGlobals(); Log::info('got text: ' . $message->getBody()); $reply =$nexmo->message()->send($message->createReply('Laravel Auto-Reply FTW!')); Log::info('sent reply: ' . $reply['message-id']); });
      
      





レンタルした番号にメッセージを送信すると、自動応答が届きます。 それはほとんど魔法です!



画像










おわりに



このチュートリアルでは、Nexmoクラウド通信プラットフォームを使用したLaravelアプリケーションで、SMSの送受信、さらにはSMSへの自動返信を実装するために知っておく必要のあるすべてを取り上げました。



このレッスンのコードはgithub.com/nexmo-community/laravel-smsにあります。



All Articles