Installation
composer require messagebird/php-rest-api
Add your API key to .env:
MESSAGEBIRD_API_KEY=your_api_key_here
First Use Case: Sending an SMS
use MessageBird\Client;
use MessageBird\Objects\Message;
$client = new Client(config('messagebird.api_key'));
$message = $client->messages->create([
'originator' => 'YourBrand',
'recipients' => ['447123456789'],
'body' => 'Hello from MessageBird!'
]);
Configuration
Place API key in config/services.php:
'messagebird' => [
'api_key' => env('MESSAGEBIRD_API_KEY'),
],
Access via config('messagebird.api_key').
Basic SMS
$client->messages->create([
'originator' => 'Support',
'recipients' => ['+1234567890'],
'body' => 'Your verification code is 12345.'
]);
Transactional Messages (with Template)
$client->messages->create([
'originator' => 'AppName',
'recipients' => ['+1234567890'],
'body' => 'Your order #{{orderId}} is confirmed!',
'template' => 'ORDER_CONFIRMATION'
]);
Multipart Messages (Long SMS)
$client->messages->create([
'originator' => 'News',
'recipients' => ['+1234567890'],
'body' => 'Part 1... [LONG_MESSAGE] Part 2...',
'multipart' => true
]);
$message = $client->messages->get('message_id');
$status = $message->getStatus(); // 'scheduled', 'sent', 'delivered', etc.
$recipients = ['+1234567890', '+1987654321'];
foreach ($recipients as $phone) {
$client->messages->create([
'originator' => 'BatchSend',
'recipients' => [$phone],
'body' => 'Batch message for ' . $phone
]);
}
public function handle($request, Closure $next) {
$signature = $request->header('X-MessageBird-Signature');
$payload = $request->getContent();
$expectedSignature = hash_hmac(
'sha256',
$payload,
config('messagebird.webhook_secret')
);
if (!hash_equals($expectedSignature, $signature)) {
abort(401, 'Invalid signature');
}
return $next($request);
}
Route::post('/messagebird/webhook', [MessageWebhookController::class, 'handle']);
retry helper for transient failures:
use Illuminate\Support\Facades\Retry;
Retry::retry(3, function () use ($client, $messageData) {
try {
$client->messages->create($messageData);
} catch (Exception $e) {
if ($e->getCode() !== 429) { // Rate limited
throw $e;
}
sleep(1); // Backoff
}
});
Phone Number Formatting
+1234567890, not 234567890).Originator Length
Character Limits
Webhook Delays
API Key Exposure
.env to version control.Enable Debug Mode
$client = new Client(config('messagebird.api_key'), [
'debug' => true,
'logger' => new \Monolog\Logger('messagebird')
]);
Inspect Raw Responses
try {
$response = $client->messages->create($data);
} catch (\MessageBird\Exceptions\MessageBirdException $e) {
\Log::error('MessageBird Error:', [
'code' => $e->getCode(),
'message' => $e->getMessage(),
'raw_response' => $e->getResponseData()
]);
}
Test in Sandbox
$client = new Client(config('messagebird.api_key'), [
'environment' => 'sandbox'
]);
Custom Response Handling
MessageBird\Client class to add middleware:
class CustomClient extends \MessageBird\Client {
public function __construct($apiKey, array $options = []) {
parent::__construct($apiKey, $options);
$this->addMiddleware(new \App\MessageBird\LoggingMiddleware());
}
}
Queue Delayed Messages
SendSmsJob::dispatch($recipient, $message)
->delay(now()->addMinutes(5)); // Schedule for later
Template Management
$templates = $client->messages->templates->get();
$template = $templates->find(fn($t) => $t->getName() === 'ORDER_CONFIRMATION');
Fallback for Failed Messages
if ($message->getStatus() === 'failed') {
Mail::to($user->email)->send(new SmsFallbackMail($message));
}
Environment-Specific Keys
Use Laravel’s env() with fallbacks:
'api_key' => env('MESSAGEBIRD_API_KEY', env('MESSAGEBIRD_SANDBOX_KEY')),
Proxy Support Configure proxy in client options:
$client = new Client($apiKey, [
'proxy' => 'http://proxy.example.com:8080'
]);
Timeouts Adjust HTTP client timeout (default: 30s):
$client = new Client($apiKey, [
'timeout' => 60 // 60 seconds
]);
How can I help you explore Laravel packages today?