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 API is an extra item in that group when Startel has enabled it for your account (see SMS API).
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. A connection can accept an SMPP session, API keys, or both — see How a connection accepts SMS.
How a connection accepts SMS
At the top of a connection, two toggles say how traffic is accepted. A new connection opens with SMPP on and API off. A connection you already saved stays SMPP on and API off until you change it.
SMPP on: the form asks for the login, the password, and at least one source address. That is what the Customer’s SMS switch uses to connect. SMPP off: those fields are hidden, and that connection does not accept an SMPP session.
API on: you can attach one or more keys that are not yet on a connection. A key belongs to one connection only. API off, when the connection already has keys: you are asked to confirm. OK revokes those keys. They leave SMS API and cannot be used again. Cancel leaves API on and leaves the keys.
Both toggles can be on. The source addresses are checked only for the SMPP session. The keys do not use them.
SMS API
SMS API is separate from sending SMS through a connection login. It is not a switch on Manage Subscription. Startel enables it for your account. Only the tenant owner sees the page. If you do not see SMS API, contact Startel.
Open SMS → SMS API. With no keys, the page says No API keys.
Create key opens a dialog. The callback address can be left empty. After you create the key, the secret is shown once, with Copy beside it and Close. Clicking outside that dialog does not close it. Copy the secret before you close it. It is not shown again. If you did not copy it, revoke the key and create another.
A new key is not on a connection, so it cannot send. The list shows the start of the key, the callback address, and the connection name when one is attached. The connection name is empty until you attach it.
On a key with no connection, the ⋮ menu has Associate. Choose a connection that has API on. That is the same result as attaching the key inside the connection. Revoke kills that key only. Other keys on the same connection keep working.
The sender uses the key, a destination number, and a text. They do not type your tech prefix; the server applies it. One call is one SMS. A text that does not fit in one SMS is refused. A long message is several calls, one part each, marked as part 1 of N, part 2 of N, and so on, and those parts use the same SIM. The first answer is accepted or refused, with a message id or a reason. If the key has a callback address, the delivery result is posted there later (the message id, the destination, the state, and an error code when there is one). An empty callback means there is no second answer. The states you can receive are DELIVRD, UNDELIV, EXPIRED, and REJECTD.
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.