2009-08-29 14 views
7

Ich weiß, dass es viele Websites von Drittanbietern gibt, um Massen-SMS über das Internet zu verschicken, aber wenn ich selbst eines erstellen möchte, wie würde ich dann vorgehen? Ich weiß, wie man mit meinem Handy ein SMS-Gateway erstellt, das sehr langsam ist. Gibt es eine andere Möglichkeit, ein Internet-SMS-Gateway zu erstellen?Wie erstelle ich ein SMS-Gateway?

Antwort

2

Hmm ... Entsprechend Ihrer Anforderung benötigen Sie ein GSM-Modem. Damit können Sie SMS-Nachrichten mit Standard-AT-Befehlen senden. Dann müssen Sie einen HTTP-Server entwickeln, der die Anforderung empfängt, verarbeitet und die AT-Befehle an das GSM-Modem sendet.

3

Sie müssen mit einem SMSC mit einem SMPP Protokoll sprechen. Sie können auch verwenden Kannel, bietet es nette Funktionen, um mit verschiedenen Arten von SMSC einschließlich GSM-Modems sowie send-sms HTTP-Dienst und mehr zu arbeiten.

6

Ich entwarf etwas ähnliches (obwohl für viel weniger Textnachrichten) für meinen Arbeitgeber. Ein Linux-Server ist mit einem Bluetooth-USB-Dongle zum Empfang von Daten von eingebetteten Sensorgeräten im Labor und einem Siemens TC35 GSM-Modem über eine serielle RS232-Verbindung verbunden. Der Server kann Nachrichten an ausgewählte Mitarbeiter senden, wenn die Sensoren feststellen, dass ein Problem vorliegt, das auch von einem C++ - Programm behandelt wird. Darüber hinaus gibt es eine J2EE-App, mit der Mitarbeiter Nachrichten über eine Webseite eingeben können, die dann als Textnachrichten an die von ihnen ausgewählten Mitarbeiter gesendet werden. Die J2EE-App speichert die Nachrichten in einer Datenbank, die dann vom C++ - Programm gesammelt und mit den Befehlen AT über den TC35 gesendet werden. Dies geschieht auf diese Weise, so dass Sensorproblemmeldungen immer Priorität haben.

Programmierung weise war es nichts besonderes, wie AT Befehle sind einfach zu verstehen. Stellen Sie nur sicher, dass Ihre Programmierung sicher ist, so dass sie nicht von einem Spammer entführt werden kann und dass sich das Modem in einem Raum mit guter GSM/3G-Abdeckung befindet und sich nicht in einem Keller befindet.

Oh, und es ist auch eine gute Idee, Ihr Programm fragen Sie das GSM-Modem für seine Signalstärke und andere Basisstation Informationen in regelmäßigen Abständen und speichern Sie diese in einer speziellen Datenbanktabelle. Dadurch können Sie Probleme mit Ihrem Mobilfunkanbieter erkennen und bei Bedarf zu einem anderen Anbieter wechseln. Ich habe diese Informationen verwendet, um festzustellen, dass die Basisstation, die ich benutzte, offline zu gehen schien oder ziemlich häufig technische Probleme hatte, was dazu führte, dass der Datendurchsatz meiner Modems zu einem Rinnsal wurde.

Good Luck

3

es kann auf zwei Arten 1) GSM-Modem 2) http (Service Provider) (Schneller als Modem)

Ich habe http://www.ozekisms.com/ Gateway Service

C# -Code verwendet getan werden um HTTP-Anfrage zu senden und wie Benutzername und Passwort IP-Adresse und Port hinzufügen.

Verweisen Sie auf diesen Code, der Ihnen hoffentlich hilft.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using SMSClient; 

namespace SMSDemoConsole 
{ 
    class Program 
    { 
     private static void WriteEvent(String myEvent) 
     { 
      Console.WriteLine(myEvent); 
     } 

     #region Events 
     static void mySMSClient_OnMessageReceived(object sender, DeliveryEventArgs e) 
     { 
      WriteEvent(DateTime.Now.ToString() + " " + "Message received. Sender address: " + e.Senderaddress + " Message text: " + e.Messagedata + "\r\n"); 
     } 

     static void mySMSClient_OnMessageDeliveryError(object sender, DeliveryErrorEventArgs e) 
     { 
      WriteEvent(DateTime.Now.ToString() + " " + "Message could not be delivered. ID: " + e.Messageid + " Error message: " + e.ErrorMessage + "\r\n"); 
     } 

     static void mySMSClient_OnMessageDeliveredToHandset(object sender, DeliveryEventArgs e) 
     { 
      WriteEvent(DateTime.Now.ToString() + " " + "Message delivered to handset. ID: " + e.Messageid + "\r\n"); 
     } 

     static void mySMSClient_OnMessageDeliveredToNetwork(object sender, DeliveryEventArgs e) 
     { 
      WriteEvent(DateTime.Now.ToString() + " " + "Message delivered to network. ID: " + e.Messageid + "\r\n"); 
     } 

     static void mySMSClient_OnMessageAcceptedForDelivery(object sender, DeliveryEventArgs e) 
     { 
      WriteEvent(DateTime.Now.ToString() + " " + "Message accepted for delivery. ID: " + e.Messageid + "\r\n"); 
     } 

     static void mySMSClient_OnClientConnectionError(object sender, ErrorEventArgs e) 
     { 
      WriteEvent(DateTime.Now.ToString() + " " + e.ErrorMessage + "\r\n"); 
     } 

     static void mySMSClient_OnClientDisconnected(object sender, EventArgs e) 
     { 
      WriteEvent(DateTime.Now.ToString() + " Disconnected from the SMS gateway " + "\r\n"); 
     } 

     static void mySMSClient_OnClientConnected(object sender, EventArgs e) 
     { 
      WriteEvent(DateTime.Now.ToString() + " Successfully connected to the SMS gateway " + "\r\n"); 
     } 
     #endregion 

     static void Main(string[] args) 
     { 
      ozSMSClient mySMSClient = new ozSMSClient(); 
      mySMSClient.OnClientConnected += new SimpleEventHandler(mySMSClient_OnClientConnected); 
      mySMSClient.OnClientDisconnected += new SimpleEventHandler(mySMSClient_OnClientDisconnected); 
      mySMSClient.OnClientConnectionError += new ErrorEventHandler(mySMSClient_OnClientConnectionError); 
      mySMSClient.OnMessageAcceptedForDelivery += new DeliveryEventHandler(mySMSClient_OnMessageAcceptedForDelivery); 
      mySMSClient.OnMessageDeliveredToNetwork += new DeliveryEventHandler(mySMSClient_OnMessageDeliveredToNetwork); 
      mySMSClient.OnMessageDeliveredToHandset += new DeliveryEventHandler(mySMSClient_OnMessageDeliveredToHandset); 
      mySMSClient.OnMessageDeliveryError += new DeliveryErrorEventHandler(mySMSClient_OnMessageDeliveryError); 
      mySMSClient.OnMessageReceived += new DeliveryEventHandler(mySMSClient_OnMessageReceived); 

      mySMSClient.Username = "admin"; 
      mySMSClient.Password = "abc123"; 
      mySMSClient.Host = "127.0.0.1"; 
      mySMSClient.Port = 9500; 

      mySMSClient.Connected = true; 

      mySMSClient.sendMessage("+44987654", "TEST", "vp=" + DateTime.Now + "&ttt=werwerwe rewwe34232 1"); 


      Console.ReadKey(); 
      mySMSClient.Connected = false; 
     } 
    } 
} 

Danke.

Verwandte Themen