У короткого SMS два привычных предела: 70 знаков для русского текста и 160 для базового набора GSM-7 с латинскими буквами. На телефоне длинный текст обычно выглядит как одно сообщение. Однако сервис отправляет его частями, и это нужно учитывать при расчёте рассылки.
Как только русский текст выходит за границу в 70 знаков, вместимость каждой части сокращается до 67. Для базового GSM-7 соответствующий предел составляет 153. Отсюда неочевидный результат: 71 знак требует двух частей, а 135 знаков уже трёх. Считать нужно весь текст вместе с пробелами, пунктуацией и переносами.
Таблица показывает вместимость сообщения, а не требование заполнять каждую часть до конца. Например, две части вмещают до 134 обычных кириллических символов, но для текста из 80 символов тоже нужны две части.
Длина SMS, частей | Количество символов в SMS-сообщении, шт. | |
Латиница | Кириллица | |
1 | 160 | 70 |
2 | 306 | 134 |
3 | 459 | 201 |
4 | 612 | 268 |
5 | 765 | 335 |
6 | 918 | 402 |
7 | 1071 | 469 |
8 | 1224 | 536 |
Значения для латиницы рассчитаны без символов расширенной таблицы GSM-7. Для emoji подсчёт отличается: один значок на экране может занимать несколько единиц кодировки.
Проверить границы проще на конкретных числах:
Причина в размере данных, а не в языке получателя. Под текст SMS выделено 140 байт, то есть 1120 бит. Для основной таблицы GSM-7 расчёт такой: 1120 / 7 = 160. Обычная русская буква требует 16 бит в Unicode, поэтому 1120 / 16 = 70.
Для сборки длинного текста телефону нужны номера частей и их общее количество. Эти данные передаются в служебном заголовке и занимают место, которое иначе досталось бы тексту. В результате каждая часть, даже первая, вмещает 153 базовых знака GSM-7 или 67 обычных русских букв.
Для текста длиннее одного сегмента можно разделить число единиц кодировки на 153 или 67 и округлить вверх. Для короткого текста сначала проверьте предел одной части: 160 или 70 соответственно. Одной формулы с делением на 67 недостаточно: она ошибочно посчитает текст из 68 русских букв как две части.
Кодировка относится ко всему сообщению. Если к английскому тексту добавить русскую букву, отправка потребует Unicode. Предел уменьшится и для остальных букв, даже если они латинские.
Например, текст из 100 латинских букв базового набора занимает одну часть. Если одну букву заменить кириллической, длина на экране останется прежней, но сообщение займёт две части.
Похожая ситуация возникает после копирования из текстового редактора. Типографские кавычки или нестандартный пробел могут изменить кодировку. Если число частей неожиданно выросло, проверьте знаки, которые добавил редактор, и сравните текст до и после вставки.
Латинский текст не всегда укладывается в правило "один знак равен одной единице". Знаки ^, {, }, [, ], \, ~, | и € входят в расширенную таблицу GSM-7. Для каждого нужны две позиции. Такой знак сокращает свободное место, хотя сам по себе не требует Unicode.
С emoji считайте единицы UTF-16, а не видимые картинки. Многие emoji занимают две единицы. Составной значок с модификатором цвета кожи или несколькими соединёнными элементами может занимать больше. Поэтому строка из 70 видимых знаков с emoji не обязательно поместится в одну часть.
При выборе текста для рассылки сначала оцените, нужна ли картинка получателю. Если она остаётся, проверьте число сегментов для полной строки. Простой счётчик букв этого не покажет.
Имя в поле "От кого" передаётся отдельно. Его не нужно прибавлять к буквам сообщения. Но название компании, написанное внутри текста, занимает место наравне с другими словами.
Согласование имени и допустимые знаки относятся к требованиям отправителя. Проверяйте их отдельно от длины сообщения.
То, что текст помещается в несколько частей, ещё не подтверждает получение. После отправки проверьте статус в кабинете или через API. Статус доставки не означает, что человек прочитал сообщение. Если возникла ошибка, используйте разбор причин недоставки SMS.
При расчёте бюджета учитывайте части сообщения и действующие условия оператора, в том числе пакетную тарификацию. Для предварительной оценки откройте калькулятор стоимости рассылки. Он находится в верхней части страницы тарифов. Число сегментов готового текста проверьте отдельно, после добавления ссылок и подстановок.