2013-03-11 2 views
3

У меня возникла проблема с отправкой флэш-сообщения на арабском языке при использовании протокола SMPP на Java. Мне удастся отправить стандартный английский формат, но когда я использую арабские юникоды, сообщение доставляется в неизвестном формате.Отправка флеш-сообщения на арабском языке через SMPP

Ниже представлен соответствующий запрос образца, который я использую.

byte protocolId = 0x00; 
byte dataCoding = (byte) 0xf0; //(for flash message) 
byte smsClass = 0x00; 
request.setShortMessage("\u0628", Data.ENC_UTF8); 

Запрос SMPP в журналах показывает правильный арабский алфавит при отправке запроса, но у пользователя заканчивается алфавит в нечитаемый формат. Остальные настройки для запроса устанавливаются по умолчанию. Поблагодарили бы за любое предложение для достижения цели. Заранее спасибо.

+0

Я бы проверил, можно ли отправить арабский текст. В соответствии с разделом 5.2.19 SMPP 3.4, DCS 0x08 следует использовать для установки Unicode. Затем я попробую отправить с DCS 0x88 для флеш-сообщений. –

+0

Да, вы правы в спецификации. Но когда я использую 0x08 для кодирования данных, сообщение может доставлять арабский, хотя оно не может быть доставлено как флеш-сообщение. Он непосредственно хранится в папке «Входящие», как обычное сообщение. – ktk

ответ

3

Вам необходимо установить dcs в 0x18.

Существует два способа кодирования, позволяющие получить доступ к параметру класса сообщений, который отвечает за флэш-сообщения.

См. http://www.etsi.org/deliver/etsi_ts/100900_100999/100900/07.02.00_60/ts_100900v070200p.pdf раздел 4 для дальнейшего ознакомления.

Ваше значение 0xf0 указывает на второй способ кодирования dcs и устанавливает класс сообщения 0, который является флэш-памятью, а также алфавит установлен по умолчанию. Таким образом, кстати, не UCS2.

Другой способ позволяет лучше контролировать. Верхний шестиугольник равен 1, что означает, что нижний шестиугольник содержит информацию о классе сообщений. Затем нижний шестиугольник говорит, что используется UC2, а класс сообщений установлен в 0.

1

Я еще не сталкивался с надежным способом, который будет работать во всех SMS-Cs.

Есть две возможности; вам придется поэкспериментировать, чтобы узнать, какой (если есть) метод работает с вашим провайдером.

Вариант 1. Установите параметр data_coding равным 0x18.

Это хорошо объяснено в ответе @ Мартина, но строго это значение DCS GSM/MAP (поиск спецификации «TS 23.038»), а не значение данных SMPP data_coding. Этот вариант предполагает, что SMS-C передает это значение данных SMPP data_coding прозрачно. Это не гарантирует - диапазон данных_кодирования 0x0F-0xBF зарезервирован в SMPP, поэтому вы не знаете, что SMS-C будет делать с ним, не пытаясь его устранить.

Вариант 2. Набор data_coding для 0x08 и dest_addr_subunit = 1 ("MS Display")

Это является более соответствующим стандартам способом, но опирается как на ваш стек SMPP и стек SMS-C в поддержку параметр dest_addr_subunit (что необязательно).

Ни один из вариантов не может быть переносимым между сетями. Поэтому, если вы подключаетесь к агрегатору во всех сетях на своей территории, а агрегатор прозрачно передает поля, вы можете столкнуться с несоответствиями при отправке сообщений на телефоны во всех целевых сетях.

Смежные вопросы