composer require signalads-co/laravel
php artisan vendor:publish --tag=signalads-laravel
config/signalads.php with your apikey and sender (from Signalads Dashboard).
return [
'apikey' => 'your_api_key_here',
'sender' => 'YourSenderID',
];
use Signalads\Signalads\Facades\Signalads;
Signalads::send([
'to' => '1234567890',
'message' => 'Hello from Laravel!',
]);
Signalads\Facades\Signalads (primary entry point).config/signalads.php (API key and sender ID).SignaladsServiceProvider (for customization hooks).Sending SMS:
Signalads::send([
'to' => '1234567890',
'message' => 'Your message here',
]);
Signalads::send([
'to' => '1234567890',
'message' => 'Hello!',
'sender' => 'CustomSender', // Override config
'type' => 'transactional', // 'promotional' or 'transactional'
]);
$numbers = ['1234567890', '0987654321'];
foreach ($numbers as $number) {
Signalads::send(['to' => $number, 'message' => 'Batch message']);
}
Queueing Messages (for async processing):
use Signalads\Signalads\Jobs\SendSms;
SendSms::dispatch([
'to' => '1234567890',
'message' => 'Queued message',
]);
QUEUE_CONNECTION is configured in .env (e.g., redis, database).Handling Responses:
$response = Signalads::send([...]);
if ($response->success()) {
// Handle success
} else {
Log::error('Signalads error:', ['error' => $response->getError()]);
}
Validator).Log::channel('signalads')->info('SMS sent', ['response' => $response->toArray()]);
.env to override config:
SIGNALADS_APIKEY=prod_api_key
SIGNALADS_SENDER=ProdSender
Update config/signalads.php to read from .env:
'apikey' => env('SIGNALADS_APIKEY'),
'sender' => env('SIGNALADS_SENDER'),
API Key Validation:
if (empty(config('signalads.apikey'))) {
throw new \RuntimeException('Signalads API key not configured.');
}
Phone Number Formatting:
+1234567890). Strip country codes if needed:
$cleanedNumber = preg_replace('/[^0-9]/', '', $number);
Rate Limits:
use Illuminate\Support\Facades\Http;
$response = Http::retry(3, 100)->post(...);
Queue Failures:
failed_jobs table and set up a queue worker monitor.debug to true in config/signalads.php to log raw API responses:
'debug' => env('APP_DEBUG', false),
Signalads::setClient(Http::withOptions(['debug' => true]));
Custom Responses:
Extend the SignaladsResponse class to add custom logic:
namespace App\Services;
use Signalads\Signalads\SignaladsResponse;
class CustomSignaladsResponse extends SignaladsResponse {
public function isValidNumber(): bool {
return preg_match('/^\+[0-9]{10,15}$/', $this->data['to'] ?? '');
}
}
Bind it in a service provider:
$this->app->bind(
\Signalads\Signalads\SignaladsResponse::class,
App\Services\CustomSignaladsResponse::class
);
Webhook Handling: Signalads supports delivery reports. Create a route to handle callbacks:
Route::post('/signalads/webhook', function (Request $request) {
$payload = $request->validate([
'message_id' => 'required|string',
'status' => 'required|string',
]);
// Update your DB or trigger events
});
Testing: Mock the facade in tests:
Signalads::shouldReceive('send')
->once()
->andReturn(new SignaladsResponse(['success' => true]));
How can I help you explore Laravel packages today?