Setting up SMS Notifications
The SMS Notifications extension texts your customers when their order reaches a milestone — placed, shipped, delivered — and can text you when a product runs low or a payment fails. Twilio is the verified sending provider; Vonage ships as a working beta. This guide takes about twenty minutes and assumes you have, or will create, a Twilio account.
Note: this extension sends transactional texts tied to order events and stock levels. It is not a marketing tool — there is no bulk SMS, no campaign builder, and no back-in-stock or abandoned-cart texting.
1. Install and enable the extension
SMS Notifications is included with TitanCart Pro. There is no separate license key to buy or enter — your Pro subscription is the entitlement.
- Go to Extensions → Extensions Marketplace and install SMS Notifications.
- Check Extensions → Installed Extensions. The row shows an Included in Pro pill and no license-key field.
- Open Growth → SMS Notifications and switch to the Settings tab.
- Under General, turn Enable SMS Notifications on.
This master switch is the gate for everything. While it is off, no order listeners run, the low-stock sweep is unscheduled, and the checkout opt-in does not appear.
Note: if your store is not entitled to Pro, an amber License required banner appears above every tab and the master toggle is disabled. You can still choose a provider, enter credentials and write your message templates — only sending is blocked.
2. Choose a provider and enter your credentials
Still on the Settings tab, pick your SMS provider. Three options appear:
- Twilio — the verified path, and what we recommend.
- Vonage (beta) — a real, working second provider, shipped to prove the provider layer. It is not exercised in our release testing.
- Mock (no send — testing) — see the warning below.
The Provider credentials section changes to match your choice.
- Twilio — Account SID (starts with
AC), Auth Token, and From. The From can be a purchased number in+E.164format (for example+15551234567) or a Messaging Service SID starting withMG, which is Twilio’s recommended way to send. - Vonage — API Key, API Secret, and From, which can be a number or an alphanumeric sender ID (country support varies).
Save. A line under the provider picker confirms the state: a green tick reading Twilio is configured, or an amber warning that it is not fully configured. All three credential fields must be filled before a provider counts as configured.
Warning — do not leave a live store on Mock. The Mock (no send — testing) provider makes no network call at all. It records every message in the log as Sent with a synthetic
MOCK-identifier, and it always reports itself as configured. A store on Mock looks like it is texting customers when nothing is being delivered. TitanCart guards against this: while the master switch is on and Mock is selected, a warning appears on your WordPress dashboard stating that no real text messages are being delivered. Mock exists only to exercise the pipeline without credentials.
Note: SMS providers expect phone numbers in international
+E.164format. TitanCart tidies what it is given — it keeps a single leading+and strips everything that is not a digit — but it never guesses a country code. A number stored without one is passed to the provider as-is and will usually be rejected.
3. Send a test message
Open the Send a test section at the bottom of the Settings tab, enter your own number, and click Send test. The result appears immediately beneath the button, and the attempt is recorded in the Message log as a Test event.
A test send ignores the opt-in rules and works even before you turn the master switch on, so it proves one thing only: that your credentials and sending number are valid. It does not prove that order texts will fire.
4. Turn on the customer order updates you want
The Order update messages section holds three independent events, each off by default. Turning one on reveals its message box, and for two of them, a status field.
Order placed
Sent once per order, at the point payment genuinely commits. It does not fire on an abandoned or failed payment attempt.
Order shipped
This one needs setting up before it can ever fire. TitanCart ships no “Shipped” order status — the default order statuses are Pending Payment, Processing, On Hold, Completed, Cancelled, Refunded and Failed. The field is pre-filled with shipped, which matches none of them, so out of the box this text never sends.
- Create a Shipped status under Sales → Order Statuses.
- Put its handle — not its display name — into Shipped status handles.
Note: your store does have a Shipped status in the Fulfillment Statuses tab. That is a different thing — it tracks shipments in the Fulfillment queue and does not change the order’s own status, so it will not trigger this text.
Order delivered
Delivered status handles is pre-filled with delivered,completed. As above, no delivered status exists — but completed does. So with the defaults left alone, this message sends when you mark an order Completed. Remove completed from the list if that is not what you want, or add your own delivered status the same way.
Message templates
Each event has its own message box. Leave it blank to use the built-in wording, which is shown as placeholder text. Available placeholders appear as chips under the box and differ per event — {first_name}, {last_name}, {order_number}, {total}, {status}, {site_name} for order messages, and {product_name}, {stock_qty}, {threshold} for low stock.
Note: a placeholder TitanCart does not recognise is removed silently rather than sent to the customer as literal text. That protects your shoppers from seeing a stray placeholder, but it also means a typo shows up as a missing word instead of an error. Send yourself a test after editing a template.
5. (Optional) Set up admin alerts
The Admin alerts section texts you rather than your customers, so it has no opt-in requirement. Enter an Admin phone number first — without one, alerts are logged as skipped.
Low-stock alert
An hourly sweep texts you once when a product drops to or below your low-stock threshold, then re-arms when it is restocked so a single dip does not text you every hour.
Important: the threshold is not set here. It comes from Settings → General → Catalog → Low stock notification threshold, and its default is 0, which means disabled. If you leave it at 0, enabling this alert changes nothing and no alert will ever send. Set it to a real number first.
Two further limits are worth knowing. Only products that are active and have Track inventory on are considered, and a product must still have stock above zero — a product that has sold out completely is no longer “low” and does not alert. The sweep also caps itself at 25 alerts per run so a bulk import cannot flood your phone.
Failed-payment alert
Texts you when a gateway returns a failure for an order, mirroring the failed-payment email.
Note: the hourly sweep runs on WordPress cron, which is driven by site traffic. On a quiet store the check can run late. If alerts need to be punctual, point a real system cron at
wp-cron.php.
6. Collect consent at checkout
You need a customer’s consent before texting them. The Checkout opt-in section controls how that consent is asked for:
- Show opt-in at checkout — adds an opt-in checkbox and a phone field to your checkout, just above the Place Order button. The phone field is pre-filled from the billing phone and stays in sync with it until the shopper edits it.
- Pre-checked — whether the box starts ticked. Left unticked by default, which is the compliant choice in most regions.
- Consent text — the wording beside the checkbox. The default mentions that message and data rates may apply.
Consent is recorded the moment the box is ticked, and again when Place Order is clicked, so a pre-ticked box is still captured. It never blocks or delays the order.
Watch the two phone numbers. Consent is stored against the number in the opt-in field, but order texts are sent to the order’s billing phone. For a logged-in customer this does not matter — TitanCart also matches consent against their customer record. But a guest who types a different number into the opt-in field than the one on their billing address will be logged as skipped, because the billing number was never subscribed.
Note: unticking the box at checkout does not unsubscribe anyone. It only stops that particular consent being recorded — an existing subscription stays active.
7. Monitor what is being sent
Three tabs sit alongside Settings.
- Overview — five counters across the top: Sent, Failed, Skipped, Subscribers and Total log, plus a per-event breakdown underneath.
- Message log — every attempt, newest first, 25 to a page, filterable by event and by status. Columns are When, Event, Recipient, Provider, Status and Note. The Note column carries the error for a failure, or the opening of the message body for a success. Admin alerts are tagged admin beside the event name.
- Subscribers — who has opted in, with their phone, status, source, linked customer (or Guest) and consent date. Filter by All, Subscribed or Unsubscribed.
A Skipped row is not a failure — it is TitanCart declining to send, and the Note says why. The usual reasons are that the recipient never opted in, or that the order carried no phone number at all.
Note: TitanCart has no opt-out control. There is no unsubscribe action on the Subscribers tab, and no inbound handling of a customer replying STOP. Twilio honours STOP at the carrier level and will refuse further messages to that number, so the customer is protected — but TitanCart will keep listing them as Subscribed and will keep logging the blocked attempts as Failed. Treat a run of failures to one number as a likely opt-out.
How to verify on Twilio’s side
If TitanCart shows a message as Sent but the customer says nothing arrived, the answer is in your Twilio account — “Sent” only means Twilio accepted the message, not that it reached a handset.
- Sign in at twilio.com and open Monitor → Logs → Messaging.
- Find the message. TitanCart does not display the provider’s message ID — the Message log shows the recipient, the time and the status, but not the
SMidentifier. Search Twilio by the recipient number instead, and narrow with the start and end time filters to the moment shown in TitanCart’s log. - Read the status. Delivered confirms it reached the handset. Undelivered means a delivery receipt came back negative, usually with a 3xxxx or 6xxxx error code. Failed is different — it means Twilio could not send the message at all. Both carry an error code you can look up in Twilio’s docs.
- Open the message for its delivery steps, which show when Twilio queued it and when it went to the carrier — useful for separating a delivery failure from a latency problem.
Note: on a Twilio trial account you can only text numbers you have verified, and messages carry a trial prefix. Upgrade to a paid account before going live.
Troubleshooting
- The Enable SMS Notifications toggle is greyed out — your store is not entitled to Pro. Check Extensions → Installed Extensions for the Included in Pro pill.
- Everything shows as Sent but nobody receives anything — check your provider. If it is set to Mock (no send — testing), no message has ever left your server. Switch to Twilio and re-test.
- The test message fails — check all three credential fields are filled and that the From value is a real sending number, or a Messaging Service SID, on that Twilio account. The error text beneath the button is Twilio’s own.
- Shipped texts never fire — you almost certainly have no Shipped order status. Create one under Sales → Order Statuses and put its handle in Shipped status handles. A Fulfillment status of the same name will not trigger it.
- Delivered texts fire when I mark an order Completed — that is the default.
completedis listed in Delivered status handles; remove it if you do not want that. - Customers are not getting texts and the log says Skipped — read the Note column. Either they never opted in, or the order has no billing phone. For guests, check whether the opt-in number matches the billing number.
- Low-stock alerts never arrive — check Settings → General → Catalog → Low stock notification threshold. At 0 the feature is disabled and no alert can fire. Also confirm the product tracks inventory and has not hit zero.
- A customer replied STOP and I need them off the list — Twilio blocks them automatically, but TitanCart has no unsubscribe control. Their attempts will show as Failed in the Message log.