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:
- SMS Rates — price lists for SMS (prefix / destination), separate from voice rate plans (chapter 11).
- SMS Routing Rules — which destinations may use which VMGateClients / slots. Each rule can optionally rewrite the message text before send — see Content rewrite below.
- SMS Dialpeers — link Customer SMS connections to routing, the same role dialpeers play for voice (chapter 10).
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:
- Prefix (optional) — text glued at the start
- Find / Replace rules (optional) — change words inside the message, top to bottom
- 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.
- Find = the old words; Replace with = the new words. For normal wording changes, type plain words only (same letters and spaces as in the message).
- Each Find / Replace changes every match, not only the first. Rule 2 sees what rule 1 already changed. Drag the handle to reorder rules.
- Ignore CAPITAL / small letters — when checked,
Sale/SALE/salematch the same; when unchecked, letters must match exactly. - Replace all — when checked, Prefix and Signature are turned off. After Find / Replace runs, the whole body is replaced with your Replace-all text only.
Example A — change one word
Incoming text: Big sale today
- Find:
sale - Replace with:
offer
Result: Big offer today
Example B — Prefix + Find / Replace + Signature together
Incoming text: Your code is 4821
- Prefix:
[Acme](include the space after]) - Find:
code→ Replace with:PIN - Signature: press Enter once in the Signature box, then type
Reply STOP to opt out(so the signature starts on a new line)
Result (two lines):
[Acme] Your PIN is 4821
Reply STOP to opt out
Example C — Replace all
Incoming text: Anything the Customer sent
- Replace all checked
- Replace-all text:
Service temporarily unavailable. Try again later.
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
.— any single character. To match a real full stop, write\.\d— one digit (0–9).\d+— one or more digits in a row\s— one space or line break.\s*— zero or more spaces|— OR (match this or that)^— only at the start of the message.$— only at the end( ... )— remember that piece so Replace with can reuse it as\1,\2, … (do not write$1). See Example 1 below.
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
- Find:
Tel:\s*(\d+)Tel:— match the label you want to rename\s*— allow spaces after the colon (or none)(\d+)— remember the phone digits as piece 1
- Replace with:
Phone:\1Phone:— new label\1— paste back the remembered digits (here091234567)
Result: Call Phone:091234567
If you want a space after the new label, put it in Replace with: Phone: \1 → Call Phone: 091234567.
Two remembered pieces: Find (\d+)-(\d+) on 12-34, Replace with \2/\1 → 34/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
- Find:
(buy|purchase)— match the word buy or the word purchase - Replace with:
order
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 STOPPED → STOPPED 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
- Wrong Find:
9.99— the.means “any character”, so it can also match9x99,9 99, etc. - Correct Find:
9\.99— only the real decimal point
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.