v1.0.0
Breaking 15 Sep 2026First release.
Added
- A segment counter over the full GSM 03.38 alphabet: the nine extension
characters that cost two septets, the UCS-2 fallback, concatenation at 153 and
67 rather than 160 and 70, and emoji counted as two code units. Checked
against
instasent/sms-counter-phpon ten cases including every boundary, with those vectors pinned as a test. - The half nobody else does: which characters forced Unicode, what they would be replaced with, and what the message would then cost.
Gsm::sanitise(), which replaces curly quotes, dashes, ellipses and non-breaking spaces with their GSM-7 equivalents and returns what it changed — never silently.sms:cost, which prints the encoding, the parts, the offending characters and a total for a campaign at a given rate.- E.164 normalisation against the country you send from, reading Arabic-Indic and Persian digits, and throwing rather than guessing.
- Sender ID checks as reason codes: length, characters, all-digits, and the countries where an alphanumeric sender must be registered before anything from it is delivered.
max_parts, refusing a message longer than you are willing to pay for and saying which characters made it that long.array,logandhttpdrivers, wherehttpis declarative configuration so a gateway nobody has written a package for is five lines you can check against its documentation.- A
devix-smsnotification channel, and Laravel's own HTTP client behind the http driver, soHttp::fake()and retries work as they do everywhere else. - A gateway that is down produces a failed result rather than an exception.