Pergunta
Como faço para enviar SMS diretamente via SMPP? Meu provedor fornece uma interface de SMPP para enviar SMS, como faço para conectá-lo a ele? Existem quaisquer bibliotecas ou exemplos que podem me educar sobre o uso SMPP para enviar? Talvez usando PHP? ou C #?
Solução
Há o Logica SMPP projeto, escrito em Java, que pode educá-lo sobre a matéria. Fora isso, há uma lista de projetos na página SMPP Wikipedia que poderiam preencher um propósito similar.
Outras dicas
Eu usei uma biblioteca cliente de DevShock por alguns anos, mas a empresa parece ter desaparecido de vista.
Uma rápida Google transformou-se este embora:
http://www.inetlab.ru/Products/ALT.SMS .SmppClient.aspx .
Parece bastante simples, e vem com C # e VB.Net exemplos, bem como alguma documentação decente.
Espero que ajude.
Eu acho que a melhor escolha é jsmpp lib. Ele tem bons exemplos e muitas coisas baixo nível acontecem nos bastidores e você pode se concentrar em sua lógica de negócios.
Eu uso um Kannel para SMPP, kannel conectar a um servidor SMPP: link .
Este é o meu 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"
Você pode usar Net :: SMPP se você estiver familiarizado com o Perl ou Jasmin (construído em Python ). Aqueles são bastante testado e utilizado.
Eu sugeriria Kannel para SMPP, mas um par de perguntas.
Quem é o seu agregador? Eles devem oferecer alguma ajuda para isso.
Eu sei OpenMarket faz SMPP bem HTTP como com vários idiomas SDK
componente Devshock foi legal ... eles lançaram a fonte eu acho que em algum momento?
Eu acredito que eu ainda tenho isso.
mas escrever seu próprio lib SMPP não é tão difícil ...
SMPP 3.4 especificação é bastante para a frente.
Você está fazendo basicamente 3 coisas:
- gerenciamento de conexões de soquete - .net pilha faz isso muito fácil e eficiente
- envio formatado corretamente PDU
- decodificar bytes recebidos em PDU
Ola, você pode soltar-me um e-mail se você ainda precisa disso.
Felicidades.
EDIT Alguns Provider, como o uso i (High Tech InfoSystems) também fornecer-lhe uma http portal através do qual você pode enviar seu tráfego
Você pode procurar que como uma alternativa para SMPP.
Uma desvantagem que tenho visto experiente com SMPP, é desconexões freqüentes é a sua conexão de rede é instável.
As opções de HTTP gateway não sofrem desta e é tão rápido também.
Você pode usar SMPPCli que é uma linha de comando SMPP SMS remetente. Você pode baixá-lo http://www.kaplansoft.com/download.html
Aqui está o código exemplo simples usando o protocolo SMPP em C #.
Pela dll maneira estúdio Ardan tem alguma questão sobre a codificação de dados e decodificação.
TON e NPI é dado estático no dll estúdio Ardan por isso, mudou-lo, então usamos este código de outra forma ele funciona, mas você não pode usar um conjunto diferente de 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
}