h1. SMPP кодеки {{>toc}} *Smartswitch* поддерживает следующие кодеки: |*SMPP Codec ID*|*кодек*| |0x00|кодек по умолчанию (см. ниже)| |0x01|IA5 (CCITT T.50)/ASCII (ANSI X3.4)| |0x02|Неопределенный бинарный поток (8 бит)| |0x03|Latin 1 (ISO-8859-1)| |0x04|Неопределенный бинарный поток (8 бит)| |0x05|JIS (X 0208-1990)| |0x06|Cyrllic (ISO-8859-5)| |0x07|Latin/Hebrew (ISO-8859-8)| |0x08|UCS2 (ISO/IEC-10646)| |0x09|Кодировка пиктограм| |0x0A|ISO-2022-JP (Music Codes)| |0x0D|Расширенный Kanji JIS(X 0212-1990)| |0x0E|KS C 5601| *SMPP Codec ID* шифруется в тело SMPP сообщения и по нему получатель может узнать в каком кодеке закодировано сообщение. Кроме кодека 0x00 - по ID 0x00 невозможно узнать каким кодеком закодировано сообщение, и следует обращаться к партнеру, чтоб он сообщил, какой кодек используется для SMPP Codec ID 0x00. h2. Кодек 0x00. Это специальный SMPP Codec ID. Если в теле SMS указывается кодек 0x00, то это означает, что пиры договорились (устно или письменно) использовать определенный кодек, который не имеет выделенного стандартом SMPP Codec ID - так называемый *кодек по умолчанию*. Оба пира должны сконфигурировать один и тот же *кодек по умолчанию* в настройках своих систем. В *Smartswitch* *кодек по умолчанию* конфигурируется в одноименной опции в SMPP настройках пира. Поскольку тело SMS не содержит четкого идентификатора используемого кодека (в отличие от остальных *SMPP Codec ID*), доставка SMS будет работать корректно только если оба пира сконфигурируют один и тот же *кодек по умолчанию*. Обычно в качестве кодека по умолчанию используется GSM. h2. Кириллица и прочие не-латинские кодировки. Предпочтительно использовать кодировку 0x08 - UCS2. Это "Юникод":https://ru.wikipedia.org/wiki/Юникод, в котором можно передавать кодировки всех языков. Другие кодеки следует использовать если: * партнер по какой-то причине не поддерживает UCS2. * для большего сжатия сообщения (т.к. UCS2 использует 2 байта на символ, что ограничивает размер сообщения 70 символами) h2. Перекодировка кодеков. *Smartswitch* поддерживает перекодировку сообщений на лету. Перекодировка происходит, если согласно настройкам на терминаторе, требуется отправить на него сообщение в кодеке, который отличается от кодека, в котором пришло сообщение от оригинатора. *Smartswitch* принимает сообщения от оригинатора в любом кодеке, и отправляет на терминатора в наиболее приоритетном сконфигурированном кодеке. Если на терминаторе сконфигурировано несколько кодеков, и один из них совпадает с кодеком полученного сообщения, то перекодировки не происходит. Если без перекодировки не обойтись, то *Smartswitch* пытается перекодировать сообщение в наиболее приоритетном кодеке. Если в процессе перекодировки произошла потеря символов, например при перекодировке кириллического сообщения в 0x03 - Latin 1, то *Smartswitch* пытается закодировать следующим кодеком по списку. Если ни одним кодеком не удалось закодировать сообщение без потери символов, то сообщение не пересылается на терминатора. Если сообщение является сегментом много-сегментного сообщения, то перекодировки кодеков не происходит. Это вызвано тем, что может быть такая ситуация, что через Smartswitch может передаваться сегмент 1, а через шлюз другого оператора - сегмент 2 одного и того же сообщения. Если Smartswitch перекодирует в кодек А, а параллельно работающий шлюз - в кодек Б, то принимающий терминал будет иметь трудности с восстановлением сообщения из нескольких частей, закодированных разными кодеками. Также у принимающего терминала будут трудности с объединением сообщения, если в процессе перекодировки будет изменен размер сегмента сообщения. Поэтому, для предотвращения этих проблем, для много-сегментных сообщений перекодировка не происходит. Если согласно настройкам Smartswitch ни один из терминаторов не поддерживает кодек сообщения, то сообщение будет отброшено и оригинатор сможет перемаршрутизировать его на свой резервный маршрут. h2. Биллинг в зависимости от кодека Единицей биллинга является: * 140 байт для 1-сегментного SMS * 134 байт для много-сегментного SMS (для GSM кодека - 133 байт). В зависимости от кодека, в единицу биллинга (140/134/133 байт) помещается различное кол-во символов текста: |*SMPP Codec ID*|*кодек*|*кол-во символов в 1-сегментном SMS*|*кол-во символов в 1 сегменте много-сегментного SMS*| |0x00|кодек по умолчанию, GSM|160|152| |0x00|кодек по умолчанию, не GSM|140|134| |0x01|IA5 (CCITT T.50)/ASCII (ANSI X3.4)|140|134| |0x03|Latin 1 (ISO-8859-1)|140|134| |0x06|Cyrllic (ISO-8859-5)|140|134| |0x07|Latin/Hebrew (ISO-8859-8)|140|134| |0x08|CS2 (ISO/IEC-10646)|70|67| Для GSM, размер 1 символа может быть 7 или 14 бит. Обычные символы кодируются в 7 бит. Некоторые спец. символы, напр. £, кодируются в 14 бит (7 бит + 7 бит символ экранирования). Таким образом, такие специальные символы могут занимать место 2 обычных символов. [[SMPP codecs|English translation]]