2010-03-12 22 views
5

Jak wysłać wiadomość SMS bezpośrednio przez SMPP? Mój dostawca zapewnia interfejs SMPP do wysyłania wiadomości SMS, jak mogę go połączyć? Czy są jakieś biblioteki lub przykłady, które mogą nauczyć mnie używania SMPP do wysyłania? Być może używając PHP? lub C#?wyślij SMS przez SMPP

Odpowiedz

2

Używam biblioteki klienta od DevShock od kilku lat, ale wydaje się, że firma zniknęła z widoku.

Szybkie Google pojawił się ten jeden choć:

http://www.inetlab.ru/Products/ALT.SMS.SmppClient.aspx.

Wydaje się być wystarczająco proste i zawiera zarówno przykłady C#, VB.Net, jak i przyzwoitą dokumentację.

Nadzieję, że pomaga.

0

Sugerowałbym Kannel dla SMPP, ale kilka pytań.

Kim jest Twój Agregator? Powinny w tym pomóc.

wiem OpenMarket robi SMPP oraz HTTP z wielu języków SDK

2

Myślę, że najlepszym wyborem jest jsmpp lib. Ma dobre przykłady i wiele rzeczy na niskim poziomie dzieje się za kulisami i możesz skupić się na swojej logice biznesowej.

jsmpp home site

0

komponent Devshock było cool ... wydali źródło Chyba w pewnym momencie?

Wierzę, że nadal mam to.

ale pisanie własnego SMPP lib nie jest takie trudne ...

SMPP 3,4 specyfikacja jest dość prosta.

Jesteś w zasadzie robi 3 rzeczy:

  • zarządzania połączeniami Socket - .net stos sprawia, że ​​bardzo łatwo i efektywne
  • wysyłaniem prawidłowo sformatowany PDU
  • dekodowania odebranych bajtów do PDU

Ola, możesz do mnie wysłać wiadomość, jeśli nadal potrzebujesz.

Pozdrawiam.

EDIT Niektóre Provider, podobnie jak jeden używam (High Tech Infosystems) również dostarczyć bramy http przez które zamieścić swój ruch

Możesz szukać, że jako alternatywę dla SMPP.

Jedną wadą, jaką widziałem z usługą SMPP, jest częste rozłączanie, ponieważ połączenie sieciowe jest niestabilne.

Opcje bramy HTTP nie mają tego problemu i są równie szybkie.

1

Używam Kannela do SMPP, podłącz kannel do serwera SMPP: link.

To mój kannel.conf:

group = core 
admin-port = 13000 
smsbox-port = 13001 
admin-password = bar 
status-password = foo 
log-file = "/var/log/kannel/bearerbox.log" 
log-level = 0 
box-deny-ip = "*.*.*.*" 
box-allow-ip = "127.0.0.1" 
access-log = "/var/log/kannel/smsaccess.log" 

#SMSC CONNECTION 
group=smsc 
smsc=smpp 
smsc-id=ID1 
host=130.1.1.50 
port=5016 
transceiver-mode = 1 
source-addr-ton = 1 
source-addr-autodetect = 0 
dest-addr-npi = 1 
dest-addr-ton = 1 
smsc-username = "user" 
smsc-password= "pass" 
system-type= "system" 

#SMSBOX SETUP 
group = smsbox 
bearerbox-host = 127.0.0.1 
bearerbox-port = 13001 
sendsms-port = 13013 
log-file = "/var/log/kannel/smsbox.log" 
log-level = 0 
access-log = "/var/log/kannel/smsaccess.log" 

#SEND-SMS USERS 
group = sendsms-user 
username = user 
password = pass 

#SERVICES 
group = sms-service 
keyword = default 
text = "Su mensaje ha sido procesado" 
concatenation = true 
catch-all = true 
accept-x-kannel-headers = true 
get-url = "http://localhost/kannel/receivesms.php?sender=%p&text=%b" 

Wyślij SMS:

curl "http://localhost:13013/cgi-bin/sendsms?user=xxxxxx&pass=yyyyy&to=56976808016&text=tes" 
1

Można użyć Net::SMPP jeśli jesteś zaznajomiony z Perl lub Jasmin (zbudowany w Python). Te są bardzo przetestowane i użyte.

0

Oto prosty przykładowy kod wykorzystujący protokół smpp w języku C#.

Przy okazji ardan studio dll ma pewne problemy z kodowaniem i dekodowaniem danych.

TON i NPİ podano statycznie w dardan studio dll, więc zmieniliśmy to, użyliśmy tego kodu, w przeciwnym razie działa, ale nie możesz użyć innego zestawu znaków.

using ArdanStudios.Common.SmppClient; 
using ArdanStudios.Common.SmppClient.App; 

public class SMPPClientService 
{ 
    public static readonly object CounterLock = new object(); 
    private static bool isConnected = false; 
    private ESMEManager SMPPConnectClient() 
    { 
     var smppServerPort = Library.GetAppSetting(SMPP_Server_Port).Split(';'); 
     string server = "xxx.xx.xx.xxx"; 
     short port = 6101; 
     string shortLongCode = "MESSAGETİTLE"; 
     string systemId = "USername"; 
     string password = "password"; 
     DataCodings dataCoding = DataCodings.Latin1;  
     ESMEManager connectionManager = new ESMEManager("EricssonTest", shortLongCode, new ESMEManager.CONNECTION_EVENT_HANDLER(ConnectionEventHandler), null, null, null, null, new ESMEManager.LOG_EVENT_HANDLER(LogEventHandler), null); 
     connectionManager.AddConnections(1, ConnectionModes.Transmitter, server, port, systemId, password, "Transmitter", dataCoding); 
     return connectionManager; 
    } 
    private static void LogEventHandler(LogEventNotificationTypes logEventNotificationType, string logKey, string shortLongCode, string message) 
    {      
    } 
    private static void ConnectionEventHandler(string logKey, ConnectionEventTypes connectionEventType, string message) 
    { 
     if (ConnectionEventTypes.Connected == connectionEventType) 
     { 
      lock (CounterLock) 
      { 
       isConnected = true; 
      } 
     } 
    } 
    private string Msisdn(string receiver) 
    { 
     var tmp = receiver.Replace("/", "") 
      .Replace(" ", "") 
      .Replace("-", ""); 

     if (tmp.Length == 10) 
      return 90 + receiver; 
     if (tmp.Length == 11 && tmp[0] == '0') 
      return 9 + tmp; 
     return tmp; 
    } 
    public int SMPPSendMessage(string messageText, string phoneNumber) 
    { 
     var result = 0; 
     var pql = new PSmsSendLogs(); 
     try 
     { 
      using (var connectionManager = SMPPConnectClient()) 
      { 
       phoneNumber = Msisdn(phoneNumber); 
       DataCodings submitDataCoding = DataCodings.Latin1; 
       DataCodings encodeDataCoding = DataCodings.Latin1; 
       List<SubmitSm> submitSm = null; 
       List<SubmitSmResp> submitSmResp = null; 
       while (true) 
       { 
        Thread.Sleep(1000); 
        if (isConnected) 
        { 
*// put code here to wait until connection is being establish.İt works Async so it coulnt be connected when we called send method* 
         break; 
        } 
       } 
       result = connectionManager.SendMessageLarge(phoneNumber, null, Ton.Alphanumeric, Npi.Unknown, submitDataCoding, encodeDataCoding, messageText, out submitSm, out submitSmResp);  
      } 
     } 
     catch (Exception ex) 
     { 
      result = 0; 
     } 
     return result; 
    } 
    #endregion 
}