Advertisement

Cara Sederhana Integrasi WhatsApp Gateway (Twilio) di Laravel

WhatsApp Gateway memungkinkan aplikasi kita untuk mengirim notifikasi, reminder, atau pesan otomatis kepada pengguna melalui WhatsApp. Salah satu provider terpercaya untuk keperluan ini adalah Twilio.

Cara Sederhana Integrasi WhatsApp Gateway (Twilio) di Laravel

Cara Sederhana Integrasi WhatsApp Gateway (Twilio) di Laravel

WhatsApp Gateway memungkinkan aplikasi kita untuk mengirim notifikasi, reminder, atau pesan otomatis kepada pengguna melalui WhatsApp. Salah satu provider terpercaya untuk keperluan ini adalah Twilio. Pada artikel ini, kita akan belajar bagaimana mengintegrasikan Twilio WhatsApp API ke dalam project Laravel dengan cara yang simpel dan mudah dipahami.

Persiapan Akun Twilio

Sebelum mulai coding, pastikan kamu sudah memiliki akun Twilio. Jika belum, daftar di twilio.com dan dapatkan kredensial berikut:

  • Account SID - ID unik akun Twilio kamu
  • Auth Token - Token autentikasi untuk API
  • WhatsApp Number - Nomor WhatsApp dari Twilio (format: whatsapp:+14155238886)

Untuk testing, Twilio menyediakan sandbox WhatsApp yang bisa langsung digunakan tanpa verifikasi bisnis.

Instalasi Package Twilio

Laravel tidak memiliki package bawaan untuk Twilio, jadi kita perlu install package resmi dari Twilio menggunakan Composer. Jalankan perintah berikut di terminal project Laravel kamu:

composer require twilio/sdk

Tunggu hingga proses instalasi selesai. Package ini akan memudahkan kita dalam berkomunikasi dengan API Twilio.

Konfigurasi Environment

Setelah package terinstall, tambahkan kredensial Twilio ke file .env di root project Laravel:

TWILIO_SID=your_account_sid_here
TWILIO_AUTH_TOKEN=your_auth_token_here
TWILIO_WHATSAPP_FROM=whatsapp:+14155238886
TWILIO_WHATSAPP_TO=whatsapp:+62812xxxxxxxx

Ganti nilai di atas dengan kredensial asli dari dashboard Twilio kamu. Untuk TWILIO_WHATSAPP_TO, isi dengan nomor WhatsApp tujuan yang ingin kamu gunakan untuk testing (harus join sandbox dulu jika pakai sandbox).

Membuat Service Class

Agar kode lebih terstruktur dan reusable, kita akan membuat service class khusus untuk handle pengiriman WhatsApp. Buat file baru di app/Services/WhatsAppService.php:

<?php

namespace App\Services;

use Twilio\Rest\Client;
use Exception;

class WhatsAppService
{
    protected $twilio;
    protected $from;

    public function __construct()
    {
        $sid = config('services.twilio.sid');
        $token = config('services.twilio.token');
        $this->from = config('services.twilio.whatsapp_from');
        
        $this->twilio = new Client($sid, $token);
    }

    public function sendMessage($to, $message)
    {
        try {
            $message = $this->twilio->messages->create(
                $to, // Nomor tujuan
                [
                    'from' => $this->from,
                    'body' => $message
                ]
            );
            
            return [
                'success' => true,
                'sid' => $message->sid
            ];
        } catch (Exception $e) {
            return [
                'success' => false,
                'error' => $e->getMessage()
            ];
        }
    }
}

Class ini akan menangani inisialisasi client Twilio dan proses pengiriman pesan dengan error handling yang proper.

Update Config Services

Tambahkan konfigurasi Twilio di file config/services.php agar mudah diakses:

'twilio' => [
    'sid' => env('TWILIO_SID'),
    'token' => env('TWILIO_AUTH_TOKEN'),
    'whatsapp_from' => env('TWILIO_WHATSAPP_FROM'),
],

Membuat Controller untuk Testing

Sekarang kita buat controller sederhana untuk testing pengiriman pesan. Jalankan artisan command:

php artisan make:controller WhatsAppController

Kemudian edit file app/Http/Controllers/WhatsAppController.php:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Services\WhatsAppService;

class WhatsAppController extends Controller
{
    protected $whatsapp;

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

    public function sendMessage(Request $request)
    {
        $validated = $request->validate([
            'phone' => 'required|string',
            'message' => 'required|string'
        ]);

        $to = 'whatsapp:' . $validated['phone'];
        $result = $this->whatsapp->sendMessage($to, $validated['message']);

        if ($result['success']) {
            return response()->json([
                'message' => 'Pesan berhasil dikirim',
                'sid' => $result['sid']
            ]);
        }

        return response()->json([
            'message' => 'Gagal mengirim pesan',
            'error' => $result['error']
        ], 500);
    }
}

Setup Route

Daftarkan route di routes/web.php atau routes/api.php:

use App\Http\Controllers\WhatsAppController;

Route::post('/whatsapp/send', [WhatsAppController::class, 'sendMessage']);

Testing Pengiriman Pesan

Sekarang saatnya testing! Kamu bisa menggunakan Postman atau curl untuk mengirim request POST ke endpoint yang sudah dibuat:

curl -X POST http://localhost:8000/api/whatsapp/send \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "+628123456789",
    "message": "Halo! Ini pesan test dari Laravel"
  }'

Jika berhasil, kamu akan mendapat response JSON dengan status sukses dan SID dari pesan yang dikirim.

Tips & Best Practices

Beberapa hal yang perlu diperhatikan saat implementasi WhatsApp Gateway dengan Twilio:

  • Rate Limiting - Twilio memiliki limit pengiriman pesan. Pastikan implementasi queue untuk menghindari hit limit.
  • Validasi Nomor - Selalu validasi format nomor telepon sebelum kirim (gunakan format E.164).
  • Error Handling - Tangani berbagai jenis error seperti invalid number, insufficient balance, dll.
  • Logging - Simpan log setiap pengiriman pesan untuk tracking dan debugging.
  • Template Message - Untuk production, gunakan approved message templates agar tidak kena spam filter.

Contoh Implementasi dengan Queue

Untuk performa lebih baik, kamu bisa menggunakan Laravel Queue untuk pengiriman pesan secara asynchronous. Buat job baru:

php artisan make:job SendWhatsAppMessage

Edit file job yang terbuat di app/Jobs/SendWhatsAppMessage.php:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\Services\WhatsAppService;

class SendWhatsAppMessage implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $to;
    protected $message;

    public function __construct($to, $message)
    {
        $this->to = $to;
        $this->message = $message;
    }

    public function handle(WhatsAppService $whatsapp)
    {
        $whatsapp->sendMessage($this->to, $this->message);
    }
}

Kemudian dispatch job ini dari controller atau service:

use App\Jobs\SendWhatsAppMessage;

SendWhatsAppMessage::dispatch('whatsapp:+628123456789', 'Pesan dari queue');

Kesimpulan

Integrasi WhatsApp Gateway menggunakan Twilio di Laravel ternyata cukup straightforward. Dengan mengikuti langkah-langkah di atas, kamu sudah bisa mengirim pesan WhatsApp otomatis dari aplikasi Laravel. Fitur ini sangat berguna untuk notifikasi order, reminder appointment, OTP verification, dan banyak use case lainnya.

Jangan lupa untuk selalu test di sandbox environment dulu sebelum go live, dan pastikan sudah memahami pricing model dari Twilio agar tidak ada surprise billing. Selamat mencoba!

...

Berlangganan Gratis Untuk Melanjutkan Membaca.