MultiProviderSmsService. Providers are selected at send-time based on priority, enabled status, and optional country restrictions. Navigate to Admin → SMS Providers (/admin/sms-providers) to manage them.
Provider list
The providers page shows all configured SMS providers ordered by priority (highest first), along with:- Provider type (e.g.
twilio,vonage) - Enabled / active status
- Priority score
- Cost per SMS
- Daily and monthly limits
- Masked credentials
- Creation and last-updated timestamps
MultiProviderSmsService::getStatistics() and a list of available provider types that can be added.
Adding a provider
Select the provider type
Choose from the available types returned by
MultiProviderSmsService::getAvailableProviders() (e.g. twilio, vonage, messagebird). Each type has a set of required credential fields.Fill in the details
| Field | Required | Description |
|---|---|---|
| Name | Yes | Internal label for this provider configuration. |
| Provider type | Yes | Gateway type (immutable after creation). |
| Credentials | Yes | Provider-specific API credentials (see below). |
| Priority | No | Integer 0–100. Higher priority providers are tried first. Default: 0. |
| Cost per SMS | No | Cost in your currency for reporting purposes. |
| Daily limit | No | Maximum messages per day. Leave blank for unlimited. |
| Monthly limit | No | Maximum messages per month. Leave blank for unlimited. |
| Supported countries | No | Array of ISO 3166-1 alpha-2 country codes. Leave blank to support all countries. |
| Enabled | — | Whether this provider is available for routing. |
Twilio credentials
Forprovider_type = twilio, the required credentials are:
| Credential field | Description |
|---|---|
account_sid | Your Twilio Account SID (starts with AC) |
auth_token | Your Twilio Auth Token |
from_number | The Twilio phone number to send from (E.164 format, e.g. +15551234567) |
Setting the active provider
The active provider is the one currently selected by the routing service as the primary gateway. To promote a provider:- Ensure the provider is enabled (
is_enabled = true). - Click Set as active on the provider row.
SmsProvider::setAsActive(), which sets is_active = true on the chosen provider. You cannot set a disabled provider as active.
Multiple providers can be enabled simultaneously. Only one can be active (primary). The
MultiProviderSmsService falls back to other enabled providers if the active one fails or hits its rate limits.Editing a provider
Click Edit on a provider row. You can update the name, credentials, priority, limits, supported countries, and enabled status. The provider type cannot be changed after creation. When editing, credentials are decrypted and pre-filled. If you leave a credential field blank, it retains its previous value.Deleting a provider
Click Delete on a provider row. The provider record is permanently removed.Testing a provider
Validate configuration
Click Test on a provider row to callMultiProviderSmsService::testProvider(). This validates that the credentials are correct and the gateway is reachable without sending a real message.
Send a test SMS
To send a real test message:- Click Send test SMS on a provider row.
- Enter a destination phone number (E.164 format).
- Enter a message body (max 1000 characters).
- Click Send.
message_id if successful.
Message logs
Click View logs on a provider row to open the logs view (/admin/sms-providers/{provider}/logs). Logs are paginated at 50 per page and filterable by:
| Filter | Description |
|---|---|
| Status | Delivery status of the message |
| From date | Log entries on or after this date |
| To date | Log entries on or before this date |
Multiple providers for redundancy
To configure regional or redundancy routing:- Add a primary provider with high priority (e.g. priority
100) and no country restrictions. - Add a regional provider with a lower priority (e.g. priority
50) and setsupported_countriesto the target region’s country codes. - Add a fallback provider with priority
10and no country restrictions.