EE only. SMS messaging is an Enterprise Edition feature. It does not appear in Community Edition builds.
ICTPBX supports two-way SMS, so you can send and receive text messages directly from the portal. Delivery runs over SignalWire (the same vendor used for SIP trunking), so voice and SMS share one provider. There are two surfaces:
- Messaging (Inbox): a threaded, 1:1 conversation view for everyday texting.
- Send SMS (Campaign): bulk SMS to a whole contact group in one operation.
Both write to a single unified message history, so a text you send from the Inbox and a text sent by a campaign show up in the same record.
Messaging Inbox #
Menu: Messaging → Inbox
The Inbox is a conversation view: threads on the left, the selected conversation in the center, and a composer at the bottom.

Each thread row shows the remote party’s number, a preview of the last message, the timestamp, and a direction arrow:
- ↑ (up arrow): an outbound message you sent.
- ↓ (down arrow): an inbound message received from that number.
Click a thread to open the conversation. Messages appear as bubbles with a status badge:
| Badge | Meaning |
|---|---|
| Delivered | Carrier confirmed delivery (via SignalWire status callback) |
| Sent / Queued | Accepted by the provider, awaiting a delivery report |
| Received | An inbound message from the remote party |
| Failed | The provider rejected or could not deliver the message |
The Inbox polls for new messages every 15 seconds, so inbound replies show up automatically without a page reload.
Send a new message #
- Click New Message (top right).

- Enter the recipient in the Recipient number field in E.164 format (e.g.
+12015550123). - Type your text in the Type a message… box.
- Click the Send button (it stays disabled until you have typed some text).
The message is sent immediately, an outbound record is written, and a new thread appears for that number. Replies from the recipient land in the same thread.
Reply in an existing conversation #
- Click the thread in the left list.
- Type in the composer and click Send. The recipient number is already set from the thread.
Send SMS Campaign (Bulk) #
Menu: Messaging → Send SMS
Campaigns send the same message to every contact in a group. Before creating a campaign you need two things: a Text message template and a Contact Group.
Step 1: Create a Text template #
Go to Fax/Messaging → Text (the Text message store) and create the message body you want to send. Templates are reusable, so you can save common messages once and pick them for many campaigns.

Step 2: Create the campaign #
- Go to Messaging → Send SMS and click Add (or open the list and create a new one).

- Fill in the campaign form:

| Field | Required | Description |
|---|---|---|
| Text | ✅ | The saved Text template to send |
| Groups | ✅ | The contact group to send to (every contact receives one message) |
| Retry | How many times to retry a failed recipient (1, 2, or 3) | |
| Delay b/w SMS | Minutes to wait between each send, which throttles the blast to stay within provider limits |
- Click Submit.
The system queues one send per recipient. Each recipient’s message is written to the same unified history as the Inbox, so campaign sends are visible and billed the same way as 1:1 messages.
Billing (EE) #
Each outbound SMS is metered under the standard Option-A billing model, the same way fax pages are counted:
- SMS uses service flag 4 and its own rate.
- A monthly free quota of SMS messages is included per package (resource 18). Credit is only deducted for messages sent above the free quota.
- Inbound (received) messages are not charged.
Admins set the per-SMS rate on the Rate form by selecting the SMS service.

Tenants can watch SMS usage on the Billing → Quota page alongside voice minutes and fax pages.
How receiving works #
- A text arrives at your SignalWire number (a DID assigned to your tenant).
- SignalWire posts the inbound message to ICTPBX over a secured webhook.
- ICTPBX resolves the destination number to the owning tenant/user and records the message.
- The message appears in that user’s Inbox thread within the next poll (15 seconds or less).
For inbound routing to work, the receiving number must be a DID owned by the tenant. If a number has no specific owner, inbound texts fall back to the tenant default.
Requirements & limits #
- SignalWire account: SMS delivery uses SignalWire’s REST/LaML Messaging API. Credentials (space, project ID, API token, default from-number) are configured at the server level during install.
- A2P 10DLC registration: US carriers require application-to-person (A2P) 10DLC brand/campaign registration before long-code SMS will deliver. Until your SignalWire number’s 10DLC campaign is approved, outbound messages may be filtered by carriers even though ICTPBX shows them as Sent. This is an account-side carrier requirement, not an ICTPBX setting.
- E.164 numbers: always address recipients in full international format (
+and country code).