Docs navigation

SMS setup

Business texting rides your existing trunk numbers: enable SMS on a trunk and its DIDs can send and receive texts, which land in the same Chat workspace as internal messages.

Enabling SMS on a trunk

Open the trunk (Admin → Trunks) — an SMS tab appears when the provider's template supports messaging (Telnyx has first-class support; several other providers work through the generic driver, and the generic trunk templates include an SMS section you can use with compatible carriers). Flip Enable SMS and fill in the provider fields the template asks for — typically an API key, which is stored encrypted and never redisplayed.

Registering the webhook

Inbound texts arrive by webhook. The SMS tab shows your system's webhook URL (with a copy button) — paste it into the provider's messaging configuration (for Telnyx: the messaging profile attached to your numbers). The URL embeds a secret token; the Regenerate button rotates it, after which the provider must be updated with the new URL.

voip.ms

voip.ms speaks the generic messaging contract, so its trunk template carries an SMS section: enter the API bearer token from the voip.ms portal (Main Menu → SOAP and REST/JSON API) and paste the webhook URL into each DID's SMS/MMS Webhook URL (3CX) field under Message Service. Two account settings matter:

  • Dialing Mode for SMS (3CX/API) must be E164. Exovo keys every conversation by the full international number; in NANPA mode voip.ms rejects outbound texts addressed that way. Inbound senders that still arrive as bare ten-digit numbers are recognised and threaded, but outbound needs the setting.
  • The DID must have SMS/MMS service enabled on the voip.ms side.
  • The bearer token belongs to the account's API, which is off by default and accepts requests only from allow-listed IP addresses. Until both are set, voip.ms accepts every outbound text and then fails it with a delivery receipt of token_not_found (inbound keeps working, because inbound rides the DID's webhook, not the API). In the voip.ms portal, Main Menu → SOAP & REST/JSON API:
    1. set an API password and click Save API Password (it is separate from the portal login);
    2. click Enable/Disable API so the API is enabled;
    3. under IP addresses, enter the PBX's public IP (a single address, a CIDR range, a wildcard such as 203.0.113.*, or a DNS hostname such as the system's FQDN) and click Save IP Addresses;
    4. click Generate New Token and paste the token into the trunk's SMS settings in Exovo. voip.ms shows a token once; if the copy is lost, generate another.
  • The API path is limited to 100 texts per day until voip.ms's A2P verification is completed (messaging@voip.ms), and their support handles API questions by ticket rather than live chat.

Choosing which numbers text

With trunk SMS enabled, the main number and DIDs are text-capable by default; each DID row on the DID Numbers tab has an SMS checkbox to switch individual numbers off. Which user or team receives a number's texts is decided by your SMS routing.

Also set the trunk's SMS fallback destination — where a text lands when routing resolves to something that can't hold a conversation (an IVR, say). Unset, such messages are only logged.

Testing

Text one of your DIDs from a mobile: it should appear in Chat for the routed user (or all members of a routed group). Reply from the conversation — delivery ticks confirm the provider accepted it (one tick sent, two delivered, red on failure).