2010-03-12 4 views
5

Wie sende ich SMS direkt über SMPP? Mein Provider bietet eine SMPP-Schnittstelle zum Senden von SMS, wie verbinde ich sie damit? Gibt es Bibliotheken oder Beispiele, die mich bei der Verwendung von SMPP zum Senden aufklären können? Vielleicht mit PHP? oder C#?SMS über SMPP senden

Antwort

4

Es gibt die Logica SMPP project, in Java geschrieben, die Sie über die Angelegenheit aufklären könnte. Abgesehen davon gibt es eine Liste von Projekten auf der SMPP Wikipedia page, die einen ähnlichen Zweck erfüllen könnte.

2

Ich habe eine Client-Bibliothek von DevShock für ein paar Jahre verwendet, aber die Firma scheint aus der Sicht verschwunden zu sein.

Eine schnelle Google drehte diese eine obwohl up:

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

Scheint einfach genug, und kommt sowohl mit C# und VB.Net Beispiele als auch einige anständige Dokumentation.

Hoffe, dass hilft.

0

Ich würde vorschlagen, Kannel für SMPP aber ein paar Fragen.

Wer ist Ihr Aggregator? Sie sollten dafür etwas Hilfe anbieten.

Ich weiß OpenMarket tut SMPP sowie HTTP mit einer mehr SDK Sprachen

2

Ich denke, dass die beste Wahl jsmpp lib ist. Es hat gute Beispiele und viele Low-Level-Dinge passieren hinter den Kulissen und Sie können sich auf Ihre Geschäftslogik konzentrieren.

jsmpp home site

0

Devshock Komponente war cool ... sie die Quelle freigegeben ich irgendwann erraten?

Ich glaube, ich habe noch das. nicht so schwer ...

SMPP 3.4 Spezifikation ist recht geradlinig

aber ist Ihren eigenen smpp lib zu schreiben.

Sie sind im Grunde drei Dinge zu tun:

  • Verwaltung Socket-Verbindungen - .net-Stack macht, dass es sehr einfach und effizient
  • richtig formatiert PDU sendet
  • Decodierung empfangenen Bytes in PDU

Ola, du kannst mir eine Mail schicken, wenn du das noch brauchst.

Prost.

EDIT Einige Provider, wie die, die ich auch Sie verwenden (High Tech Infosystems) Gateway eine http bieten, über die Sie Ihren Traffic

hinterlassen Sie, dass als Alternative zu SMPP suchen kann.

Ein Nachteil, den ich mit SMPP erlebt habe, ist häufige Verbindungsunterbrechungen ist Ihre Netzwerkverbindung ist wackelig.

Die HTTP-Gateway-Optionen leiden nicht darunter und sind genauso schnell.

1

Ich benutze ein Kannel für SMPP, verbinden Kanel zu einem SMpp-Server: link.

Das ist mein 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" 

SMS senden:

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

können Sie Net::SMPP verwenden, wenn Sie mit Perl vertraut sind oder Jasmin (gebaut in Python). Diese sind ziemlich getestet und verwendet.

0

Hier ist der einfache Beispielcode mit smpp Protokoll in C#.

Übrigens hat ardan studio dll ein Problem mit Datencodierung und Decodierung.

TON und NPİ wird in ardan studio dll static gegeben, also haben wir es geändert, dann haben wir diesen Code benutzt, sonst funktioniert es, aber Sie können keinen anderen Zeichensatz verwenden.

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 
}