Proste i wygodne tylko, ze niestety 6x drozsze niz rozwiazanie oparte na smstools3 gdzie koszt smsa ograniczamy do 1gr... :(
----- "firma firma" firma@zamek.net.pl napisał:
Witam
Osobiście dorabiałem obsługę sms-ów z http://smscenter.pl/ 6gr netto per sms. jako firma korzystam z funkcji o pare groszy droższej (prezentuje zamiast numeru nazwę firmy). Po rejstracji morzna nawiązać kontakt telefoniczny (przewarznie nie odbierają ale do paru minut oddzwaniają [nie nararzają mnie na koszty] ). I zalatwic sprawę z post-paid..
Ps powiadamiam klientów tylko o otwarciu zgłoszenia w helpdesk i zamknieciu.
zmiany: (bardzo prosze jak ktos moze o sprawdzenie i przygotowanie diff gdyrz ja juz wiele zmian wprowadzilem w LMS.class.php) w LMS.class.php
W funkcji: TicketAdd($ticket) w okolizach po: $this->DB->Execute('INSERT INTO rtmessages (ticketid, customerid, createtime, mam (az do konca funkcji):
$cid = $ticket['customerid']; $phone = $this->DB->GetOne('SELECT phone FROM customercontacts WHERE customerid = ? LIMIT 1; ', array($cid)); $prefixy=array("500", "501", "502", "503", "504", "505", "506", "507", "508", "509", "510", "511", "512", "513", "514", "515", "516", "517", "518", "519", "600", "601", "602", "603", "604", "605", "606", "607", "608", "609", "660", "661", "662", "663", "664", "665", "666", "667", "668", "669", "690", "691", "692", "693", "694", "695", "696", "697", "698", "699", "721", "722", "723", "72 4", "725", "726", "727", "780", "781", "782", "783", "784", "785", "786", "787", "788", "789", "790", "791", "792", "793", "794", "795", "796", "797", "798", "799", "880", "881", "882", "883", "884", "885", "886", "887", "888", "889"); $pref="$phone[0]$phone[1]$phone[2]"; if (in_array($pref, $prefixy)) { $ticketid=$id; $odbiorca="48$phone"; $user="NAZWAUSERA"; $pass="HASLO"; $nazwa="FIRMA"; $tresc="Nowe zgloszenie $ticketid."; $reg_ex = "[[:space:]]"; $replace_word = "+"; $mess=ereg_replace($reg_ex, $replace_word, $tresc); $url=" http://api.statsms.net/send.php?user=$user&pass=$pass&type=sms&f... "; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $strona = curl_exec($curl); curl_close($curl); } return $id; } // Koniec ADD
// Zamykanie zgłoszenia W funkcji SetTicketState($ticket, $state) Okolice: (po) $this->DB->Execute('UPDATE rttickets SET state=?, owner=?, resolvetime=? WHERE id=?', array($state, $this->AUTH->id, $resolvetime, $ticket)); mam (az do konca funkcji): if ($state==2) { $cid = $this->DB->GetOne('SELECT customerid FROM rttickets WHERE id = ? LIMIT 1; ', array($ticket)); $phone = $this->DB->GetOne('SELECT phone FROM customercontacts WHERE customerid = ? LIMIT 1; ', array($cid)); $prefixy=array("500", "501", "502", "503", "504", "505", "506", "507", "508", "509", "510", "511", "512", "513", "514", "515", "516", "517", "518", "519", "600", "601", "602", "603", "604", "605", "606", "607", "608", "609", "660", "661", "662", "663", "664", "665", "666", "667", "668", "669", " 690", "691", "692", "693", "694", "695", "696", "697", "698", "699", "721", "722", "723", "724", "725", "726", "727", "780", "781", "782", "783", "784", "785", "786", "787", "788", "789", "790", "791", "792", "793", "794", "795", "796", "797", "798", "799", "880", "881", "882", "883", "884", "885", "886", "887", "888", "889"); $pref="$phone[0]$phone[1]$phone[2]"; if (in_array($pref, $prefixy)) { $ticketid=$ticket; $odbiorca="48$phone"; $user="NAZWAUSERA"; $pass="HASLO"; $nazwa="FIRMA";
$tresc="Zakonczono zgloszenie: $ticketid. "; $reg_ex = "[[:space:]]"; $replace_word = "+"; $mess=ereg_replace($reg_ex, $replace_word, $tresc);
$url=" http://api.statsms.net/send.php?user=$user&pass=$pass&type=sms&f... "; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $strona = curl_exec($curl); curl_close($curl); } } } // Koniec
Oczywiście wyrzej wymieniony kod pobiera tylko 1 numer telefonu z numerów klienta. i musi byc w formie YYYXXXXXX np 500111222 (nie może zawierać - , . spacji i zera z początku). Osobiscie posiadam w systemie odpowiednią forme numeru i na 1 pozycji zawsze komorke. Wiec nie musiałem robic sprawdzania dokładniejszego. Ps. Zabawa z telefonami pod rs-232, usb jest hmm "wadliwe" :D i prezętuje numer klientowi.
Prywatny kontakt do mnie pegass@zamek.net.pl GG: 11389 (prosze na początku zaznaczyć ze w sprawie smsów w LMS bo inaczej odpowiedź może nastapić po paru miesiącach )
W dniu 30 października 2008 13:21 użytkownik Paweł Rohde pawel@rohde.pl napisał:
Witam
Planuję zintegrowanie z lmsem obsługi bramki smsowej do wysyłania i otrzymywania smsów.
Bramki sms będzie obsługiwał serwer sms (smstools). Za pomocą smsów będzie można:
- zgłosić awarię
- uzyskać login i hasło do pppoe
- wysyłać smsy do klientów z przypomnieniem np. o płatności
- wysyłać smsy do klientów z GUI
- wysyłać smsy z terminarza do techników
- wysyłać smsy z terminarza przypominające o zdarzeniu (np na 1,2,6h
przed).
W tej chwili działa mi poza GUI zgłaszanie awarii i uzyskanie loginu i hasła pppoe. Zmiany które chcę zrobić:
- dodać pole na nr telefonu (komórki) w danych użytkowników - chcę
wykorzystać tabelę customercontacts. 2. dodać moduł sms a w nim: 2.1 inbox,outbox,send 2.2 wyślij sms 4. dodać przycisk/link "wyślij sms" w danych klienta przy nr telefonu 3. dodać pole "powiadom sms" w terminarzu z dropem zawierającym : "natychmiast|na 1h przed|na 2h przed|na 6h przed"
Wykorzystanie serwera smstools uniezależnia projekt od warstwy sprzętowej, możliwe jest zbudowanie nawet bardzo dużego centrum sms. Chciałbym, by moje zmiany w lmsie weszły do głównej gałęzi, ze wzglądu na aktualizacje... Proszę o informację czy jest taka możliwość.
-- pozdrawiam Paweł Rohde Neter Sp. z o.o.
lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
Ja też pisze kod do wysyłania loginow pppoe z poziomu UI smsem, proponuje aby ujednolicic tego typu sprawy stworzyc backend moduł sms ktory bedzie sie zajmował samym wysyłaniem smsów, opartym o wybor serviceu np smstools lub smscenter.pl, nastepnie stworzenie modulu o ktorym mowicie i ja stworze swoj które będą korzystac z modułu sms do faktycznego wysyłania wiadomości, proponuje aby w tych modułach już wybierać jakiego serwisu uzywam bo np do pojedynczych wiadomosci ktos moze wolec smscenter a do masowego wysylania np odnosnie faktur smstools.
Mam jeszcze jedno pytanie do ALECa gdzie trzymać zmienne do takich spraw tworzyc sekcje w ui czy w lms.ini? chodzi mi tutaj np o pole nadawcy, noi np sprawy zwiazane z prefiksem krajowym, czy tez loginy i hasla do np smscenter itp
Pozdrawiam
!DSPAM:499dbce8158724380352099!
Michał Gacek pisze:
Ja też pisze kod do wysyłania loginow pppoe z poziomu UI smsem, proponuje aby ujednolicic tego typu sprawy stworzyc backend moduł sms ktory bedzie sie zajmował samym wysyłaniem smsów, opartym o wybor serviceu np smstools lub smscenter.pl, nastepnie stworzenie modulu o ktorym mowicie i ja stworze swoj które będą korzystac z modułu sms do faktycznego wysyłania wiadomości, proponuje aby w tych modułach już wybierać jakiego serwisu uzywam bo np do pojedynczych wiadomosci ktos moze wolec smscenter a do masowego wysylania np odnosnie faktur smstools.
Proponuję w backendzie uwzględnić też obsługę gnokii.
W dniu 19 lutego 2009 21:18 użytkownik Grzegorz Chwesewicz grzegorz.chwesewicz@chilan.com napisał:
Proponuję w backendzie uwzględnić też obsługę gnokii.
nie wiem jak kolega ale ja sie na tym nie znam wiec jezeli masz tez jakies swoje wypociny odnosnie gnokii moznaby bylo jej obsluge oczywiscie dorzucic do backendu
!DSPAM:499dc743170749813612796!
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Michał Gacek pisze:
Ja też pisze kod do wysyłania loginow pppoe z poziomu UI smsem, proponuje aby ujednolicic tego typu sprawy stworzyc backend moduł sms ktory bedzie sie zajmował samym wysyłaniem smsów, opartym o wybor serviceu np smstools lub smscenter.pl, nastepnie stworzenie modulu o ktorym mowicie i ja stworze swoj które będą korzystac z modułu sms do faktycznego wysyłania wiadomości, proponuje aby w tych modułach już wybierać jakiego serwisu uzywam bo np do pojedynczych wiadomosci ktos moze wolec smscenter a do masowego wysylania np odnosnie faktur smstools.
Mam jeszcze jedno pytanie do ALECa gdzie trzymać zmienne do takich spraw tworzyc sekcje w ui czy w lms.ini? chodzi mi tutaj np o pole nadawcy, noi np sprawy zwiazane z prefiksem krajowym, czy tez loginy i hasla do np smscenter itp
polecam uiconfig
Moje tabele do smsów:
mysql> desc sms_incoming; +--------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | createdate | int(11) | NO | | 0 | | | senddate | int(11) | NO | MUL | 0 | | | senderid | int(11) | NO | | 0 | | | sender_phone | varchar(255) | NO | | | | | category | smallint(4) | NO | | 0 | | | status | smallint(4) | NO | | 0 | | | message | varchar(255) | NO | | | | +--------------+--------------+------+-----+---------+----------------+
mysql> desc sms_outgoing; +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | userid | int(11) | NO | | 0 | | | customerid | int(11) | NO | | 0 | | | senderid | int(11) | NO | | 0 | | | message | varchar(255) | NO | | | | | status | smallint(4) | NO | | 0 | | | phone | varchar(255) | NO | | | | | senddate | int(11) | NO | | 0 | | | createdate | int(11) | NO | | 0 | | +------------+--------------+------+-----+---------+----------------+
swoje wypociny postaram się zamieścić w przyszłym tygodniu
- -- pozdrawiam Paweł Rohde Neter Sp. z o.o.
!DSPAM:499dbe95161501327519691!
W dniu 19 lutego 2009 21:18 użytkownik Paweł Rohde pawel@rohde.pl napisał:
polecam uiconfig
swoje wypociny postaram się zamieścić w przyszłym tygodniu
mysle ze mozemy sie zgrać co ty na to? co myślisz o tym backendzie byśmy ustalili jakie rzeczy mają być do niego przekazywane, ty byś się zajął smstools tak jak chciałeś, a ja stroną smscenter? Proponuje aby moduł nazywał sie po prostu sms, a zmienna service w linku określała czy ma byc wysłane za pomocą smstools albo smscenter, oczywiscie twoje wypociny bylyby osobnym modułem a moje osobnym, tak aby zachować czytelność lmsa.
pozdrawiam
!DSPAM:499dc5e2166404380352099!
W dniu 19 lutego 2009 21:49 użytkownik Michał Gacek michal.gacek@gmail.com napisał:
mysle ze mozemy sie zgrać co ty na to? co myślisz o tym backendzie byśmy ustalili jakie rzeczy mają być do niego przekazywane, ty byś się zajął smstools tak jak chciałeś, a ja stroną smscenter? Proponuje aby moduł nazywał sie po prostu sms, a zmienna service w linku określała czy ma byc wysłane za pomocą smstools albo smscenter, oczywiscie twoje wypociny bylyby osobnym modułem a moje osobnym, tak aby zachować czytelność lmsa.
pozdrawiam
a optowałbym jeszcze przy tym aby to backend zajmował się poprawnościa numerów czyli sprawdzał obecność prefiksu 48 i formatował numer na 48xxxxxxxxx
!DSPAM:499dc6bd169391252921014!
Michał Gacek pisze:
W dniu 19 lutego 2009 21:49 użytkownik Michał Gacek michal.gacek@gmail.com napisał:
mysle ze mozemy sie zgrać co ty na to? co myślisz o tym backendzie byśmy ustalili jakie rzeczy mają być do niego przekazywane, ty byś się zajął smstools tak jak chciałeś, a ja stroną smscenter? Proponuje aby moduł nazywał sie po prostu sms, a zmienna service w linku określała czy ma byc wysłane za pomocą smstools albo smscenter, oczywiscie twoje wypociny bylyby osobnym modułem a moje osobnym, tak aby zachować czytelność lmsa.
pozdrawiam
a optowałbym jeszcze przy tym aby to backend zajmował się poprawnościa numerów czyli sprawdzał obecność prefiksu 48 i formatował numer na 48xxxxxxxxx
Na chwilę obecną nie potrzebuję funkcjonalności sms w LMS, tak tyko rzuciłem co warto byłoby zrobić przy okazji dorabiania tej funkcji. Mogę opisać jak widzę to rozwiązanie.
Dodanie do klasy LMS (ew. dodanie odrębnej klasy SMS, co ułatwiłoby w przyszłości przerobienie tego na moduł LMS) metod do obsługi smsów, np. SendSMS, GetSMS, SetSMS, które wpisują do bazy odpowiednie dane jak np. numer, treść, datę dostarczenia.
Backend działałby jako daemon napisany np. w pythonie z możliwością dodawania wtyczek obsługujących operatorów i programy do wysyłania smsów. W ten sposób zachowasz dość duży poziom abstrakcji i łatwo będzie dodać obsługę nowego operatora czy programu smsowego do backendu.
W dniu 19 lutego 2009 22:06 użytkownik Grzegorz Chwesewicz grzegorz.chwesewicz@chilan.com napisał:
Backend działałby jako daemon napisany np. w pythonie z możliwością dodawania wtyczek obsługujących operatorów i programy do wysyłania smsów. W ten sposób zachowasz dość duży poziom abstrakcji i łatwo będzie dodać obsługę nowego operatora czy programu smsowego do backendu.
zdecydowanie nie czuję się na siłach ;). pozatym nie wydaje mi sie aby 3 jezyk obok C daemona i skryptow w Perl był aż tak niezbędny, wprowadziłby tylko dodatkowe zamieszanie
Jeszcze jedna uwaga do Pawła proponuje skoro juz robisz masowe wysyłanie smsów, aby twoj moduł wysyłał smsy pod numery oznaczone w bazie opisem komórka/mobile (to dego celu proponuje urzyć translacji wykorzystywanej w lmsie). Proponuje też stworzyc metody o ktorych mówił grzegorz tak aby je wywolywac juz w odpowiednim serwisie po sukcesywnym nadaniu smsa.
Myśle że na start rozwiazanie w php z serviceami ktore zaproponowałem wystarczy, a ew w przyszlosci mozna to rozwinąć, zdecydowanie optowałbym za unikaniem zmian w LMS.class i robieniem wszystkiego w osobnych modułach.
!DSPAM:499dcc40175315315134984!
Proponuje również przy wywołaniu backendu przekazywać również nazwe moduł ktory go wywołał a pozniej w samym backendzie przy wyrzucaniu błędów wiadomości i tak dalej aby wywoływać spowrotem macierzysty moduł ze zmiennymi restype i response, aby powiadamiac macierzysty moduł o błedach i aby on sam według własnego uznania prezentował je jak chce.
!DSPAM:499df1c3199371989010922!
Moja wizja backendu:
Poniżej moje wypociny, generalnie rozchodzi sie o interfejs backendu, czyli o komunikacje z pozostalymi modułami, tak jak powiedziałem wczesniej dobrze by bylo wybierac typ servicu juz na poziomie modułu, backend powinien zajmowac sie wstepna weryfikacja numeru, oraz sprawdzaniem dlugosci wiadomosci, i zwracac odpowiednie kody błedów do modułu, głebsze dopasowanie numeru powinno nastepowac na poziomie juz danego serviceu bo np w smscenter format jest 48xxxxxxxxx a w gnokii czy innym ustrojstwie moze być +48xxx...
Kody błedu uważam że 0 pownno oznaczac sukces, 1 blad na poziomie juz servicu, a pozostałe wiadomo, mozna je rozszerzyc. Wiem Paweł że robisz "demona" w perlu, ze twoim zamierzeniem jest zakolejkowanie smsa do Outgoing a reszta zajmie sie demon, bardzo dobre podejscie gdy chcemy wysylac masowo, do ilus tam adresatow wiadomosc lub z gory zaplanowane "mailingi". Pewna niedogodnosc pojawia sie w momencie gdy np chcemy skorzystac z wyslania smsa z poziomu ui do konkretnego klienta, miło wtedy jest odrazu dostac info ze wszystko poszlo ok (ew pozniej sprawdzic sobie w wysłanych ze np wiadomosc dostarczono). Natomiast przy rozwiazaniu daemon no to taki sms trafilby do kolejki, nie daj Boze w momencie gdy robiony jest duzy mailing, noi okazuje sie ze wiadomosc zostanie wyslana po godzinie czy ilus tam. Mysle ze dobrze by bylo zrobic w demonie jakas priorytetyzacje, badz po prostu uzywac do zastosowan instant (takich jak np wysylanie hasla do klienta na jego zadanie) backendu napisanego w php (mniej wiecej cos na wzor tego ponizej, właściwie to powinienem to przerobic na klase), ktory bedzie wysyłał smsy od razu i dodawał adekwatny wpis do Wysłanych, bez przechodzenia przez outgoing...
Powinnismy sie jeszcze dogadac co do tabel i statusów, i nie wiem czy myslales nad kwestia potwierdzeń otrzymania, ale to juz na priv
<?php
function smsResult($id, $extramsg = "") { $val = array ( "Message sent succesfully", "Service specific error: $extramsg", "Incorrect number", "Message too long or no message at all" );
$ret = array ( "resid" => "$id", "resval" => "$val[$id]" );
return $ret; }
function validateNumber($number, $prefix) { return (strlen($number) > 16 || strlen($number) < 4); }
function validateMessage($message) { return (strlen($message) > 159 || strlen($message) == 0); }
function sms($service, $number, $message, $from) { switch($service) { case 'smscenter': $type='dynamic'; //okresla typ konta jakie posiadamy w smscenter, w przypadku wersji za 6 gr dodaje podpis do tresci smsa, doceolowa zmienna w uiconfig $username='xxx'; // username w smscenter $pass='xxx'; // username w smscenter $prefix='48'; //prefix krajowy sprawdza obecnosc prefixu w numerze kontaktu i w razie potrzeby dodaje go aby zachowac format smscenter 48xxxxxxxxx $number = ereg_replace("[^0-9]", "", $number); if (validateNumber($number, $prefix)) return smsResult(2); $number = (substr_compare($number, $prefix, 0, 2)) ? $prefix . $number : $number; $message = ($type == 'static') ? $message . "\n\n" . $from : $message;
if (validateMessage($message)) { return smsResult(3); } else { $args = array ( "user" => "$username", "pass" => "$pass", "type" => "sms", "number" => "$number", "text" => "$message", "from" => "$from" ); $encodedargs = array(); foreach (array_keys($args) as $thiskey) array_push($encodedargs, urlencode($thiskey) ."=". urlencode($args[$thiskey])); $encodedargs = implode("&", $encodedargs);
$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://api.statsms.net/send.php"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, "$encodedargs"); curl_setopt($curl, CURLOPT_TIMEOUT, 10); $page = curl_exec($curl); if(curl_error($curl)) return smsResult(1, 'Error occured during communication with smscenter. ' . curl_error($curl)); $info = curl_getinfo($curl); if($info['http_code'] != '200') return smsResult(1, 'Error occured during communication with smscenter. Http code: ' . $info['http_code']); curl_close($curl);
$smsc = explode(', ', $page); $smsc_result = array(); foreach ($smsc as $element) { $tmp = explode(': ', $element); array_push($smsc_result, $tmp[1]); }
switch ($smsc_result[0]) { case '002': return smsResult(0); case '009': return smsResult(1, 'Smscenter error 009, GSM network error (probably wrong prefix number)'); case '012': return smsResult(1, 'Smscenter error 012, System error please contact smscenter administrator!'); case '201': return smsResult(1, 'Smscenter error 201, System error please contact smscenter administrator!'); case '202': return smsResult(1, 'Smscenter error 202, Unsufficient funds on account to send this text'); case '204': return smsResult(1, 'Smscenter error 204, Account blocked'); default: return smsResult(1, 'Smscenter error '. $smsc_result[0] . '. Please contact smscenter administrator'); }
} break; } }
?>
!DSPAM:49a0c942144381910919020!
uczestnicy (4)
-
Grzegorz Chwesewicz
-
Jarosław Czarniak
-
Michał Gacek
-
Paweł Rohde