2010-03-12 57 views
5

Come si invia SMS direttamente tramite SMPP? Il mio provider fornisce un'interfaccia SMPP per l'invio di SMS, come posso collegarlo ad esso? Esistono librerie o esempi che possono educarmi all'uso di SMPP da inviare? Forse usando PHP? o C#?invia SMS tramite SMPP

risposta

2

Ho usato una libreria client da DevShock per alcuni anni, ma la società sembra essere scomparsa dalla vista.

Un rapido Google alzato questo però:

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

Sembra abbastanza semplice e viene fornito con entrambi gli esempi C# e VB.Net oltre a una discreta documentazione.

Spero che questo aiuti.

0

Vorrei suggerire Kannel per SMPP ma un paio di domande.

Chi è il tuo aggregatore? Dovrebbero offrire assistenza per questo.

So OpenMarket fa SMPP e HTTP con più lingue SDK

2

penso che la scelta migliore è jsmpp lib. Ha buoni esempi e molte cose di basso livello accadono dietro le quinte e puoi concentrarti sulla tua logica di business.

jsmpp home site

0

componente Devshock era fresco ... hanno pubblicato la fonte immagino ad un certo punto?

Credo di averlo ancora.

ma scrivere il proprio lib SMPP non è così difficile ...

SMPP 3.4 spec è abbastanza semplice.

Si sono fondamentalmente facendo 3 cose:

  • che gestiscono le connessioni socket - pila .net rende che molto facile e efficiente
  • invio di PDU formattato correttamente
  • decodifica byte ricevuti in PDU

Ola, puoi mandarmi una mail se hai ancora bisogno di questo.

Cheers.

EDIT Alcuni provider, come quella che uso (InfoSystems High Tech) anche fornire un gateway HTTP attraverso il quale si può inviare il traffico

Si può chiedere che come alternativa a SMPP.

Uno svantaggio che ho visto con esperienza con SMPP, è disconnessioni frequenti è la connessione di rete è traballante.

Le opzioni del gateway HTTP non ne risentono e sono altrettanto veloci.

1

Uso un Kannel per SMPP, connetto kannel a un server smpp: link.

Questo è il mio 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" 

Invia SMS:

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

È possibile utilizzare Net::SMPP se si ha familiarità con il Perl o Jasmin (costruito nel Python). Quelli sono abbastanza testati e usati.

0

Ecco il codice di esempio semplice che utilizza il protocollo smpp in C#.

A proposito, ardan studio dll ha qualche problema di codifica e decodifica dei dati.

TON e NPİ vengono forniti static in dll in studio ardan, quindi l'abbiamo modificato, quindi abbiamo utilizzato questo codice altrimenti funziona, ma non è possibile utilizzare un set di caratteri diverso.

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 
}