문제

SMPP를 통해 SMS를 직접 보내는 방법은 무엇입니까? 내 공급자는 SMS를 보내기 위해 SMPP 인터페이스를 제공합니다. 어떻게 연결합니까? SMPP를 사용하여 보낼 수있는 도서관이나 예제가 있습니까? 아마도 PHP를 사용합니까? 또는 C#?

도움이 되었습니까?

해결책

거기 있습니다 Logica SMPP 프로젝트, Java로 작성된 것은 그 문제에 대해 당신을 교육시킬 수 있습니다. 그 외에는 프로젝트 목록이 있습니다. SMPP Wikipedia 페이지 비슷한 목적을 채울 수 있습니다.

다른 팁

몇 년 동안 DevShock의 클라이언트 라이브러리를 사용했지만 회사는 시야에서 사라진 것 같습니다.

빠른 Google 은이 작업을 시작했습니다.

http://www.inetlab.ru/products/alt.sms.smppclient.aspx.

직접적으로 보이며 C# 및 VB.NET 예제와 일부 괜찮은 문서가 모두 제공됩니다.

도움이되기를 바랍니다.

최고의 선택은 JSMPP LIB라고 생각합니다. 좋은 예제가 있으며 많은 수준의 낮은 수준이 무대 뒤에서 발생하며 비즈니스 논리에 집중할 수 있습니다.

JSMPP 홈 사이트

SMPP 용 Kannel을 사용하고 Kannel을 SMPP 서버에 연결합니다. 링크.

이것은 내 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"

문자를 보내다:

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

당신이 사용할 수있는 net :: smpp 당신이 익숙하다면 또는 재스민 향수 (내장 파이썬). 그것들은 꽤 테스트되고 사용됩니다.

내가 제안 할게 kannel SMPP의 경우에는 몇 가지 질문이 있습니다.

당신의 집계자는 누구입니까? 그들은 이것에 대한 도움을 제공해야합니다.

알아요 오픈 마켓 여러 SDK 언어로 SMPP 및 HTTP를 수행합니다.

DevShock 구성 요소는 멋졌습니다 ... 그들은 어느 시점에서 내가 생각하는 소스를 공개 했습니까?

나는 아직도 그것을 가지고 있다고 믿는다.

그러나 자신의 SMPP Lib을 쓰는 것은 그리 어렵지 않습니다 ...

SMPP 3.4 사양은 상당히 간단합니다.

당신은 기본적으로 세 가지를하고 있습니다.

  • 소켓 연결 관리 - .NET 스택은 매우 쉽고 효율적입니다.
  • PDU를 올바르게 형식으로 전송합니다
  • 수신 된 바이트를 PDU로 디코딩합니다

Ola, 아직 필요하다면 저에게 메일을 떨어 뜨릴 수 있습니다.

건배.

내가 사용하는 것과 같은 일부 제공 업체 (High Tech Infosystems)와 같은 일부 제공자 편집 HTTP 게이트웨이를 제공하여 트래픽을 게시 할 수 있습니다.

SMPP의 대안으로 그것을 찾을 수 있습니다.

내가 SMPP로 경험 한 단점 중 하나는 자주 연결이 끊긴다는 것입니다. 네트워크 연결이 흔들리는 것입니다.

HTTP 게이트웨이 옵션은 이것으로 어려움을 겪지 않으며도 빠릅니다.

명령 줄 SMPP SMS 발신자 인 SMPPCLI를 사용할 수 있습니다. 당신은 그것을 다운로드 할 수 있습니다 http://www.kaplansoft.com/download.html

다음은 C#의 SMPP 프로토콜을 사용한 간단한 예제 코드입니다.

그건 그렇고 Ardan Studio DLL은 데이터 인코딩 및 디코딩에 대한 문제가 있습니다.

Ton과 NPİ는 Ardan Studio DLL에서 정적으로 제공되므로 변경 한 다음이 코드를 사용하여 작동하지 않지만 다른 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
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top