Лимит символов SMS: GSM-7, Unicode и сегменты
Лимиты символов SMS: GSM-7, Unicode и сегменты сообщений
Краткий ответ: Одна SMS несёт 160 символов в кодировке GSM-7 или 70 символов в Unicode (UCS-2). Более длинные тексты делятся на сегменты по 153 или 67 символов соответственно — и оплачиваются посегментно. Один эмодзи или типографская кавычка переключает всё сообщение в Unicode, срезая ёмкость на 56% и нередко утраивая стоимость. Кириллица всегда идёт в Unicode: 70 символов в одиночной SMS, 67 — в сегменте составной.
Лимиты символов кажутся мелочью, пока не умножишь их на миллион сообщений. Кампания, незаметно переехавшая с одного сегмента на два, удваивает бюджет. Вот как именно устроена арифметика кодировок — и как держать её под контролем.
Почему лимит SMS — 160 символов?
SMS передаётся в свободной ёмкости сигнальных кадров GSM: 140 байт (1120 бит) на сообщение. Сколько символов поместится в 1120 бит, зависит только от того, сколько бит нужно каждому символу:
| Кодировка | Бит на символ | Одиночная SMS | На сегмент (составная) |
|---|---|---|---|
| GSM-7 | 7 | 160 | 153 |
| UCS-2 (Unicode) | 16 | 70 | 67 |
GSM-7 укладывает символ в 7 бит, поддерживая лишь фиксированный алфавит из 128 символов (плюс таблица расширения). UCS-2 поддерживает практически любую письменность и символ, но по 16 бит на символ — отсюда падение со 160 до 70.
Какие символы входят в алфавит GSM-7?
GSM-7 покрывает:
- Латинские буквы A–Z, a–z и цифры 0–9
- Обычную пунктуацию: . , ! ? : ; ' " ( ) + - * / = % & # @
- Набор букв с диакритикой (é, ü, ñ, à, ö и другие) и греческие заглавные
- Знаки валют, включая евро и фунт
Ловушка таблицы расширения: несколько символов — квадратные и фигурные скобки, обратный слеш, циркумфлекс, вертикальная черта, тильда и знак евро — входят в GSM-7, но стоят по два символа каждый, потому что кодируются как escape плюс код.
Что незаметно переключает сообщение в Unicode?
Всё, что вне GSM-7, переводит всё сообщение в UCS-2 — достаточно одного символа. Обычные виновники:
- Типографская пунктуация, вставленная из Word или Google Docs: фигурные кавычки, фигурные апострофы, длинные тире, многоточие одним символом
- Эмодзи — любые
- Нелатинские письменности: кириллица, китайский, японский, корейский, арабский, иврит, тайский
- Невидимые символы: неразрывные пробелы, соединители нулевой ширины из копипасты
Самый коварный случай — фигурный апостроф: внешне почти неотличим от прямого ASCII, но превращает сообщение в 160 символов в Unicode-отправку из 3 сегментов.
Как работает склейка сообщений?
Когда сообщение превышает лимит, оно делится на части, каждая с заголовком данных пользователя (UDH) — 6 байт, сообщающих телефону «это часть 2 из 3». Заголовок съедает полезную нагрузку, поэтому ёмкость сегмента падает:
| Длина сообщения (GSM-7) | Сегментов | Оплачивается сообщений |
|---|---|---|
| 1–160 символов | 1 | 1 |
| 161–306 символов | 2 | 2 |
| 307–459 символов | 3 | 3 |
| 460–612 символов | 4 | 4 |
Для Unicode пороги — 70, затем 134, 201, 268. Телефон собирает части в один пузырёк — пользователь никогда не видит разбиения, а вот ваш счёт видит: каждый сегмент тарифицируется как полное сообщение.
Сколько на самом деле стоят ошибки кодировки?
Возьмём промосообщение в 155 символов на 500 000 получателей по 0,01 $ за сегмент:
- Чистый GSM-7: 1 сегмент × 500 000 = 5 000 $
- Тот же текст с одним эмодзи: Unicode-сегменты по 70 символов → 3 сегмента × 500 000 = 15 000 $
Один символ — разница в 10 000 долларов. Это самая частая тихая утечка бюджета в SMS-маркетинге, и она полностью предотвратима.
Как удерживать сообщения в одном сегменте? (6 правил)
- Знайте свой реальный лимит. 160 для GSM-7, 70 для Unicode. Если аудитории нужна кириллица или другая нелатинская письменность, планируйте тексты от 70/67 с самого начала.
- Убирайте типографскую пунктуацию. Нормализуйте кавычки, апострофы и тире в ASCII перед отправкой. Автоматизируйте это в пайплайне — люди вставляют из Word.
- Относитесь к эмодзи как к платной опции. В маркетинге они могут окупиться вовлечённостью; в OTP и оповещениях — чистый расход.
- Следите за таблицей расширения. Скобки, тильда, циркумфлекс, вертикальная черта и знак евро считаются в GSM-7 за два символа.
- Проверяйте число сегментов в ответе API. Хорошие провайдеры возвращают кодировку и число сегментов по каждому сообщению — настройте оповещение, если счётчик шаблона изменился.
- Осторожнее с URL и персонализацией. Длинная ссылка или неожиданно длинное имя могут вытолкнуть пограничный шаблон в следующий сегмент. Оставляйте запас 10–15 символов.
Относится ли это к RCS и WhatsApp?
Нет — RCS, WhatsApp и другие IP-каналы не используют GSM-кодировки и 140-байтовые кадры: нет ни лимита в 160 символов, ни посегментной тарификации. Но каждой RCS-кампании нужен SMS-фолбэк, и этот резервный текст подчиняется всем правилам из этого руководства.
API ViteMobile возвращает кодировку и число сегментов для каждого сообщения, а панель управления помечает шаблоны с дрейфующим числом сегментов — чтобы вставленная фигурная кавычка была поймана до того, как размножится на миллион отправок.
Ключевые выводы
- Одна SMS = 140 байт: 160 символов GSM-7 или 70 Unicode. Сегменты составных сообщений вмещают 153/67.
- Один не-GSM-символ — эмодзи, фигурная кавычка — переводит всё сообщение в Unicode и может утроить стоимость.
- Некоторые символы GSM-7 (скобки, евро, тильда) молча считаются за два.
- Нормализуйте пунктуацию автоматически, оставляйте запас под персонализацию и следите за числом сегментов по каждому шаблону в продакшене.
Часто задаваемые вопросы
В: Сколько символов помещается в одну SMS? О: 160 в GSM-7, 70 в Unicode. Более длинные сообщения делятся на сегменты по 153 (GSM-7) или 67 (Unicode), каждый оплачивается как отдельное сообщение. Кириллица — всегда по 70/67.
В: Почему моя SMS разбилась на несколько сообщений? О: Она превысила лимит, или спецсимвол перевёл её в Unicode. Заголовки склейки уменьшают каждую часть до 153/67 символов, и каждая часть оплачивается отдельно.
В: Эмодзи считаются за несколько символов? О: Да — любой эмодзи переводит всё сообщение в Unicode (лимит 70), и большинство эмодзи сами занимают две кодовые единицы. Один эмодзи может превратить 1 сегмент в 3.
В: Какие символы ломают GSM-7? О: Фигурные кавычки и апострофы, длинные тире, многоточие одним символом, неразрывные пробелы и любая нелатинская письменность. Скобки и знак евро остаются в GSM-7, но считаются за два.
В: Как удержать SMS в одном сегменте? О: Считайте по правильному лимиту, автоматически нормализуйте типографику в ASCII, избегайте эмодзи в транзакционных текстах, оставляйте запас под персонализацию и следите за числом сегментов в ответе API.