Pregunta

¿Cómo envío SMS directamente a través de SMPP?Mi proveedor proporciona una interfaz SMPP para enviar SMS, ¿cómo lo conecto?¿Existen bibliotecas o ejemplos que puedan enseñarme sobre el uso de SMPP para realizar envíos?¿Quizás usando PHP?o C#?

Otros consejos

He utilizado una biblioteca de cliente de DevShock durante unos años, pero la compañía parece haber desaparecido de la vista.

Una búsqueda rápida en Google se presentó éste sin embargo:

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

Parece bastante sencillo, y viene con C # y VB.Net ejemplos, así como algún tipo de documentación decente.

Espero que ayude.

Creo que la mejor elección es lib jsmpp. Se tiene buenos ejemplos y muchas cosa bajo nivel sucede entre bastidores y que pueda centrarse en su lógica de negocio.

jsmpp sitio de la casa

Yo uso un Kannel de SMPP, conecte a un servidor kannel smpp: enlace .

Esta es mi 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"

Enviar SMS:

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

Puede utilizar Net :: SMPP si está familiarizado con Perl o Jasmin (construido en Python ). Esos son bastante probado y utilizado.

Yo sugeriría Kannel para SMPP pero un par de preguntas.

¿Quién es tu agregador? Deben ofrecer un poco de ayuda para esto.

OpenMarket hace SMPP, así como HTTP con múltiples idiomas SDK

El componente Devshock fue genial...¿Divulgaron la fuente, supongo, en algún momento?

Creo que todavía tengo eso.

pero escribir tu propia biblioteca smpp no ​​es tan difícil...

La especificación SMPP 3.4 es bastante sencilla.

Básicamente estás haciendo 3 cosas:

  • Administrar conexiones de socket - .NET Stack lo hace muy fácil y eficiente
  • Envío de PDU formateada correctamente
  • decodificación de bytes recibidos en PDU

Ola, puedes enviarme un correo si aún necesitas esto.

Salud.

EDITAR Algunos proveedores, como el que yo uso (High Tech InfoSystems) también le proporcionan una puerta de enlace http a través de la cual puede publicar su tráfico

Puede buscarlo como alternativa al SMPP.

Una desventaja que he visto con SMPP es que las desconexiones frecuentes son que la conexión de red es inestable.

Las opciones de puerta de enlace HTTP no sufren esto y también son igual de rápidas.

Puede utilizar SMPPCli que es una línea de comandos SMS SMPP remitente. Puede descargarlo desde http://www.kaplansoft.com/download.html

Aquí está el código simple ejemplo usando el protocolo SMPP en C #.

Por la DLL ardan estudio manera tiene alguna cuestión sobre la codificación y decodificación de datos.

TON y NPI se da estática en ardan estudio dll, así que cambiamos a continuación, hemos utilizado el código de otro modo funciona pero no se puede utilizar un conjunto diferente carbón.

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
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top