Vonage API 예제를 사용한 Laravel 8 SMS 알림

원래 @https://codeanddeploy.com에 게시된 샘플 코드를 방문하여 다운로드합니다.
https://codeanddeploy.com/blog/laravel/laravel-8-sms-notification-with-vonage-api-example

이 게시물에서는 Vonage API(이전의 Nexmo)를 사용하여 Laravel 8 SMS 알림을 구현하는 방법을 보여줍니다. 사용자 거래에 SMS를 직접 보내는 알림을 구현해야 하는 경우가 있습니다.

이전 게시물에서 Laravel 이메일 알림에 대해 공유했으며 이제 이메일 알림과 함께 구현할 수 있는 SMS 알림에 대해 파헤쳐 보겠습니다.

Laravel은 Vonage API와 원활하게 작동하므로 이를 SMS 공급자로 사용할 것입니다. 따라서 계정이 없는 경우 여기에서 등록하십시오.

이제 시작하겠습니다.

1단계: 라라벨 설치



로컬에 Laravel 8이 설치되어 있지 않은 경우 아래 명령을 실행하십시오.

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


2단계: 데이터베이스 구성



Laravel 프로젝트가 최신인 경우 데이터베이스 자격 증명을 업데이트해야 합니다. Laravel 8 프로젝트에서 .env 파일을 열기만 하면 됩니다.
.env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name_here
DB_USERNAME=your_database_username_here
DB_PASSWORD=your_database_password_here


3단계: 마이그레이션 설정



여기에서 마이그레이션을 실행하기 전에 먼저 알림 테이블을 생성해야 합니다. 다음 명령을 실행하십시오.

php artisan notifications:table


사용자 테이블의 phone_number를 사용하고 있기 때문에 사용자 마이그레이션에서 이 필드를 추가해야 합니다. 아래 예제 코드를 참조하십시오.

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name')->nullable();
            $table->string('email')->unique();
            $table->string('phone_number')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->softDeletes();
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}


사용자가 이미 존재하는 경우 마이그레이션을 사용하여 phone_number 열을 추가해야 합니다.

그럼 일단 완료. 다음 명령을 실행하십시오.

php artisan migrate


그런 다음 완료되면 사용자를 위한 시더를 만들어 봅시다. 다음 명령을 실행합니다.

php artisan make:seeder CreateUsersSeeder


일단 시더가 데이터베이스/시더 디렉토리에 친절하게 생성됩니다. CreateUsersSeeder.php를 열면 다음 코드가 표시됩니다.

<?php

namespace Database\Seeders;

use App\Models\User;
use Illuminate\Database\Seeder;

class CreateUsersSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        User::create([
            'name' => 'Juan',
            'email' => '[email protected]',
            'phone_number' => '63926*******',
            'password' => bcrypt('password')
        ]);
    }
}


그런 다음 다음 명령을 실행합니다.

php artisan db:seed --class=CreateUsersSeeder


Learn more about Laravel seeder here.

4단계: 패키지 설치 및 Vonage API 연결



Vonage를 사용하여 SMS 알림을 사용하려면 작곡가를 통해 vonage 채널 알림을 설치해야 합니다.

composer require laravel/nexmo-notification-channel


설치가 완료되면 Vonage API를 Laravel 앱에 연결해 보겠습니다. Vonage 계정에 로그인하고 "시작하기"를 클릭하십시오.



그런 다음 자격 증명을 .ENV 파일에 추가합니다.

NEXMO_KEY=key_here
NEXMO_SECRET=secret_here


다음으로 csms_from 파일에 onfig/services.php를 추가합니다. sms_from는 메시지를 보내는 데 사용할 전화 번호이며 보낼 것입니다.

'nexmo' => [
    'sms_from' => 'Vonage SMS API HERE',
],


참고: Vonage 대시보드를 통해 사용자 지정 전화번호 또는 보낸 사람 ID를 사용한 다음 여기에서 값을 설정할 수도 있습니다.

5단계: Laravel SMS 알림 생성



이제 Laravel SMS 알림 클래스 예제를 생성하여 이를 SMSNotification으로 명명하겠습니다. 이렇게 하려면 다음 명령을 실행하십시오.

php artisan make:notification SMSNotification


완료되면 탐색App/Notifications하고 연 다음EmailNotification.php 편집합니다. 아래 예를 참조하십시오.

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\NexmoMessage;

class SMSNotification extends Notification
{
    use Queueable;

    /**
     * @var array $project
     */
    protected $project;

    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct($project)
    {
        $this->project = $project;
    }

    /**
     * Get the notification's delivery channels.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function via($notifiable)
    {
        return ['mail','database','nexmo'];
    }

    /**
     * Get the mail representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {
        return (new MailMessage)
                    ->greeting($this->project['greeting'])
                    ->line($this->project['body'])
                    ->action($this->project['actionText'], $this->project['actionURL'])
                    ->line($this->project['thanks']);
    }

    /**
     * Get the array representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function toDatabase($notifiable)
    {
        return [
            'project_id' => $this->project['id']
        ];
    }

    /**
     * Get the Nexmo / SMS representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return NexmoMessage
     */
    public function toNexmo($notifiable)
    {
        return (new NexmoMessage)
                    ->content($this->project['greeting'] . ' ' . $this->project['body']);
    }

    /**
     * Get the array representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function toArray($notifiable)
    {
        return [
            //
        ];
    }
}


6단계: 경로 설정



다음으로 SMS 알림 전송을 위한 경로를 생성합니다. "routes/web.php"파일을 열고 다음 경로를 추가하십시오.

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Route::get('/send', '\App\Http\Controllers\HomeController@send')->name('home.send');



7단계: 컨트롤러 설정



이 섹션에서는 경로에 설정한 대로 HomeController에 SMS 알림을 추가합니다. 컨트롤러의 전체 코드는 아래를 참조하십시오.

<?php

namespace App\Http\Controllers;

use Notification;
use App\Models\User;
use Illuminate\Http\Request;
use App\Notifications\SMSNotification;

class HomeController extends Controller
{
    public function send() 
    {
        $user = User::first();

        $project = [
            'greeting' => 'Hi '.$user->name.',',
            'body' => 'This is the project assigned to you.',
            'thanks' => 'Thank you this is from codeanddeploy.com',
            'actionText' => 'View Project',
            'actionURL' => url('/'),
            'id' => 57
        ];

        Notification::send($user, new SMSNotification($project));

        dd('Notification sent!');
    }
}


다음으로 모델에 SMS 알림을 위한 방법을 추가하여 Vonage 패키지가 SMS 전송에 사용하는 열을 알 수 있도록 해야 합니다. 이것을 User.php 모델에 추가하십시오.

public function routeNotificationForNexmo($notification)
{
    return $this->phone_number;
}


다음은 전체 모델 코드입니다.

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var string[]
     */
    protected $fillable = [
        'name',
        'email',
        'password',
        'phone_number',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    public function routeNotificationForNexmo($notification)
    {
        return $this->phone_number;
    }
}


이제 Laravel을 사용하여 SMS 알림을 테스트할 수 있습니다.

serve 명령을 실행하여 지금 테스트할 수 있습니다.

php artisan serve


그런 다음 브라우저에서 아래 URL을 실행하여 사용자에게 SMS 알림을 보냅니다.

http://127.0.0.1:8000/send


이제 전화기에서 이 출력을 볼 수 있습니다.



평가판 계정에 대한 문제입니다.



해결 방법: 위와 같은 오류를 방지하기 위해 테스트를 위해 보낼 휴대폰 번호를 등록해야 합니다. 자세한 내용은 here을 참조하십시오.

이 튜토리얼이 도움이 되었으면 합니다. 이 코드를 다운로드하려면 여기https://codeanddeploy.com/blog/laravel/laravel-8-sms-notification-with-vonage-api-example를 방문하십시오.

행복한 코딩 :)

좋은 웹페이지 즐겨찾기