Hack #003 · SMS

We paid three times to text a landline. Here is the two-line fix.

An appointment reminder retried a landline three times and billed us for each attempt. Validate the number when it is typed in, not when the message fails.

2026-08-28 · 3 min · we hit this one ourselves

By Chen Deng · OxOne, Calgary AB

Do this

Check the number at the point of entry, and stop retrying on the carrier errors that mean “this will never work” — a landline does not become a mobile on the second attempt.

Real entry from our own SMS log this month: the same appointment reminder sent to the same Calgary number three times in ninety seconds, each one failing with error 30006, each one billed.

30006 means “landline or unreachable carrier.” Somebody had entered their office landline in the mobile field. No amount of retrying fixes that, and every retry costs money and delays the queue.

The two failures worth knowing

CodeWhat it actually meansRetry?
30006Landline or unreachable carrier. Permanent — this number will never receive a text.Never
30003Unreachable handset. Phone off, out of coverage, or the number is dead.Once, hours later

Most SMS code treats every failure the same way and retries blindly. That is where the waste comes from.

Fix it where the number is typed

The real fix is not in the sending code, it is in the form. Every major SMS provider has a lookup endpoint that tells you the line type — mobile, landline, VoIP — before you ever send anything. Call it when the customer submits the booking form, and if it comes back landline, say so on the spot: “That looks like a landline — we cannot text appointment reminders to it. Is there a mobile we should use?”

The customer fixes it in two seconds. Nobody discovers it three weeks later when a reminder silently fails.

Then fix the retry logic

Wherever your retries live, they should look like this:

One more thing in the same log

The failed messages opened with Hi john,, — two commas, lowercase name. Somebody typed “john,” into a first-name field and the template added its own comma.

✗ What went out

Hi john,,

✓ Four lines of code later

Hi John,

Trim whitespace and trailing punctuation off name fields on the way in, and capitalise the first letter when you render. It is four lines of code and it is the difference between a message that looks like it came from a person and one that looks like it came from a broken database.

Every one of these came out of work we actually did. If you would rather not do it yourself, book a free 30-minute diagnostic and we will tell you which of these your business is losing money to.

More on this Business automation for Calgary companies Everything we have written