Domanda

Come faccio a inviare SMS direttamente tramite SMPP? Il mio provider fornisce un'interfaccia SMPP per inviare SMS, come faccio a collegare ad esso? Ci sono biblioteche o esempi che mi può educare sull'utilizzo SMPP per inviare? Forse con PHP? o C #?

Altri suggerimenti

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

Un rapido Google alzato questo però:

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

sembra abbastanza semplice, e viene fornito con C # e VB.Net esempi così come alcuni documentazione decente.

La speranza che aiuta.

Credo che la scelta migliore è jsmpp lib. E hanno buoni esempi e molte cose di basso livello accade dietro le quinte e si può concentrarsi sulla logica di business.

jsmpp sito principale

Io uso un Kannel per SMPP, connettersi a un server kannel SMPP: link .

Questa è la mia 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"

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

Vorrei suggerire Kannel per SMPP, ma un paio di domande.

Chi è il tuo aggregatore? Essi dovrebbero offrire una certa assistenza per questo.

OpenMarket fa SMPP e HTTP con più lingue SDK

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

Credo che ho ancora.

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

SMPP 3.4 spec è abbastanza semplice.

Si sono fondamentalmente facendo 3 cose:

  • connessioni socket gestione - pila .net rende quel molto facile e efficiente
  • invio formattato correttamente PDU
  • decodifica byte ricevuti in PDU

Ola, è possibile mi mandi una mail se hai ancora bisogno di questo.

Saluti.

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

Si può chiedere che come alternativa a SMPP.

Un difetto che ho visto sperimentato con SMPP, è disconnessioni frequenti è il tuo collegamento di rete è traballante.

Le opzioni di gateway HTTP non soffre di questo ed è altrettanto veloce.

È possibile utilizzare SMPPCli che è una riga di comando SMPP SMS mittente. È possibile scaricarlo da http://www.kaplansoft.com/download.html

Ecco il semplice codice di esempio utilizzando il protocollo SMPP in C #.

Per la dll modo Ardan Studio ha qualche problema sulla codifica dei dati e la decodifica.

TON e NPI è dato statico in Ardan studio di dll così abbiamo cambiato poi abbiamo usato il codice altrimenti funziona, ma non è possibile utilizzare diversi set char.

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
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top