andriwil0176 / laravel-watzap
Laravel package wrapper for Watzap API (official endpoints)
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/andriwil0176/laravel-watzap
Requires
- php: >=8.0
- guzzlehttp/guzzle: ^7.0
- illuminate/support: ^10.0|^11.0|^12.0
Requires (Dev)
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^10.0
README
Laravel package untuk integrasi Watzap API.
Mendukung multi-number, queue dengan random delay, round-robin sender, dan webhook handler.
✨ Features
- ✅ Check API status
- ✅ Validate WhatsApp number
- ✅ Grab WhatsApp groups & participants
- ✅ Send Text, Image (URL), File (URL)
- ✅ Send to Group (Text, Image, File)
- ✅ Webhook management (set, get, unset)
- ✅ Queue support (default ON) dengan random delay antar pesan (30–120s)
- ✅ Multi-number round-robin (auto pilih
number_keydari array config)
📦 Install
composer require andriwil0176/laravel-watzap
Publish config:
php artisan vendor:publish --tag=watzap-config
⚙️ Configuration
Tambahkan ke .env:
WATZAP_API_KEY=your_api_key_here WATZAP_NUMBER_KEYS=key1,key2,key3 # optional overrides WATZAP_BASE_URL=https://api.watzap.id/v1 WATZAP_USE_QUEUE=true WATZAP_MIN_DELAY=30 WATZAP_MAX_DELAY=120
🚀 Usage
Via Facade
use Watzap; Watzap::sendText('6281234567890', 'Hello world!');
Via Dependency Injection
use Andriwil0176\Watzap\WatzapClient; class DemoController extends Controller { public function send(WatzapClient $watzap) { return $watzap->sendImage('6281234567890', 'https://example.com/image.jpg', 'Check this out!'); } }
Example Artisan Command
php artisan watzap:send 6281234567890 "Test message"
🧪 Testing
Run PHPUnit:
vendor/bin/phpunit --testdox
🔗 Webhook
Route default:
POST /watzap/webhook
Controller akan mengembalikan payload apa adanya.
Kamu bisa extend untuk handle event incoming_chat, dll.
📱 Phone Number Utilities
Selain integrasi ke API Watzap, package ini juga menyediakan helper untuk validasi dan normalisasi nomor WhatsApp ke format internasional (E.164).
🔍 Cek format nomor $client = app(\Andriwil0176\Watzap\WatzapClient::class);
$client->isValidNumberFormat('6281234567890'); // true (sudah format E.164) $client->isValidNumberFormat('081234567890'); // false (masih format lokal) $client->isValidNumberFormat('12025550123'); // true (nomor US)
🔄 Normalisasi nomor lokal $client = app(\Andriwil0176\Watzap\WatzapClient::class);
// Indonesia (default kode negara 62) $client->normalizeNumber('08123456789'); // Hasil: "628123456789"
// UK (kode negara 44) $client->normalizeNumber('02071838750', '44'); // Hasil: "442071838750"
⚠️ WhatsApp hanya menerima format internasional (E.164). Tidak ada nomor WhatsApp valid yang dimulai dengan 0.
🏗 Example App
Repo ini juga menyertakan folder example/ yang berisi:
- Controller demo (
WatzapDemoController) - Artisan Command demo (
SendWatzapCommand)
🛠 Development Notes
- Namespace default:
Andriwil0176\Watzap→ ubah sesuai username/org kamu. - Queue default ON dengan delay random (30–120s). Bisa dimatikan via
WATZAP_USE_QUEUE=false. - Round-robin akan otomatis memilih
number_keydari array config.
📜 License
MIT License
Copyright (c) 2025 Andri Willyarso
Permission is hereby granted, free of charge, to any person obtaining a copy...