Tere! Kuigi messengers ja sotsiaalmeedia pÀev-pÀevalt asendavad traditsioonilisi suhtlemisviise, ei vÀhenda see SMS-i populaarsust. Kinnitamised populaarsetes saitides vÔi teated tehingutest kordavad neid, elavad ja jÀÀvad ellu. Kas olete kunagi mÔelnud, kuidas see kÔik töötab? Massiliste sÔnumite saatmiseks kasutatakse vÀga tihti SMPP protokolli, millest rÀÀgitakse allpool.
Habr on juba olnud artikleid SMPP-st, ,, kuid nende eesmĂ€rgiks ei olnud protokolli iseenese kirjeldamine. Loomulikult vĂ”ite kohe alustada algallikast â , aga arvan, et oleks hea, kui oleks olemas ka lĂŒhikokkuvĂ”te. Selgitan nĂ€iteks versiooni 3.4 pĂ”hjal. Olen avatud teie objektiivsetele kriitikatele.
SMPP protokoll on omavaheliste sÔnumite protokoll. See tÀhendab, et iga peer/hub server on vÔrdses positsioonis. Lihtsaimal juhul nÀeb SMS-i saatmise skeem vÀlja selline:

Kuid kui riiklik operaator ei oma marsruuti mĂ”nda kaugesse piirkonda, palub ta selleks vahendajat â SMS hub'i. MĂ”nikord, et saata ĂŒks SMS, tuleb luua ahel mitme riigi vahel vĂ”i isegi kontinendi ulatuses.
Protokollist
SMPP â rakendusprotokoll, mis pĂ”hineb PDU vahetusel ja edastatakse TCP/IP vĂ”i X.25 sessioonide kaudu SMS- ja USSD-sĂ”numite edastamiseks. SMPP-d kasutatakse tavaliselt pideva ĂŒhenduse reĆŸiimis, mis sÀÀstab aega. SMPP rakendab kliendi-serveri suhtlemismudelit.
SuhtlemisreĆŸiim

SĂ”numite vahetus saatja ja SMS-keskuse vahel lĂ€bi SMPP vĂ”ib toimuda jĂ€rgmistes reĆŸiimides:
Transmitter (edastaja) â sĂ”numi ĂŒhekordne edastamine jĂ€rjestikku.
Receiver (vastuvĂ”tja) â ainult sĂ”numi vastuvĂ”tt SMS-keskuse poolt.
Transreceiver (vastuvĂ”tja-edastaja) â sĂ”numite vahetus SMS-keskuse ja kasutaja vahel.
Struktuur

SÔnumi pikkus
Ăks SMS-sĂ”num vĂ”ib sisaldada 70 tĂ€hte kirillitses ja mitte rohkem kui 157 ladina tĂ€hte + 3 UDH. Kui saata SMS-i, millel on rohkem tĂ€hti, jagatakse see mitmeks segmendiks ja koondatakse vastuvĂ”tvas seadmes. Segmenteerimise korral vĂ€hendatakse tĂ€hemĂ€rkide arvu sĂ”numi peatĂŒkkide tĂ”ttu, kus on mĂ€rgitud sĂ”numi osa. SeetĂ”ttu, kui saadate suurt SMS-sĂ”numit, sisaldab see maksimaalselt 153 ladina tĂ€hte vĂ”i 67 mittestandardsed tĂ€hte.
Andmete kodeerimise skeem
Kuid sĂ”numi edastamiseks on sĂŒmbolid vaja kodeerida. SMPP protokollis vastutab kodeerimise eest spetsiaalne vĂ€li â Data Coding Scheme ehk DCS. See vĂ€li nĂ€itab, kuidas sĂ”numeid tuvastada. Lisaks sisaldab DCS vĂ€li:
- sĂŒmbolite kogumit, mis mÀÀrab kodeerimise;
- sÔnumi klass;
- automaatse kustutamise taotlus pÀrast lugemist;
- teade kokkusurumise kohta;
- laialdase sÔnumi keel;
TavapĂ€rane 7-bitine tĂ€hestik (GSM 03.38). See on loodud GSM sĂ”numite sĂŒsteemi jaoks. See kodeering sobib inglise ja mitme lĂ€ti keele jaoks. Iga sĂŒmbol koosneb 7 bitist ja kodeeritakse oktetina.
UTF-16 (GSM UCS2) Puuduvaid sĂŒmboleid 7-bitistes tĂ€hestikes sisaldava kodeeringu loomiseks töötati vĂ€lja UTF-16, mis lisab tĂ€iendavad sĂŒmbolid (sealhulgas kirillitsed) sĂ”numi suuruse vĂ€hendamise arvelt 160-lt 70-le; see kodeering kordab peaaegu tĂ€ielikult Unicode'i.
8-bit kasutajamÀÀratud andmed. Nendeks on KOI8-R ja Windows-1251. Kuigi selline lahendus tundub olevat odavam vĂ”rreldes UTF-16-ga. TĂ”statub Ă”igustatud ĂŒhilduvuse kĂŒsimus erinevates seadmetes. Selles osas peavad mĂ”lemad seadmed olema eelnevalt seadistatud.
SÔnumiklass
- Class0 ehk flash-sÔnum, mis salvestatakse telefoni mÀllu kasutaja soovi kohaselt;
- Class1 ehk need, mis salvestatakse telefoni mÀllu;
- Class1 ehk need, mis salvestatakse telefoni mÀllu;
- Class2 peab tagama, et sÔnum salvestatakse mobiilse terminali mÀllu, vastasel juhul peab see edastama sms-keskusele teate, et salvestamine ei Ônnestu;
- Class3 â sel juhul peab telefon suunama teate, et sĂ”numi salvestamine on vĂ”imalik, sĂ”ltumata seadme mĂ€lu hulgast. Selline sĂ”numitĂŒĂŒp eeldab, et sĂ”num on jĂ”udnud adressaadini;
SĂ”numitĂŒĂŒp
Vaikne sĂ”num (SMS0) SĂ”numitĂŒĂŒp ilma sisuta. Selline sĂ”num tuleb ilma teavitamiseta ja ei kuvatakse seadme ekraanil.
PDU
Iga PDU operatsioon on paariline ja koosneb pĂ€ringust ja vastusest. NĂ€iteks: kĂ€sk, mis rÀÀgib ĂŒhenduse loomise kohta (bind_transmitter / bind_transmitter_resp), vĂ”i et sĂ”num on edastatud (deliver_sm / deliver_sm_resp)

Iga PDU pakk koosneb kahest osast â pealkirjast (header) ja sisust (body). Pealkirja struktuur on sama iga PDU paki jaoks: kĂ€skude pikkus (command length) nĂ€itab paketi pikkust, ID on paketi nimi, ning kĂ€sk status nĂ€itab, kas sĂ”num on edukalt edastatud vĂ”i esines tĂ”rge.
Lisaparoometrid TLV
TLV (Tag Length Value), ehk lisavÀljad. Selliseid parameetreid kasutatakse protokolli funktsioonide laiendamiseks ja need ei ole kohustuslikud. See vÀli on mÀrgitud PDU vÀlja lÔppu. NÀiteks, kasutades TLV dest_addr_np_information, saab korraldada teabe edastamise numbri portimise kohta.
Ton ja Npi
TON (Type of Number) parameeter, teatab SMSC-le aadressimise vormingust ja vĂ”rgutĂŒĂŒbist.
NPI (Numbering Plan Identification) parameeter, mis nÀitab numbriplani.

SÔnumi allika aadress vÔi alfa-nimi
Telefonile saadetavad sĂ”numid on kahte tĂŒĂŒpi: digitaalne ja tĂ€htede. Digitaalsed vĂ”ivad olla pikad (sarnased telefoninumbri laadsetega) ja lĂŒhikesed. MĂ”nikord on operaatoritel piirangud neutraalsete nimede, nĂ€iteks Infosms, Alert jne saatmiseks. MĂ”nikord ei luba operaatorid liiklust, kui nimi ei ole nende vĂ”rgus registreeritud. Siiski on see pigem operaatori eripĂ€ra.
Saadetamise etapid
![]()
SMS-SUBMIT â on MO FSM (lĂŒhi-sĂ”num mobiiliterminalilt) saatmine
SMS-SUBMIT REPORT â kinnitus, et sĂ”num on saadetud SMSC-le
SRI SM (SendRoutingInfo) â SMSC saab HLR-ist teavet mobiili asukoha MSC / VLR kohta
SRI SM RESP â vastus HLR-ilt abonendi asukoha kohta
MT-FSM â pĂ€rast asukoha saamist saadetakse sĂ”num, kasutades 'Forward Short Message' operatsiooni
MT-FSM ACK â vastus SMSC-lt, et sĂ”num on saadetud
SMS-STATUS REPORT â SMSC saadab staatuse sĂ”numi kohaletoimetamise kohta.
SÔnumi kohaletoimetamise staatus
SMS-STATUS REPORT vÔib vÔtta mitmeid vÀÀrtusi:
DELIVRD sÔnum on edukalt kohaletoimetatud
REJECTD â sĂ”num on SMS-keskuse poolt tagasi lĂŒkatud
EXPIRED â sĂ”num eemaldati saatmisjĂ€rjekorrast pĂ€rast TTL-i (sĂ”numi eluaeg) lĂ”ppu
UNDELIV â teised kĂ€ttetoimetamata juhtumid
UNKNOWN- vastust saatmisest ei saadi.
Ălekandevead
MĂ”nikord on pĂ”hjused, miks SMS-sĂ”numid ei jĂ”ua adressaadini. Nende pĂ”hjuste tagajĂ€rjel tekivad vead. Vead tagastatakse PDUs_sms_resp-is. KĂ”iki vigu saab jagada ajutisteks (Temporary) ja pĂŒsivateks (Permanent).
Ajutisteks vĂ”ib nĂ€iteks lugeda absent_subscriber, kui adressaat ei ole saadaval vĂ”i ei ole vĂ”rgus, ja pĂŒsivateks â adressaat ei eksisteeri. SĂ”ltuvalt tekkivatest vigadest kujundatakse nende sĂ”numite uuesti saatmise poliitika.
NÀiteks, kui adressaat on kÔne ajal ja saab vigade pÔhjal MT handset is busy, saab sÔnumit uuesti saata mÔne minuti pÀrast, kuid kui adressaadi teenus on sÔnumite vastuvÔtmise osas blokeeritud, ei ole uuesti saatmine mÔistlik. Veateabe loendi leiate SMSC lehtedelt, nÀiteks kuidas .
Allikas: habr.com
