Skip to content

SMS_MULTI_SEGMENT

Category: sms  ·  Severity: warning  ·  Channel: SMS

The rendered SMS body is longer than a single segment, so the carrier splits it into concatenated parts and bills you per segment.


What it means

An SMS "segment" is the unit carriers charge for. A single segment holds:

EncodingSingle segmentConcatenated (multi-part)
GSM-7 (standard text)160 characters153 characters per part
UCS-2 (Unicode)70 characters67 characters per part

When your message exceeds one segment, it is sent as several concatenated parts. The recipient sees one message, but you are billed for every part.

Synapse Inspect reads the segment count and encoding directly from the same send-path segmenter (render_sms) that runs at delivery time, so the number reported here is exactly what you will be charged for — not an estimate.


Why it matters

  • Cost. A two-segment message costs twice as much as a one-segment message. High-volume SMS makes this add up quickly.
  • Delivery. Multi-segment messages arrive more slowly and can occasionally be reassembled out of order on some handsets.
  • Hidden encoding jumps. A single non-GSM character (a smart quote or an emoji) can force UCS-2 encoding, which cuts the per-segment budget from 160 to 70 — turning a message you thought was one segment into three. See SMS_UCS2_FORCED.

How to fix it

  1. Shorten the body to fit a single segment: 160 characters in GSM-7, or 70 characters in UCS-2.
  2. Remove non-GSM characters — replacing a smart quote or emoji often drops you back to GSM-7 and restores a single segment. Check for a co-occurring SMS_UCS2_FORCED finding.
  3. Or accept the multi-segment cost knowingly — this is a warning, not a block. If the length is intentional, snooze the finding.

Finding context

The context object on this finding reports the exact segmentation, read from the send-path segmenter:

json
{
"segments_count": 2,
"encoding": "GSM-7",
"char_count": 214,
"estimated_cost": "0.0158",
"price_unit": "USD"
}
Note

This finding is a warning — it never blocks a send. It surfaces so you can weigh cost against message length before you send.