Ako funguje príjem SMSiek na geografických a nomadických číslach?
SMSka poslaná na ľubovoľné geografické alebo nomadické číslo, nech už je poslaná z ktoréhokoľvek mobilného čísla od ktoréhokoľvek operátora, skončí u O2 a oni ju pošlú Materny. Materna následne bude SMSku doručovať na cieľové číslo a je jedno, či to je analógová pevná linka, ISDN linka alebo VOIP linka cez SIP. A tiež je jedno u ktorého operátora je cieľové geografické či nomadické číslo vedené. Materna má u seba vedený zoznam čísiel, u ktorých je zapnuté doručovanie textovou formou. Tento zoznam budem ďalej nazývať whitelist.
V prípade, že je cieľové číslo na whiteliste, tak SMSka sa bude doručovať v textovej forme. Konkrétne to je binárny TPDU formát (3GPP TS 23.040), ktorý je (takmer) úplne rovnaký ako sa používa v mobilnej sieti. Tzn. je v ňom uvedené, či je to textová SMSka alebo binárna SMSka (ako sa kedysi posielali zvonenia, čiernobiele tapety na mobily a pod.). Taktiež je tam uvedené, či je to fragment "dlhej" SMSky (ktorá má viac ako 160 znakov) a aj jeho poradové číslo a identifikátor aby bolo možné jednotlivé fragmenty opätovne a jednoznačne poskladať do pôvodnej dlhej správy.
SMS dáta v TPDU formáte sú zabalené do F-SMS protokolu definovanom v štandarde ETSI ES 201 912. Toto už je špecifické pre pevné siete a v mobilnej sieti sa nepoužíva. Samotný F-SMS protokol je kódovaný do hlasového half-duplex V.23 modemu (1200 baudov) a prenášaný cez in-band audio hovor, veľmi podobne ako FAX. Tzn. pre VOIP SIP linky je potom prenášaný v RTP paketoch pomocou PCMA alebo PCMU kodeku. Telefónny hovor prichádza z telefónneho čísla 14700.
V prípade, že cieľové číslo sa nenachádza na whiteliste, potom Materna skonvertuje SMSku do nejakého medziformátu a doručuje ju buď vo FAXovej alebo hlasovej forme. Zavolá z čísla 284001000 na cieľové číslo. V prípade, že sa po zdvihnutí hovoru z cieľovej linky ozve CED signál (2100 Hz stály signál po dobu asi sekundy), tak SMSka bude doručovaná ako bitmapa vo FAXovej forme. Ak sa CED signál z cieľovej linke neozve, SMSka bude prečítaná plechovou hubou.
Ak doručovanie v textovej forme niekoľkonásobne zlyhá, tak sa vraj telefónne číslo z whitelistu odstráni. Avšak po 3 neúspešných pokusoch o doručenie, testované číslo vyradené z whitelistu nebolo. Viac som to neskúšal, takže neviem.
Výhody textového formátu oproti FAXu/hlasu
- Textový formát sa dá jednoduchšie čítať a jednoduchšie sa robí konverzia do (textového) emailu
- Vo FAX/hlas formáte z čísla 284001000 sa SMSka doručuje iba medzi 08:00 - 22:00. Ak ju odosielateľ pošle v noci, príde až ďalší deň ráno. V textovom formáte z čísla 14700 je doručovaná počas celého dňa aj v noci.
- Číslo 14700 pre textovú formu volá prakticky okamžite po poslaní SMSky (cca do 10 sekúnd). Číslo 284001000 pre FAX/hlas volá niekedy až po 15 minútach od poslania SMSky.
- Doručovanie SMSky textovou formou od zdvihnutia hovoru trvá cca 3-5 sekúnd. Doručovanie FAXovou formou od zdvihnutia hovoru trvá minútu a niekedy aj viac. FAX síce používa rýchlejší modem ako F-SMS ale zas musí preniesť bitmapu o veľkosti A4. F-SMS stačí poslať cca 200 bajtov.
- Textový F-SMS formát je totožný s formátom aký používajú mobilné telefóny a teda sa v ňom nachádza informácie, že prijaté dáta sú iba časť/fragment dlhšej SMSky. Vo FAXovom ani hlasovom formáte nie je uvedená žiadna informácia o tom, nijak sa nedá rozpoznať ktorá časť je prvá, ktorá druhá a jednotlivé časti sa doručujú v náhodnom poradí (tzn. viac krát sa mi stalo, že najprv prišla druhá časť a až potom prvá)
- SMSka v textovom formáte z čísla 14700 je doručovaná iba dva krát. Druhý pokus je cca o 30 sekúnd. Po neúspešnom doručení (napr. preto, že bolo obsadené alebo hovor nikto nezdvihol) je SMSka stratená. Avšak pri zahraničných odosielateľoch, bola spätne vrátená odosielateľovi doručenka o nemožnosti doručiť správu. EDIT 2022-05-12: Nové testovanie a pokusy o doručenie boli 4, každý po 5 minútach. Po štvrtom neprijatí začalo doručovanie vo FAX/hlas formáte a SMS stratená nebola.
- SMSka v FAX/hlas formáte je doručovaná asi dva dni. Po neúspešnom doručení idú 3 ďalšie pokusy po hodine. Ďalšie následné pokusy sú potom po dvojhodinových intervaloch. Ak je po 22:00, tak ďalší pokus o doručenie je až ďalšie ráno.
- Treba sa dostať na whitelist. Pre zákazníkov O2 to spravia na zákazníckej linke alebo to ide spraviť aj samostatne, viď: https://www.o2.cz/osobni/sluzby-podle-a ... luzby.html Zákazníci ostatných operátorov (ako napr. my u Odoriku) sú odkázaný na svojho operátora aby sa dohodol s Maternou na zaradenie jednotlivých čísel do whitelistu (tzn. aby Materna prepla doručovanie SMSiek z FAX/hlas režimu na textový). V O2 mi povedali, že to musí spraviť operátor zákazníkov, ktorý sa musí s Maternou dohodnúť.
- Odorik má nejakú chybu s normalizáciou telefónnych čísel a F-SMS hovor na Odorik linke prichádza z tel. čísla 00420+42014700 namiesto z 14700. Vyzerá to tak, že Odorik chybne pridáva medzinárodnú predvoľbu +420 a to dokonca dva krát. Správne má byť to číslo ale bez medzinárodnej predvoľby. EDIT 2022-05-12: Problém je na strane Odorika opravený.
- Musí sa použiť PCMA (alebo PCMU) kodek. Kvôli použitiu V.23 modemu na prenos nie je prakticky možné používať komprimované kodeky.
- Neexistuje poriadna F-SMS implementácia pre SIP (treba V.23 modem, SIP protokol a ešte k tomu TPDU). F-SMS bolo vymyslené pre pevné analógové siete a tak sa takmer nikto nevenoval implementácii pre VOIP/SIP.
- Analógové HW zariadenia pre príjem F-SMS správ nemajú veľmi dobre implementovanú opravu chýb a ani samotný protokol. Mnou testované zariadenie Jablotron MT-77 Piccolo pri doručovacej chybe oznámilo druhej strane, že SMSku úspešne prijalo (aj napriek tomu, že neprijalo) a SMSka sa stratila.
- F-SMS štandard popisuje, že koncové zariadenie môže zavolať na číslo centra a "stiahnuť" si SMSky, ktoré neboli prijaté v čase, keď bola linka obsadená. To je možno dôvod prečo ich Materna doručuje iba 2x. Avšak na číslo centra 14700 sa akosi zo siete Odoriku nedá dovolať. EDIT 2022-05-12: Na číslo 14700 sa už dá z Odorika dovolať, avšak Materna nepodporuje službu "stiahnuť" si SMSky, ktoré neboli prijaté v čase, keď bola linka obsadená.
Napísal som si vlastný program na príjem SMSiek F-SMS protokolom cez SIP, včítane V.23 modemu a TPDU formátu. Dokáže správne rozpoznať dlhé fragmentované SMSky a správne pospájať jednotlivé časti do pôvodneho stavu. Zvláda aj UCS-2 kódovanie SMSiek. S vlastnou softwarovou implementáciu V.23 demodulátoru som sa dosť vyhral. Ono to nie je úplne najjednoduchšie naimplementovať demodulátor pre PCMA kodek, kde je audio samplované na 8000 bajtov za sekundu. Pri 1200 V.23 baudovom modeme to vychádza iba na 6 až 7 nameraných vzoriek, ktoré kódujú jeden bit. Pomocou start a stop bitov robím synchronizáciu a dovoľujem odchýlku až o štvrtinu celej fáze. Nakoniec s nasadením FIR filtru v posuvnom okne na metódu najmenších štvorcov, dokážem demodulovať aj signál z trochu komprimovaných kodekov na výbornú. Ak má signál dostatočne veľkú intenzitu beriem pravdepodobnejší výskyt 0/1 bitu. Komprimovaný signál, ktorý testované zariadenie Jablotron MT-77 Piccolo ani Materna server na druhej strane hovoru nedokázali demodulovať (vrátili chybu), som bez problémov s mojou implementáciou rozpoznal.
Môj program prijíma všetky prichádzajúce hovory (ide ale nastaviť regex na 14700), snaží sa prijať všetky SMSky, ktoré druhá strana posiela a potom ich buď uloží na disk alebo prepošle emailom. Celý program funguje ako daemon, ktorý mi beží na serveri, na ktorý si nechávam presmerovať hovory z čísla 00420+42014700 14700. A to pomocou SIP uri a paralelného podmieneného presmerovania u Odoriku.
Celý program som zverejnil na adrese: https://github.com/pali/sip-fsms/
Beriem to ako čisto výskumný projekt. Ak by niekto chcel poradiť ako to nasadiť a používať, tak rád pomôžem.
Otázky na Odorik
- Bolo by možné opraviť normalizáciu čísel aby tel. hovory z čísla 14700 boli na linke zobrazené ako hovory z čísla 14700 a nie 00420+42014700? Predpokladám, že to je rovnaká chyba, že pred deväťmiestne číslo sa automaticky pridáva prefix 00420 lebo deväťmiestne číslo sa chápe ako číslo v národnom formáte. Na spojazdnenie Jablotron MT-77 Piccolo zariadenia som si musel spustiť vlastný SIP server, ktorý som dal medzi Odorik a ATA bránu (pre ten Jablotron) a ktorý prepisoval SIP hlavičky v hovoroch od Odoriku = odstraňoval tú duplicitnú medzinárodnú predvoľbu. Lebo všetky F-SMS HW zariadenia v ČR očakávajú číslo 14700 bez medzinárodných predvolieb. EDIT 2022-05-12: Problém s normalizáciou je na strane odoriku opravený, prichádzajúci hovor sa signalizuje zo správneho čísla 14700.
- Bolo by možné zistiť, že prečo sa nedá dovolať na číslo 14700 z Odorik linky? Lebo z opačného smeru, tzn. z čísla 14700 na Odorik linku hovory normálne prichádzajú. Nemôže byť nejaký problém, že treba pre toto číslo nejaké špeciálne routovanie? Napr. aby sa hovory na toto číslo routovali rovnakou cestou ako prichádzajúce hovory z tohto čísla? ID hovorov z dneska, keď som sa z Odorik linky neúspešne snažil na toto číslo dovolať: 399657424 a 399657426. A ID úspešne prijatých hovorov, keď mi toto číslo 14700 volalo (posielalo SMS správy): 399649819 a 399644437. Možnosť zavolať na toto číslo by mohlo umožniť doručiť SMSky, ktoré tam čakajú a ktoré neboli úspešne doručené. EDIT 2022-05-12: Taktiež opravené, na číslo sa už dá dovolať.
- Bolo by možné iniciovať nejakú komunikáciu s Maternou aby si zákazníci Odoriku, ktorí majú buď HW zariadenia (ako je Jablotron MT-77 Piccolo) alebo SW F-SMS implementáciu (akú som zverejnil napr. ja) aby ich Materna zaradila na zoznam čísel, ktorým môže doručovať SMSky v textovej forme? Doterajšia informácia je, že textový F-SMS formát je pre VOIP/SIP linky by default vypnutý lebo V.23 modem je nekompatibilný s VOIP. To rozhodne nie je pravda, pri použití PCMA to funguje aj s HW zariadeniami (ako je Piccolo), tak aj so SW implementáciou (ako je tá moja). Naviac, FAX používa rýchlejšie modemy ako F-SMS, takže na linke, ktorá zvládne FAX musí zvládnuť aj F-SMS. EDIT 2022-05-12: Už sa dá dostať na zoznam pomerne jednoducho, viď záver.
Možno by mohlo fungovať portácia čísla z Odorik do O2, potom v O2 prepnúť číslo z hlasovej formy na textovú a následne portovať číslo späť k Odoriku. Ale to je dosť finančne náročné (a asi to nikomu nestojí za to).
EDIT 2022-05-12:
Vďaka Odoriku, všetky problémy so spojovaním hovorov a tým čílom SMS centra 14700 sú už snáď vyriešené. Dnes som otestoval, že Jablotron MT-77 Piccolo pripojené cez Linksys PAP ATA bránu priamo na Odorik linku vie bez problémov prijímať SMSky v textovej F-SMS forme. Predpokladám teda, že príjem SMSiek v textovej forme bude fungovať aj ďalšími telefónmi, ktoré majú podporu pre F-SMS, ako napr. niektoré Gigasety.
Konfigurácia účtu je nasledovná:
- V nastaveniach účtu je potrebné zmeniť oznamovat maximální délku hovoru na nikdy.
- V nastaveniach linky je potrebné zmeniť Formát čísla volajíciho u příchozího hovoru na xxxyyyzzz nebo *xxxyyy aby sa nepridávala predvoľba +420 pre skrátené číslo 14700 (inak prijímač nebude vedieť, že ide o SMS)
- V nastaveniach linky - kodeky je ideálne mať povolené iba kodek PCMA=G711A=ALAW. Cez komprimované kodeky F-SMS neprejde.
https://www.o2.cz/podnikatel/191844-pevna_linka/59737-sms_nastaveni.html
Tzn. nastaviť číslo centra na 147, 1470 alebo 14700 podľa typu telefónu (rôzne telefóny si automaticky pridávajú rôzny počet núl na koniec).
Aktivácia prijímania SMS v textovej F-SMS forme je podľa pokynov na stránke O2:
https://www.o2.cz/podnikatel/191844-pevna_linka/59733-sms_tipy_triky.html
Tzn. z nakonfigurovaného zariadenia poslať SMS s obsahom TXT na číslo 1234.
POZOR: Platí sa za to poplatok 3,20 Kč, čo je minútová tarifikácia na tel. číslo 14700.
V dohľadnej dobe plánujem zupdatovať môj program so SW implementáciu aby dokázal SMSky aj posielať. Tzn. aby sa dala spraviť aktivácia aj bez HW zariadenia.
EDIT 2023-04-02:
Program som updatoval, zvláda sa registrovať na linku a zvláda už SMSky aj posielať. Takže nie je potrebné mať žiaden fyzický telefón s podporou F-SMS.
Aktivačná SMS sa dá poslať s parametrami (pozor na poplatok):
Kód: Vybrat vše
sip-fsms.pl --mode=send --to=1234 --message="TXT" --sip-from=sip:LINKA@sip.odorik.cz --sip-to=sip:14700@sip.odorik.cz --sip-proxy=udp:LINKA:HESLO@81.31.45.51
1. Presmerovanie hovorov na linke z čísla 14700 na vlasný server. V paralelnom vyzváňaní nastaviť na danej linke nastaviť 14700>sip:USER@SERVER. A potom na príjem SMSiek na serveri spustiť program s parametrami:
Kód: Vybrat vše
sip-fsms.pl --mode=receive --country=CZ --sip-listen=IPADRESA:5060 --frag-cache=./frag_cache.bin --store-to-dir=./SMS/
2. Registrovanie programu priamo na linku a prijímanie hovorov iba z čísla 14700:
Kód: Vybrat vše
sip-fsms.pl --mode=receive --country=CZ --sip-register=udp:LINKA:HESLO@sip.odorik.cz --sip-identity="<sip:LINKA@sip.odorik.cz>" --sip-accept-uri='^(?:\+420)?14700@sip\.odorik\.cz$' --frag-cache=./frag_cache --store-to-dir=./SMS/
3. Pri prijímaní SMSiek z viacerých liniek sa môže vyplatiť si vytvoriť jednu dedikovanú linku na SMSky, na ktorú podmienene presmerovať hovory z čísla 14700 zo všetkych liniek a potom si hovory presmerovať z tejto linky (alebo sa na tú linku registrovať). Odorik pri presmerovaní pridáva hlavičku Diversion: na základe ktorej sa dá zistiť na aké pôvodné číslo bol hovor smerovaný. Program túto informáciu využíva a teda správne označuje pôvodného príjemcu SMSky.
Program obsahuje rozsiahly --help ktorý je vhodné si prejsť pred použitím.