Portál AbcLinuxu, 8. května 2024 02:16


Dotaz: Vlastna SMS brana s API

22.3.2016 15:45 Miro
Vlastna SMS brana s API
Přečteno: 1777×
Odpovědět | Admin
Pouziva niekto SMS branu, ktora umoznuje poslat SMS cez HTTP(s)? Potrebujem posielat SMS z viacerych systemov. Internetova sluzba nepripada do uvahy. Brana by mala byt riesena ako sluzba/demon, nie naskriptovane gammu.

Řešení dotazu:


Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Jendа avatar 22.3.2016 17:37 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Vlastna SMS brana s API
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nakriptoval bych Gammu a spustil před ním službu/démon.
Já to s tou denacifikací Slovenska myslel vážně.
23.3.2016 00:28 Jooky (inactive) | skóre: 39 | blog: Jooky | Bratislava
Rozbalit Rozbalit vše Re: Vlastna SMS brana s API
Odpovědět | | Sbalit | Link | Blokovat | Admin
ja pouzivam app-mobilephone/smstools (homepage) ... funguje to podobne ako email client. SMS vo spravnom formate vlozis do directory. Daemon si to zoberie a presunie do queue. Queue postupne odosiela. Prijate SMS zas uklada do dalsieho dir. Vies si tam scriptovat akcie (ja si napr. prijate SMS preposielam na email).

HTTP(s) priamo nepouzivam, ale principialne to nie je problem poriesit ... staci si spravit nejaky php/cgi/python/etc. script, co ti data z POST/GET vypluje do spravne naformatovaneho suboru ...


ps: spravne naformatovany znamena:
- prvy riadok "To:" + cislo v medzinarodnom formate
- druhy riadok prazdny
- treti riadok text spravy
23.3.2016 09:37 Petr
Rozbalit Rozbalit vše Re: Vlastna SMS brana s API
BTW mimo téma: tady je jednoduchá utilitka v C na odeslání z příkazové řádky.
24.3.2016 16:47 Jooky (inactive) | skóre: 39 | blog: Jooky | Bratislava
Rozbalit Rozbalit vše Re: Vlastna SMS brana s API
Utilitka je dobra na hranie, ale na nasadenie do produkcie uz moc nie ... Pri produkcnom nasadenie treba riesit:

- zamykanie modemu. Po seriovej linke mozes komunikovat len s jednym procesom naraz.
- queue. Naraz proste neposles viac ako jednu sms a zvysne musia cakat na svoj cas.
- opakovanie odoslanie pri probleme. Telekom uz niekolko krat dal SMS zadarmo a ludia pretazili SMS gateway. Smstools da pri probleme aktualnu SMS na koniec queue a ked sa dostane na radu, tak ju skusi poslat znova.
- citanie sprav z modemu. Je dost zariadeni, ktore prestanu posielat SMS, ked sa im zaplni inbox. Od operatorov chodi vacsinou dost bordelu aby sa to rychlo zaplnilo. Smstools riesi tento problem citanim inboxu v telefone / na SIM. Dokonca sa da nastavit aby toto spravil pred kazdym odosielanim spravy, takze to uplne eliminuje problem.

Vsetko toto elegatne riesi smstools. Vo vysledku je akakolvek dalsia integracia, len jednoduchy zapis to suboru. Ja pouzivam bash script, ktory spravi mktemp a nasledne vyklopi cislo + obsah sms do /var/spool/sms/outgoing/. Riesenie v PHP nebude daleko od toho.
24.3.2016 18:33 Petr
Rozbalit Rozbalit vše Re: Vlastna SMS brana s API
Tak přesně to, co jste popsal, že děláte bashem, jsem ukázal na tom odkazu na zdroják:
char template[] = "/var/spool/sms/outgoing/smsXXXXXX"
mkstemp(template)
fchmod(fd, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
fdopen(fd, "w")

Ale to bylo jen tak, nic v tom nehledejte, jen jednoduché řešení pro command line, pokud to zrovna nemá být bash.

Samozřejmě HTTP API nad smstools je dobré řešení, také jsem nad tím dělal v NodeJS www a API rozhraní (včetně zpracování doručenek přes handler smstools).
26.3.2016 21:05 Jooky (inactive) | skóre: 39 | blog: Jooky | Bratislava
Rozbalit Rozbalit vše Re: Vlastna SMS brana s API
eeee ... do dennicka si pisem: "Neodpisovat na komentare, ktore som cital pred spanim". Hned za: "V noci nepisem do diskusie" :D

Sorry, ja som to kukal na mobile v noci ... a viacmenej pozrel len tu poslednu cast s fprintf. Z nejakeho dovodu mi to vtedy pripadalo ako kod len na priame posielanie SMS (co je dost divne, kedze tam nie je ani raz "AT"). Rano som uz bez rozmyslania odpisal do diskusie :)

Takze berte moj komentar len ako vysvetlenie ako smstools funguje interne ...

... btw. ja mam uz mozno viac ako 10 rokov smstools + "zadacom" modem (nejaka embeded nokia) a funguje to uplne nadherne.
24.3.2016 18:36 R
Rozbalit Rozbalit vše Re: Vlastna SMS brana s API
<?php
        $queue_dir = '/var/spool/sms/outgoing';
        $checked_dir = '/var/spool/sms/checked';

        $pocet_v_rade = 0;
        $dir = opendir($queue_dir);
        while (($filename = readdir($dir)) !== FALSE)
                if ($filename != '.' && $filename != '..')
                        $pocet_v_rade++;
        closedir($dir);
        $dir = opendir($checked_dir);
        while (($filename = readdir($dir)) !== FALSE)
                if ($filename != '.' && $filename != '..' && strpos($filename, '.LOCK') === FALSE)
                        $pocet_v_rade++;
        closedir($dir);
        echo 'Počet SMS v rade na odoslanie: '.$pocet_v_rade.'<br/>'

        if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['sprava'])) {
                $count = 0;
                $sprava = substr($_POST['sprava'], 0, 160);
                echo '<br/>Správa: "'.htmlspecialchars($sprava).'"<br/><br/>';
                $cisla = explode("\n", $_POST['cisla']);
                foreach ($cisla as $cislo) {
                        $cislo = trim($cislo);
                        if (empty($cislo))
                                continue;
                        if (($cislo{0} == '+' && strlen($cislo) == 13) || ($cislo{0} != '+' && strlen($cislo) == 12)) {
                                $cislo_pre_sms = str_replace('+','',$cislo);
                                $filename = tempnam($queue_dir, date('YmdHis').'-'.$cislo_pre_sms.'-');
                                if ($filename === FALSE) {
                                        echo 'Chyba pri vytváraní SMS súboru pre '.$cislo.'<br/>';
                                        continue;
                                }
                                $f = fopen($filename, 'w');
                                if ($f === FALSE) {
                                        echo 'Chyba pri otváraní SMS súboru pre '.$cislo.'<br/>';
                                        continue;
                                }
                                fwrite($f, "To: ".$cislo_pre_sms."\n\n".$sprava);
                                fclose($f);
                                chmod($filename, 0644);
                                $count++;
                        } else
                                echo 'Číslo '.$cislo.' nie je v správnom tvare!<br/>';
                }
                echo '<br/>Správ vložených do radu: '.$count.'<br/>';
        }
?>
23.3.2016 10:24 R
Rozbalit Rozbalit vše Re: Vlastna SMS brana s API
Tiez som pouzival smstools a v PHP som k tomu mal urobeny web interface - je to par riadkov kodu.
26.3.2016 23:15 citanus
Rozbalit Rozbalit vše Re: Vlastna SMS brana s API
Odpovědět | | Sbalit | Link | Blokovat | Admin
mrkni na jasminu.. http://jasmin.readthedocs.org/en/latest/index.html ja pouzical smpp, ale http api to ma taky.
27.3.2016 14:37 Petr
Rozbalit Rozbalit vše Re: Vlastna SMS brana s API
Neznal jsem, pěkné!
xkucf03 avatar 27.3.2016 21:50 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Vlastna SMS brana s API
+1
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.