Notifikasi Invoice Otomatis ke WhatsApp Pelanggan dengan Laravel + Kirimin API

Notifikasi Invoice Otomatis ke WhatsApp Pelanggan dengan Laravel + Kirimin API

Salah satu kasus penggunaan paling umum untuk WhatsApp Gateway adalah notifikasi otomatis: invoice baru terbit, reminder jatuh tempo, atau update status pesanan. Berikut cara mengintegrasikan Kirimin ke aplikasi Laravel Anda untuk kasus ini.

1. Simpan Kredensial API di .env

Jangan hardcode API Key di kode. Simpan di .env lalu daftarkan di config/services.php:

// .env
KIRIMIN_API_KEY=wab_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
KIRIMIN_SESSION_ID=SESSION_ID_ANDA

// config/services.php
'kirimin' => [
    'key'        => env('KIRIMIN_API_KEY'),
    'session_id' => env('KIRIMIN_SESSION_ID'),
],

2. Buat Service Class

Bungkus pemanggilan API dalam satu class agar mudah dipakai ulang di berbagai bagian aplikasi:

<?php

namespace App\Services;

use Illuminate\Support\Facades\Http;

class KiriminService
{
    public function sendText(string $to, string $message): array
    {
        $response = Http::withToken(config('services.kirimin.key'))
            ->post('https://app.kirimin.net/api/v1/send', [
                'session_id' => config('services.kirimin.session_id'),
                'to'         => $to,
                'message'    => $message,
            ]);

        return $response->json();
    }
}

3. Kirim Notifikasi Saat Invoice Dibuat

Panggil service ini dari model event, observer, atau langsung di controller/job setelah invoice tersimpan:

use App\Services\KiriminService;

class InvoiceObserver
{
    public function created(Invoice $invoice): void
    {
        $customer = $invoice->customer;

        $message = "Halo {$customer->name}, invoice #{$invoice->number} sebesar "
                 . 'Rp ' . number_format($invoice->total, 0, ',', '.')
                 . " telah terbit. Jatuh tempo: {$invoice->due_date->format('d M Y')}.";

        app(KiriminService::class)->sendText($customer->phone, $message);
    }
}

Daftarkan observer di AppServiceProvider:

use App\Models\Invoice;
use App\Observers\InvoiceObserver;

public function boot(): void
{
    Invoice::observe(InvoiceObserver::class);
}

4. Reminder Terjadwal dengan Laravel Scheduler

Untuk reminder H-1 sebelum jatuh tempo, kombinasikan dengan Task Scheduling Laravel:

// routes/console.php atau app/Console/Kernel.php

Schedule::call(function () {
    $dueSoon = Invoice::whereDate('due_date', now()->addDay())
                       ->where('status', 'pending')
                       ->get();

    foreach ($dueSoon as $invoice) {
        $msg = "Reminder: invoice #{$invoice->number} jatuh tempo besok.";
        app(\App\Services\KiriminService::class)
            ->sendText($invoice->customer->phone, $msg);
    }
})->dailyAt('09:00');
💡 Karena pengiriman WA melibatkan HTTP request ke luar, jalankan pemanggilan API di dalam queued job (ShouldQueue) jika dipanggil dari proses yang butuh respons cepat, seperti saat checkout customer.

5. Bungkus dengan Queue Job (Direkomendasikan)

php artisan make:job SendInvoiceWhatsappNotification
class SendInvoiceWhatsappNotification implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct(private Invoice $invoice) {}

    public function handle(KiriminService $kirimin): void
    {
        $kirimin->sendText(
            $this->invoice->customer->phone,
            "Invoice #{$this->invoice->number} telah terbit."
        );
    }
}

// Dispatch dari observer/controller:
SendInvoiceWhatsappNotification::dispatch($invoice);

Siap Coba Integrasinya Sendiri?

Trial gratis 7 hari, semua fitur unlimited aktif — API Key bisa langsung dipakai dari dashboard.

Daftar Gratis Sekarang →