Перейти до основного вмісту

Відправлення по SMPP

Повідомлення надсилаються в submit_sm: один PDU на повідомлення або по одному на кожну частину довгого повідомлення.

Поля​

ПолеЩо вказати
source_addrІм'я відправника: до 11 символів, якщо в ньому є щось, крім цифр, інакше — до 15 цифр
destination_addrНомер одержувача в міжнародному форматі, лише цифри: 380671234567. Інші символи відкидаються
data_codingЯк читати байти short_message: 0 — GSM 7-bit, 1 — ASCII, 3 — Latin-1, 8 — UCS-2
esm_class0x40, коли текст починається з UDH (частина довгого повідомлення), інакше 0
short_messageТекст, до 255 октетів в одному PDU
registered_deliveryБудь-яке значення: звіт надсилається на кожне повідомлення в будь-якому разі
schedule_delivery_timeНадіслати пізніше, а не зараз. Абсолютний або відносний час, з точністю до хвилини
validity_periodСкільки повідомлення має сенс доставляти: від хвилини до 72 годин, 72 години, якщо порожньо. Абсолютний або відносний час

TON і NPI обох адрес, service_type, protocol_id, priority_flag, replace_if_present_flag і sm_default_msg_id не використовуються: залиште те, що бібліотека надсилає за замовчуванням. Поле message_payload теж не читається — текст іде лише в short_message.

Ім'я відправника має бути дозволене для вашого облікового запису. Ім'я, зарезервоване іншим клієнтом, заблоковане чи захищене ім'я або — поки обліковий запис на модерації — ім'я, ще не підтверджене операторами, відхиляється звітом, а не у відповіді на submit_sm: див. код err:003 у розділі Звіти про доставку.

Флеш-повідомлення — те, що одразу відкривається на екрані, — надсилається з data_coding 0x10 (GSM 7-bit) або 0x18 (UCS-2). Воно має вміщатися в одну частину.

Відповідь​

submit_sm_resp повертає message_id — десяткове число, своє для кожного submit_sm, тобто для кожної частини. Збережіть його: звіт про доставку несе те саме значення.

Нульовий command_status означає, що повідомлення прийнято. Перевірки балансу, оператора одержувача та імені відправника йдуть уже після цього, і повідомлення, що їх не пройшло, отримує звіт REJECTD замість помилки у відповіді. Що приходить у самій відповіді — у розділі Помилки та обмеження.

Кодування і довжина​

КодуванняОдне повідомленняОдна частина довгого
GSM 7-bit160 символів153 символи
UCS-270 символів67 символів

У GSM 7-bit символи ^ { } \ [ ~ ] | і € займають по два місця. В UCS-2 емодзі займає два.

data_coding каже нам, як читати ваші байти; кодування до оператора обирається за самим текстом, тож повідомлення латиницею, надіслане в UCS-2, піде як GSM 7-bit. З data_coding 0 байти читаються як символи GSM 7-bit, по одному на октет: звичайні ASCII @, $ і _ перетворюються там на інші символи. Для тексту, який ваша система видає як ASCII чи Latin-1, ставте 1 або 3.

Перед підрахунком переноси рядків \r\n стають \n, нерозривний пробіл — звичайним, тире – — дефісом -, а типографські лапки — ".

Довгі повідомлення​

Текст, довший за одне повідомлення, надсилається частинами, і обидва способи їх позначити розуміються:

  • UDH у тілі кожної частини з esm_class 0x40: елемент склеювання з 8-бітним (0x00) або 16-бітним (0x08) посиланням;
  • поля SAR sar_msg_ref_num, sar_total_segments і sar_segment_seqnum, коли UDH немає.

Частини можуть приходити в будь-якому порядку. Вони збираються на нашому боці й заново діляться для оператора; набір, що лишається неповним два дні, відкидається без звіту.

Ви платите за стільки частин, скільки надіслали або скільки нарахували ми, — за більшим із двох чисел, як і всюди в кабінеті, тож кількість у звіті збігається з кількістю в рахунку.

Відкладене відправлення і термін дії​

schedule_delivery_time притримує повідомлення до вказаної хвилини. Значення, яке ми не змогли прочитати, ігнорується, і повідомлення йде одразу.

validity_period передається операторові в межах від хвилини до 72 годин. Повідомлення, що ще чекає на нашому боці, коли його термін минув, — або через 72 години, якщо термін не задано, — не надсилається: гроші за нього повертаються, а назад приходить звіт EXPIRED.