Installation:
composer require sayadaazami/kavenegar
Publish Config:
php artisan vendor:publish --provider="Kavenegar\Laravel\ServiceProvider"
(Laravel 5/6: Use --provider="Kavenegar\Laravel\ServiceProviderLaravel5/6")
config/kavenegar.phpapi_key from Kavenegar Panel.First Use Case: Send a basic SMS:
use Kavenegar\Facades\Kavenegar;
Kavenegar::send('1234567890', 'Hello from Laravel!');
config/kavenegar.php: API key, sandbox mode, and default settings.Kavenegar facade: Primary entry point for all SMS operations.Sending SMS:
// Basic
Kavenegar::send($receiver, $message);
// With options (e.g., line number, type)
Kavenegar::send($receiver, $message, [
'line' => '1234567890', // Sender line
'type' => 'sms', // 'sms' or 'voice'
]);
Verification Codes:
$code = Kavenegar::sendVerificationCode($receiver, $templateId);
// Store $code in DB for later validation.
Batch Sending:
$receivers = ['09123456789', '09987654321'];
Kavenegar::batchSend($receivers, 'Your message here');
Async Sending (Queue):
// Dispatch a job (requires queue setup)
SendSmsJob::dispatch($receiver, $message);
php artisan make:job SendSmsJob
// app/Jobs/SendSmsJob.php
public function handle() {
Kavenegar::send($this->receiver, $this->message);
}
Templates:
Kavenegar::sendTemplate($receiver, $templateId, ['name' => 'John']);
created):
// User.php
protected static function boot() {
static::created(function ($user) {
Kavenegar::send($user->phone, "Welcome, {$user->name}!");
});
}
// app/Http/Middleware/SendWelcomeSms.php
public function handle($request, Closure $next) {
if (auth()->check() && auth()->user()->shouldSendWelcomeSms()) {
Kavenegar::send(auth()->user()->phone, 'Welcome!');
}
return $next($request);
}
Notification class:
// app/Notifications/SmsNotification.php
public function via($notifiable) {
return ['kavenegar'];
}
public function toKavenegar($notifiable) {
return (string) $this->message;
}
config/notifications.php.API Key Exposure:
config/kavenegar.php to version control.// .env
KAVENEGAR_API_KEY=your_key_here
Update config file:
'api_key' => env('KAVENEGAR_API_KEY'),
Sandbox Mode:
'sandbox' => true) for testing.1000000000). Use real numbers in production.Rate Limits:
try {
Kavenegar::send($receiver, $message);
} catch (\Exception $e) {
if ($e->getCode() === 429) { // Rate limited
sleep(2);
retry();
}
}
Character Limits:
$message = Str::limit($longMessage, 300);
Error Handling:
401: Invalid API key.400: Invalid receiver/format.429: Rate limited.try {
Kavenegar::send($receiver, $message);
} catch (\Exception $e) {
Log::error("Kavenegar SMS failed: {$e->getMessage()}");
}
Enable Logging:
Add to config/kavenegar.php:
'debug' => true,
Logs will appear in storage/logs/laravel.log.
Test with Sandbox:
'sandbox' => true in config.1000000000) to verify messages.API Response Inspection: Access raw responses via:
$response = Kavenegar::send($receiver, $message, [], true);
// $response contains full API reply (e.g., status, message ID).
Custom HTTP Client:
Override the default Guzzle client in ServiceProvider:
// app/Providers/KavenegarServiceProvider.php
public function register() {
$this->app->singleton('kavenegar', function ($app) {
$client = new \GuzzleHttp\Client([
'timeout' => 30,
'headers' => ['User-Agent' => 'MyApp/1.0'],
]);
return new Kavenegar\Kavenegar($app['config']['kavenegar'], $client);
});
}
Add New Methods: Extend the facade or service class:
// app/Extensions/KavenegarExtension.php
namespace App\Extensions;
use Kavenegar\Kavenegar as BaseKavenegar;
class KavenegarExtension extends BaseKavenegar {
public function sendWithRetry($receiver, $message, $retries = 3) {
for ($i = 0; $i < $retries; $i++) {
try {
return parent::send($receiver, $message);
} catch (\Exception $e) {
if ($i === $retries - 1) throw $e;
sleep(2 ** $i);
}
}
}
}
Bind it in a service provider:
$this->app->bind('kavenegar', function ($app) {
return new KavenegarExtension($app['config']['kavenegar']);
});
Queue Failures:
Handle failed jobs in FailedJob handler:
// app/Listeners/HandleFailedSmsJob.php
public function handle(FailedJob $event) {
if ($event->job instanceof \App\Jobs\SendSmsJob) {
Log::error("Failed to send SMS to {$event->job->receiver}");
// Retry logic or notify admin
}
}
How can I help you explore Laravel packages today?