Membuat Notifikasi ke Email dan Halaman Website-mu dengan Laravel Notifications+Laravel Queues

Wahyu Ivan
6 min readOct 24, 2022

--

Image Source: https://assets-global.website-files.com/5ff3926f03b3ba043ed639d1/601f3c7607b8a9dab0771cd8_5ea8b3aadc18410dc92ecb9a_release-85-notifications.jpeg

Halo friends, setelah melewati kesibukanku 3 minggu terakhir ini, akhirnya aku bisa kembali menyempatkan diri untuk menulis di platform ini lagi hehe. Okay jadi kali ini yang ingin aku sharing ke kalian adalah penggunaan Laravel Notifications untuk mengirim notifikasi baik melalui email maupun sekedar ditampilkan di halaman web. Lalu aku juga bakal nerapin queues untuk mengatur pengiriman notifikasi agar semuanya berjalan secara seamless.

Bagi yang belum tahu, Laravel sudah menyediakan fitur build-in untuk membuat notifikasi dengan delivery channel berbasis mail maupun berbasis database secara mudah dan cepat. Jadi ya kalian sebenarnya tinggal menjalankan beberapa perintah untuk setup pembuatan notifikasi ini. Laravel juga sudah menyediakan build-in sistem queue sehingga proses pengiriman notifikasi akan dapat berjalan secara asinkron (pengiriman notifikasi dilakukan dengan menjalankan queue yang berjalan di background). Okay, langsung saja kita mulai setup-nya!

1. Menjalankan Command untuk Membuat Tabel Notifications dan Queues

Setup pertama yang harus kita lakukan adalah melakukan pembuatan tabel untuk menampung data notifikasi dan queue kita. Setup-nya cukup simple, kita hanya harus menjalankan command di bawah ini.

php artisan queue:table
php artisan notification:table

Setelah menjalankan command diatas, maka otomatis akan dibuatkan migration baru di dalam project-mu. Jika sudah, maka kita akan menjalankan command untuk mengeksekusi migration yang sudah dibuat ke database.

php artisan migrate

Jika sudah, maka database kita sekarang akan bertambah 2 buah tabel baru, yaitu tabel jobs dan tabel notifications.

Tambahan 2 Tabel Baru Hasil Migration

2. Membuat Notifikasi Baru

Untuk membuat notifikasi baru, caranya cukup mudah, tinggal menjalankan command di bawah ini dan akan otomatis dibuatkan file notifikasi yang bisa di custom sesuai kebutuhan kalian.

php artisan make:notification ExampleNotification

Jika sudah kalian jalankan command diatas, maka project akan otomatis membuatkan folder baru yaitu Notifications, dan disana akan terdapat file notifikasi yang sudah di-generate.

Tampilan File Notifikasi yang Sudah di Auto-Generate

Jika kalian preview isi dari file notifikasi yang dihasilkan, maka isinya akan seperti ini.

Preview Isi dari File Notification

Terdapat 4 function yang berbeda, yaitu __construct, via, toMail, dan toArray. Function __construct memiliki fungsi untuk mendefinisikan constructor di dalam class ExampleNotification. Nantinya, paramater-parameter yang masuk ke dalam class ExampleNotification akan di inisiasi disini. Selanjutnya ada function via, dimana function ini memiliki fungsi untuk me-return tipe delivery channel apa yang akan digunakan untuk notifikasi yang dibuat. Karena return value-nya berupa array, maka kita bisa mendefinisikan lebih dari 1 tipe delivery channel. Lalu 2 fungsi terakhir yaitu function toMail dan toArray. Jika kita hanya menggunakan delivery channel dengan tipe database untuk notifikasi, maka yang akan digunakan adalah function toArray, jika menggunakan delivery channel dengan tipe mail untuk notifikasi, maka yang akan digunakan adalah function toMail. Untuk langkah berikutnya, kita akan memodifikasi file notifikasi yang akan kita gunakan agar sesuai dengan kebutuhan kita.

3. Kustomisasi File Notification Agar Sesuai dengan Kebutuhan dan Menyelesaikan Setup yang Lainnya

Okay, jadi langkah berikutnya adalah kustomisasi dari file notification. Hal pertama yang akan kita lakukan yaitu menambahkan implementasi ShouldQueue agar notifikasi yang kita jalankan otomatis akan dibuatkan queue.

class ExampleNotification extends Notification implements ShouldQueue

Setelah itu, kita akan menambahkan variabel yang akan berfungsi sebagai penampung parameter yang masuk ke class ExampleNotification.

use Queueable;
private $data;// data to be sent to the notification

Lalu selanjutnya kita akan mengubah function __construct menjadi seperti di bawah ini.

public function __construct($data)
{
$this->data = $data;
}

Next, kita buat function via me-return 2 tipe delivery channel yaitu mail dan database.

public function via($notifiable)
{
return ['mail', 'database'];
}

Nah, selanjutnya kita custom untuk isi notifikasi mail yang akan kita kirimkan, begini kira-kira contoh modifikasi kodenya.

public function toMail($notifiable)
{
return (new MailMessage)
->subject('Example Notification')
->greeting('Hello!')
->line('Test isi Notifikasi:'.$this->data)
->action('Notification Action', url('/'))
->salutation('Ini adalah contoh notifikasi dengan mail');
}

Sedikit tips buat temen-temen, jika kalian ingin custom tampilan mail template bawaan dari Laravel, kalian bisa menjalankan command php artisan vendor:publish — tag=laravel-mail, lalu kalian bisa cek template mail bawaan Laravel sudah terpublish di folder resources/views/vendor/mail dan bisa di modifikasi sesuai keperluan kalian.

Next, kita akan custom untuk isi notifikasi yang akan tampil di web, begini kira-kira contoh modifikasi kodenya.

public function toArray($notifiable)
{
return [
'data' => $this->data
];
}

Okay, sudah semua. Tinggal kita save hasil perubahannya, lalu ada sedikit setup di .env. Karena kita akan mengirimkan notifikasi melalui mail, maka kita perlu setup konfigurasi mail di .env. Kalian bisa menggunakan layanan testing mail gratis seperti Mailtrap untuk melakukan simulasi pengiriman mail. Contoh modifikasinya di bawah ini.

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=*secret*
MAIL_PASSWORD=*secret*
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=*secret*
MAIL_FROM_NAME="Test App"

Kredensial untuk konfigurasi mail diatas bisa kalian dapatkan saat mendaftar di Mailtrap, lalu menuju SMTP Setting dan melihat kredensial kalian disana. Selain itu, kalian perlu setup untuk queue connection kalian di .env menjadi seperti ini.

QUEUE_CONNECTION=database

Nah, untuk penerapan notifikasinya gimana? Gampang, kalian tinggal panggil notifikasi kalian di dalam controller. Aku akan memberikan sebuah contoh, disini aku membuat sebuah controller bernama HomeController, lalu aku buatkan sebuah fungsi dengan nama test, nah di dalam fungsi test inilah akan dibuat data notifikasi baru dengan memanggil notifikasi yang sudah aku buat sebelumnya dengan beberapa paramater. Berikut merupakan contohnya.

<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;
use App\Notifications\ExampleNotification; //harus diisi
use Illuminate\Support\Facades\Notification; //harus diisi
use App\Models\User;
class HomeController extends Controller
{
public function test (){
$user = User::all();
$data = "Ini adalah contoh data";
//dibawah ini merupakan
//contoh mengirimkan notifikasi ke semua user
Notification::send($user, new ExampleNotification($data));

return response()->json([
'message' => 'Notifikasi berhasil dikirim'
]);
}
}

Setelah itu, aku melakukan setup pada route agar bisa memanggil fungsi test di dalam controller HomeController. Berikut merupakan penambahan route pada file web.php.

Route::get('/test', [App\Http\Controllers\HomeController::class, 'test']);

Setelah itu, jalankan command untuk me-refresh cache route dan serve project Laravel-mu.

php artisan route:cache
php artisan serve

Jika sudah, akses url http://127.0.0.1:8000/test pada browser dan akan menampilkan tampilan seperti ini.

Tampilan Response Berhasil Mengirim Notifikasi

Jika sudah, silahkan teman-teman cek tabel jobs di database kalian. Seharusnya sekarang sudah terdapat 2 data yang masuk antrian, yaitu data notifikasi untuk di web dan notifikasi untuk di mail.

Tampilan pada Tabel Jobs

Untuk mengeksekusi queue yang sudah masuk, kalian bisa menjalankan command di bawah ini.

php artisan queue:work

Setelah kalian menjalankan command diatas, maka tampilan terminal kalian akan menampilkan seperti ini.

Tampilan Terminal Setelah Menjalankan Command

Jeng-jeng, sudah selesai yeyy. Cukup mudah bukan? Sekarang kalian bisa membuat notifikasi apapun dengan cara yang sama ya, tinggal ulangi proses yang sudah dijelaskan dan sedikit modifikasi sesuai kebutuhan.

Sekian dulu yaa untuk sharing penggunaan Laravel Notification dan Queue. Semoga bermanfaat bagi temen-temen dan terimakasih sudah membaca!

Reference:
[1]
https://laravel.com/docs/9.x/notifications
[2] https://laravel.com/docs/9.x/queues
[3] https://www.positronx.io/laravel-notification-example-create-notification-in-laravel/

--

--