Все началось с того, что один мой друг озадачил вопросом, почему сообщение из 160 символов было разбито в Kannel на 3 SMS. Немного разобравшись в сути проблемы, вопрос был закрыт, а у меня появился повод написать эту заметку. Если почитать спецификации на реализацию SMS в сетях GSM (ETSI GSM 03.40), то можно выяснить следующие моменты:
Чтобы Kannel автоматически производил разбиение SMS на части, необходимо в настройках сервиса (секция sms-service) и пользователя (секция sendsms-user) указать следующее: concatenation = true max-messages = 3 Так мы укажем, что можно отправлять длинные сообщения, которые разбиваются не более, чем на 3 SMS. При этом, нам нужно явно указать Kannel, какая кодировка будет у сообщения при доставке на терминал абонента. Это делается указанием параметра coding при отправке сообщения через HTTP-интерфейс. Допустимые значения: 0 - 7 бит, 1 - 8 бит (бинарник), 2 - UCS2. Также бывает полезно указать кодировку данных, передаваемых по HTTP, чтобы Kannel самостоятельно перекодировал их в правильный вид. Для этого нужно правильно указать параметр charset Таким образом, параметры HTTP запроса charset=UTF-8&coding=2 объяснят Kannel-у, что ему переданы данные в кодировке UTF-8 и их нужно доставить на телефон в кодировке UCS-2.