Never locked to one operator

SMS Campaigns

SMS from a verification code to a bulk announcement. Define several operators; if the first one refuses, the second takes over — a code cannot fail to arrive because an operator ran out of credit.

Multiple providers, automatic failover
Segment and cost preview
Consent check before sending
Failover
Ordered chain, up to 3 providers
Duplicate guard
No retry on an ambiguous result
The problem

What happens when the operator goes down?

Waiting works for email; it does not work for SMS. A verification code has an expiry, and a code that arrives ten minutes later is a code that never arrived. Any system running on a single provider becomes a system nobody can log into the moment that provider's API fails.

What it does7

Its own screen, its own quota

SMS campaigns live on their own screen (/sms-campaigns) and the counter counts SEGMENTS, not messages. It works without an email package; the two quotas never mix.

Provider chain

You define an ordered list. If the first returns a temporary error, the second is tried. On an invalid number the chain STOPS — it is invalid at the second provider too; it also stops on a timeout, because the SMS may have gone out and a duplicate SMS is worse than a missing one.

A failing provider comes back on its own

After three consecutive errors a provider drops to the end of the chain; it is not removed. It returns to its place on the first successful send — no manual intervention.

Add providers from the panel

Adding an operator is not a release: URL, headers, body template and success rule are entered as a record.

Segment maths that is correct

Turkish characters push a message to UCS-2, where a segment ends at 70 characters instead of 160. Quota counts segments, not messages — no surprises on the invoice.

Real delivery reports

The operator DLR is bound to the message. SMS gives you what email cannot: did the handset actually receive it?

Consent gate

Commercial SMS passes through the consent ledger. A recipient without consent is blocked and appears in the report as "dropped for consent".

Code

A working example, copied from the package.

PHP
$sb = new Signalbird\Sdk\Messaging\MessagingClient($apiKey);

$sb->sendSms([
    'to'    => '+905321112233',
    'class' => 'transactional',
    'body'  => 'Your verification code: 481902',
]);
Specifications
Failover
Ordered chain, up to 3 providers
Duplicate guard
No retry on an ambiguous result
Segment maths
GSM-7 / UCS-2 aware
Delivery
Per message via DLR
Number format
E.164 (local formats converted automatically)
FAQ

Can I use my own SMS provider?

Yes. A provider definition is configuration: API address, credential fields and success rule. No code change is needed.

Can the same SMS go out twice?

No. On an ambiguous result such as a timeout the system does not retry and honestly reports the status as unknown. A duplicate SMS costs both money and trust.

Is there a read receipt?

No — and there cannot be. The SMS protocol has no read receipt. It has delivery reports (DLR) and we give you those. If you put a link in the body, clicks can be measured.

SMS Campaigns switches on today

Opening an account takes minutes. Add the module, set its limit, start using it.