Symfony bundle for the DevCode SMS API.
Send SMS messages and check your balance directly from your Symfony application.
composer require devcodesms/devcode-sms-bundle
Add to config/bundles.php (Symfony Flex does this automatically):
return [
// ...
DevcodeSms\Bundle\DevcodeSmsBundle::class => ['all' => true],
];
.envDEVCODE_SMS_API_KEY=your_api_key_here
Create config/packages/devcode_sms.yaml:
devcode_sms:
api_key: '%env(DEVCODE_SMS_API_KEY)%'
# Optional:
# base_url: 'https://devcodesms.com/developpeur'
# timeout: 10
use DevcodeSms\Bundle\DevcodeSmsClient;
use DevcodeSms\Bundle\Exception\DevcodeSmsException;
class NotificationService
{
public function __construct(private DevcodeSmsClient $sms) {}
public function sendWelcome(string $phone): void
{
try {
$result = $this->sms->sendSms(
sender: 'MyApp',
phone: $phone, // International format: +237659373726
message: 'Bienvenue sur MyApp!',
);
if ($result->isSuccess()) {
// SMS accepted by the API
}
} catch (DevcodeSmsException $e) {
// Network or API error
echo $e->getMessage();
}
}
}
$results = $this->sms->sendBulkSms(
sender: 'MyApp',
phones: ['+237659000001', '+237659000002', '+237659000003'],
message: 'Offre flash — 20% de réduction aujourd\'hui!',
);
foreach ($results as $result) {
echo $result->isSuccess() ? '✅' : '❌';
echo ' ' . $result->getMessage() . PHP_EOL;
}
$balance = $this->sms->getBalance();
if ($balance->isSuccess()) {
echo sprintf('Crédits restants : %d SMS', $balance->getBalance());
}
# config/packages/devcode_sms.yaml
devcode_sms:
api_key: '%env(DEVCODE_SMS_API_KEY)%' # required
base_url: 'https://devcodesms.com/developpeur' # optional
timeout: 10 # optional, seconds (default: 10)
DevcodeSmsClient| Method | Returns | Description |
|---|---|---|
sendSms(string $sender, string $phone, string $message) |
SmsResponse |
Send a single SMS |
sendBulkSms(string $sender, array $phones, string $message) |
SmsResponse[] |
Send to multiple recipients |
getBalance() |
BalanceResponse |
Check remaining credits |
SmsResponse| Method | Type | Description |
|---|---|---|
isSuccess() |
bool |
true when status is 200 |
getStatus() |
int |
HTTP-like status code |
getCode() |
string |
Short status string |
getMessage() |
string |
Human-readable message |
toArray() |
array |
Serialise to array |
BalanceResponse| Method | Type | Description |
|---|---|---|
isSuccess() |
bool |
true when status is 200 |
getBalance() |
int |
Remaining SMS credits |
getMessage() |
string |
Human-readable message |
toArray() |
array |
Serialise to array |
DevcodeSmsException| Method | Type | Description |
|---|---|---|
getMessage() |
string |
Human-readable description |
getStatusCode() |
int|null |
HTTP code or null for network errors |
getRawResponse() |
string|null |
Raw server response body |
composer install
./vendor/bin/phpunit
BSD-3-Clause © 2024 DevCode SMS
How can I help you explore Laravel packages today?