SMS

Send outbound SMS through your Customers’ connections, route them to VMGateClients, and monitor delivery — when your plan includes SMS.

When the SMS menu appears

The sidebar SMS group is shown only when your tenant has SMS enabled (included with some plans, or as an add-on). If you do not see it, open Manage Subscription (chapter 02) or contact Startel.

Like other sidebar groups, SMS starts folded. Click the group name to open SMS In Progress, History, Connections, Rates, Routing Rules, and Dialpeers.

SMS ingress

When SMS is enabled, the status strip can show SMS ingress: the address and port your Customer’s SMS switch uses to connect (bind) to VMGateServer for that network.

Each Network gets its own SMS listen port on your tenant ingress address. Give Customers the exact host and port shown for the network they should use — the same idea as SIP ingress, but for SMS.

SMS Connections

Open SMS → SMS Connections. A connection is the Customer’s SMS login to your ingress (system ID, password, and allowed source IPs), similar to a SIP trunk for voice.

Create one connection per Customer (or per switch) that will submit SMS. Keep credentials private; rotate the password if it is exposed. Without a working connection, the Customer cannot bind and no SMS will enter your platform.

Rates, routing, and dialpeers

SMS has its own configuration pages under the SMS group:

Configure voice and SMS independently. A Customer may have SIP trunks and SMS connections; each path needs its own rates and routing.

Content rewrite (SMS Routing Rules)

On SMS → SMS Routing Rules, open the ⋮ menu on a rule and choose Content rewrite. Changes stay on that screen until you press Ok (saves) or Cancel (discards). Use Preview at the bottom before you save — nothing is sent to a phone from that screen.

Rewriting is per routing rule. Only messages that win that rule are changed. Billing still follows the parts the server already counted; longer text can use more phone segments.

Everyday use (plain words)

Final message order:

  1. Prefix (optional) — text glued at the start
  2. Find / Replace rules (optional) — change words inside the message, top to bottom
  3. Signature (optional) — text glued at the end

Leave Prefix or Signature empty to turn that part off. Spaces and new lines (Enter) are kept exactly — they are not stripped when you press Ok.

Example A — change one word

Incoming text: Big sale today

Result: Big offer today

Example B — Prefix + Find / Replace + Signature together

Incoming text: Your code is 4821

Result (two lines):

[Acme] Your PIN is 4821
Reply STOP to opt out

Example C — Replace all

Incoming text: Anything the Customer sent

Result (Prefix and Signature ignored): Service temporarily unavailable. Try again later.

If one logical SMS is split into several parts: Prefix is applied only on the first part; Signature and Replace all only on the last part.

Safe habit: one simple Find / Replace → optional Prefix and/or Signature → paste a real sample → Preview → only then Ok.

Advanced (pattern matching / regex)

Use this section only if you need patterns, not plain words. A wrong Find can change every SMS on that route. Always Preview first.

On the server, each Find / Replace rule is a Python pattern: the system finds every place that matches Find and substitutes Replace with. The ignore-case checkbox makes letter case optional. After all Find / Replace rules: Prefix + body + Signature (unless Replace all is on).

Characters that mean “pattern”, not the letter itself

Example 1 — keep part of the old text (\1)

Sometimes you only want to change a label, but keep a number (or word) that came after it. Put parentheses around the part you want to keep. In Replace with, \1 means “put back the first remembered piece.”

Incoming: Call Tel: 091234567

Result: Call Phone:091234567

If you want a space after the new label, put it in Replace with: Phone: \1Call Phone: 091234567.

Two remembered pieces: Find (\d+)-(\d+) on 12-34, Replace with \2/\134/12 (\1 was 12, \2 was 34).

Example 2 — several words mean the same thing

Goal: wherever the message says buy or purchase, write order instead.

Incoming: Please buy now or purchase later

Result: Please order now or order later

Both places change, because every match is replaced. (Here the parentheses are mainly for the OR list; you are not reusing \1.)

Example 3 — only if the message starts with a word

Goal: if the text begins with STOP, change that opening word to STOPPED. Do not change STOP in the middle of a sentence.

Incoming A: STOP send more → Find ^STOP, Replace with STOPPEDSTOPPED send more

Incoming B: Please STOP send more → same rule → unchanged (STOP is not at the start, so ^STOP does not match).

Example 4 — common mistake with a period

Incoming: Price 9.99 EUR

Always Preview before Ok. Spaces and new lines in Prefix, Signature, and Replace all are preserved exactly (including a leading new line before Signature text).

In Progress and History

SMS In Progress lists messages still moving through the platform (accepted, queued, sent to the phone, waiting for delivery report). Use Group long messages when a long SMS was split into parts and you want one row per logical message.

SMS History is the completed record (delivered, failed, rejected, expired, and similar). Filter by date and status, then open Details on a row for full fields. Use History with Billing when reconciling Customer SMS charges.

SMS on VMGateClients

Outbound SMS is executed on enrolled phones. Slot-level SMS caps and expire timing are set under VMGateClients and network SMS defaults (chapter 05). The phone must be online and the SIM slot enabled for SMS — see the VMGateClient manual for the on-device SMS cards.

Removing a Customer, network, or VMGateClient that still has SMS history is blocked the same way voice CDR history is protected — archive or keep the record; do not expect a hard delete while history exists.