T
trueRevenant
Всем доброго времени суток!
Недавно я разработал приложение для рассылки SMS-сообщений абонентам через шлюз SMPP.
Все работало хорошо, пока не возникла потребеность отправке более длинных сообщений (в моем случае более 70 русских символов). в документации по используемой мной библиотеке которую откопал в интернете я прочел чтобы удлинить передаваемое сообщение нужно записать его в поле message_payload и что оно не должно использоваться совместно с полем short_message. Путем примеров из различных источников я изменил метод отправки.
Для наглядности код ДО:
метод convert_str перевод сообщение в кодировку UTF16_BE
код ПОСЛЕ:
При данных изменениях Сообщение приходит на телефон адресата, но нечитаемо (Текст - "Сообщение невозможно прочитать").
Некоторые строки я брал их примеров и они до сих пор мне не понятны если честно. Проблема в том что я не смог в инете найти внятного описания и примеров как работать с полем message_payload.
Может кто-нибудь с этим сталкивался? Жду ваших комментариев. Заранее спасибо.
Недавно я разработал приложение для рассылки SMS-сообщений абонентам через шлюз SMPP.
Все работало хорошо, пока не возникла потребеность отправке более длинных сообщений (в моем случае более 70 русских символов). в документации по используемой мной библиотеке которую откопал в интернете я прочел чтобы удлинить передаваемое сообщение нужно записать его в поле message_payload и что оно не должно использоваться совместно с полем short_message. Путем примеров из различных источников я изменил метод отправки.
Для наглядности код ДО:
Код:
public void sendSMS(String number, String text) throws IOException, PDUException, ValueNotSetException, TimeoutException, WrongSessionStateException
02
{
SubmitSM submitSm = new SubmitSM();
SubmitSMResp response;
submitSm.setSourceAddr((byte) 5, (byte) 0, "Источник");
submitSm.setDestAddr((byte) 1, (byte) 1, number);
submitSm.setShortMessage(convert_str(text));
submitSm.setRegisteredDelivery((byte) 1);
submitSm.setDataCoding((byte) 8);
submitSm.assignSequenceNumber(true);
System.out.println("Submit request " + submitSm.debugString());
response = session.submit(submitSm);
System.out.println("Submit response " + response.debugString() + " MESSAGE ID : " + response.getMessageId());
}
код ПОСЛЕ:
Код:
public void sendSMS(String number, String text) throws IOException, PDUException, ValueNotSetException, TimeoutException, WrongSessionStateException
{
ByteBuffer buf = new ByteBuffer();
buf.appendByte((byte) 6);
buf.appendByte((byte) 5);
buf.appendByte((byte) 4);
buf.appendShort((short)0x1581);
buf.appendShort((short)0x0000);
buf.appendBytes(text.getBytes(Data.ENC_UTF16_BE), text.length());
SubmitSM submitSm = new SubmitSM();
SubmitSMResp response;
submitSm.setSourceAddr((byte) 5, (byte) 0, "Источник");
submitSm.setDestAddr((byte) 1, (byte) 1, number);
submitSm.setMessagePayload(buf);
submitSm.setRegisteredDelivery((byte) 1);
submitSm.setDataCoding((byte)0x0F5);
submitSm.setEsmClass((byte)(Data.SM_UDH_GSM));
submitSm.assignSequenceNumber(true);
System.out.println("Submit request " + submitSm.debugString());
response = session.submit(submitSm);
System.out.println("Submit response " + response.debugString() + " MESSAGE ID : " + response.getMessageId());
}
Некоторые строки я брал их примеров и они до сих пор мне не понятны если честно. Проблема в том что я не смог в инете найти внятного описания и примеров как работать с полем message_payload.
Может кто-нибудь с этим сталкивался? Жду ваших комментариев. Заранее спасибо.