wawabot / laravel
Laravel package untuk kirim pesan WhatsApp via WaWaBot API
Requires
- php: ^8.1
- illuminate/contracts: ^10.0|^11.0|^12.0
- illuminate/http: ^10.0|^11.0|^12.0
- illuminate/support: ^10.0|^11.0|^12.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0|^10.0
- phpunit/phpunit: ^10.0|^11.0
README
Package Laravel untuk mengirim pesan WhatsApp melalui WaWaBot API. Cukup install package ini, set api_key dan account_id, lalu panggil method untuk kirim teks, gambar, atau kelola sesi WhatsApp.
- Packagist: packagist.org/packages/wawabot/laravel
- GitHub: github.com/sikuning/WaWaBot
Persyaratan
- PHP 8.1+
- Laravel 10, 11, atau 12
Instalasi
Masuk ke folder project Laravel Anda, lalu jalankan:
composer require wawabot/laravel
Tidak perlu menambah repositories di composer.json — package sudah tersedia di Packagist.
Laravel akan otomatis mendeteksi WaWaBotServiceProvider lewat auto-discovery.
Publish config (opsional)
php artisan vendor:publish --tag=wawabot-config
File config akan tersedia di config/wawabot.php.
Set environment variables
Tambahkan ke file .env:
WAWABOT_BASE_URL=https://wa-api.wawabot.id WAWABOT_API_KEY=api-key-dari-penyedia-layanan WAWABOT_ACCOUNT_ID=user-1
| Variabel | Keterangan |
|---|---|
WAWABOT_BASE_URL |
Base URL API (default: https://wa-api.wawabot.id) |
WAWABOT_API_KEY |
API key dari penyedia layanan |
WAWABOT_ACCOUNT_ID |
ID akun WhatsApp Anda (contoh: user-1) |
Instalasi alternatif (development)
Install dari folder lokal atau GitHub (tanpa Packagist)
Folder lokal — untuk develop package sebelum publish:
{
"repositories": [
{
"type": "path",
"url": "../WaWaBot-Laravel",
"options": { "symlink": true }
}
],
"require": {
"wawabot/laravel": "@dev"
}
}
Langsung dari GitHub — jika perlu versi dev-main sebelum rilis di Packagist:
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/sikuning/WaWaBot.git"
}
],
"require": {
"wawabot/laravel": "dev-main"
}
}
Alur penggunaan (pertama kali)
Sebelum bisa kirim pesan, akun WhatsApp harus ditautkan lewat QR code:
- Start sesi —
start() - Ambil QR —
qr(), tampilkan ke user (browser/API) - Scan di HP — Buka WhatsApp → Pengaturan (ikon roda gigi) → Perangkat tertaut → Tautkan perangkat → arahkan kamera ke QR
- Cek status login —
infoMe()atausession() - Kirim pesan —
send()atausendMedia()
Penggunaan
Via Facade (menggunakan config .env)
use WaWaBot\Facades\WaWaBot; // Kirim teks WaWaBot::send('6281234567890', 'Halo dari Laravel!'); // Kirim gambar WaWaBot::sendMedia( to: '6281234567890', filePath: storage_path('app/public/foto.jpg'), caption: 'Ini caption gambar', );
Via dependency injection
use WaWaBot\WaWaBot; class NotificationController extends Controller { public function __construct(private WaWaBot $waWaBot) {} public function sendWelcome(string $phone): array { return $this->waWaBot->send($phone, 'Selamat datang!'); } }
Instansiasi manual (multi akun / tanpa .env)
Berguna jika satu aplikasi mengelola beberapa akun WhatsApp:
use WaWaBot\WaWaBot; $bot = new WaWaBot( apiKey: 'api-key-anda', accountId: 'user-1', baseUrl: 'https://wa-api.wawabot.id', // opsional, ini default-nya ); $bot->send('6281234567890', 'Pesan dari akun user-1');
Contoh lengkap: dari pairing sampai kirim pesan
use WaWaBot\Facades\WaWaBot; use WaWaBot\Exceptions\WaWaBotException; try { // 1. Mulai sesi akun WaWaBot::start(); // 2. Ambil QR (JSON — untuk ditampilkan di frontend) $qrData = WaWaBot::qr(); // $qrData berisi response JSON dari API (mis. data QR base64) // Atau ambil sebagai HTML (untuk langsung render di browser) // $qrHtml = WaWaBot::qr(isHtml: true); // 3. Setelah user scan QR di HP, cek status login $info = WaWaBot::infoMe(); $session = WaWaBot::session(); // 4. Kirim pesan teks $result = WaWaBot::send('6281234567890', 'Halo, ini pesan teks!'); // 5. Kirim gambar / media $mediaResult = WaWaBot::sendMedia( to: '6281234567890', filePath: public_path('images/promo.jpg'), caption: 'Promo bulan ini!', ); // 6. (Opsional) Cek apakah nomor terdaftar di WhatsApp $lookup = WaWaBot::lookup('085612312311'); } catch (WaWaBotException $e) { // Handle error dari API logger()->error('WaWaBot error', [ 'message' => $e->getMessage(), 'status' => $e->getCode(), 'body' => $e->response?->json(), ]); }
Daftar method
| Method | HTTP | Endpoint | Deskripsi |
|---|---|---|---|
start() |
POST |
/accounts/{id}/start |
Memulai sesi akun |
session() |
GET |
/accounts/{id}/session |
Status sesi akun |
qr($isHtml) |
GET |
/accounts/{id}/qr |
Ambil QR code untuk scan |
infoMe() |
GET |
/info-me |
Cek nomor & status login |
send($to, $text) |
POST |
/accounts/{id}/send |
Kirim pesan teks |
sendMedia($to, $path, $caption) |
POST |
/accounts/{id}/send-media |
Kirim gambar/file |
lookup($to) |
GET |
/accounts/{id}/lookup |
Cek nomor WhatsApp |
logout() |
POST |
/accounts/{id}/logout |
Logout / putus sesi |
Semua request mengirim header:
x-api-key: {api_key}
accept: application/json
Parameter send()
WaWaBot::send( to: '6281234567890', // nomor tujuan (format internasional disarankan) text: 'Isi pesan', );
Parameter sendMedia()
WaWaBot::sendMedia( to: '6281234567890', filePath: '/path/ke/gambar.jpg', // path file lokal yang bisa dibaca caption: 'Caption opsional', // boleh null );
Format file mengikuti dukungan API (jpeg, png, pdf, dll.).
Parameter qr()
// Response JSON (default) $data = WaWaBot::qr(); // Response HTML mentah (untuk embed di halaman web) $html = WaWaBot::qr(isHtml: true);
Penanganan error
Jika API mengembalikan status error (4xx/5xx), package akan melempar WaWaBot\Exceptions\WaWaBotException:
use WaWaBot\Exceptions\WaWaBotException; try { WaWaBot::send('6281234567890', 'Halo'); } catch (WaWaBotException $e) { echo $e->getMessage(); // pesan error echo $e->getCode(); // HTTP status code $e->response?->json(); // body response lengkap $e->response?->body(); // raw body }
Development & testing
Clone repository:
# SSH git clone git@github.com:sikuning/WaWaBot.git # atau HTTPS git clone https://github.com/sikuning/WaWaBot.git cd WaWaBot composer install ./vendor/bin/phpunit
Lisensi
MIT