Вопрос по Smpp

Тема в разделе "Java", создана пользователем trueRevenant, 10 авг 2011.

  1. trueRevenant

    trueRevenant Гость

    Всем доброго времени суток!

    Недавно я разработал приложение для рассылки SMS-сообщений абонентам через шлюз SMPP.
    Все работало хорошо, пока не возникла потребеность отправке более длинных сообщений (в моем случае более 70 русских символов). в документации по используемой мной библиотеке которую откопал в интернете я прочел чтобы удлинить передаваемое сообщение нужно записать его в поле message_payload и что оно не должно использоваться совместно с полем short_message. Путем примеров из различных источников я изменил метод отправки.
    Для наглядности код ДО:
    Код (Text):
    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());    
    }
    метод convert_str перевод сообщение в кодировку UTF16_BE

    код ПОСЛЕ:
    Код (Text):
    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.

    Может кто-нибудь с этим сталкивался? Жду ваших комментариев. Заранее спасибо.
     
  2. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Нашел вот это в интернетах. Там в комментах приводится кусок кода для отправки длинных сообщеий. Ваш код, который ПОСЛЕ, судя по всему, основывается на примере из FAQ для отсылки рингтона, что, по всей видимости, не годится для текста.
     
  3. trueRevenant

    trueRevenant Гость

    сенкс. попробую
     
  4. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    как вариант использовать другой шлюз, который сам разбивает сообщение на куски
     
  5. trueRevenant

    trueRevenant Гость

    шлюз в моем распоряжении к сожалению только 1
     
  6. trueRevenant

    trueRevenant Гость

    при дальнейшем поиске решения я наткнулся на новую проблему:
    сейчас код отправки выглядит так:
    Код (Text):
                SubmitSM submitSm = new SubmitSM();
    SubmitSMResp resp;
    submitSm.setDataCoding((byte) 8);
    submitSm.setRegisteredDelivery((byte) 1);
    submitSm.setEsmClass((byte)(Data.SM_UDH_GSM));
    submitSm.setSourceAddr((byte) 5, (byte) 0, "EATPBank");
    submitSm.setDestAddr((byte) 1, (byte) 1, number);
    ByteBuffer payload = new ByteBuffer();
    System.out.println(text);
    System.out.println(text.length());
    payload.appendString(text, Data.ENC_UTF16_BE);
    System.out.println("Submit request " + submitSm.debugString());
    System.out.println(payload.length());
    submitSm.setMessagePayload(payload);
    resp = session.submit(submitSm);
    System.out.println("Submit response " + resp.debugString() + " MESSAGE ID : " + resp.getMessageId());
    но при отправке сообщения более 70 русских символов, сообщение просто не доходит до адресата. если 70 или менее то все нормально доходит и читается.
    хотя поле для больших сообщений. чем это обусловлено пока понять не могу.
     
  7. trueRevenant

    trueRevenant Гость

    В дополнение к моему последнему посту.
    Ответ со шлюза возвращает ошибку в resp.getCommandStatus() = 192. перевел ее в HEX получил 0x000000C0. Почитал спецификацию протокола. 0x000000C0 - Error in the optional part of the PDU Body.
     
Загрузка...
Похожие Темы - Вопрос по Smpp
  1. ApplePen
    Ответов:
    0
    Просмотров:
    53
  2. gURaBA_N
    Ответов:
    3
    Просмотров:
    90
  3. kartaman
    Ответов:
    0
    Просмотров:
    125
  4. Peter
    Ответов:
    4
    Просмотров:
    517
  5. di0d_
    Ответов:
    1
    Просмотров:
    432

Поделиться этой страницей