Java'da SMS nasıl gönderilir


133

Java uygulamasından sms göndermenin ve almanın olası yolları nelerdir?

Nasıl?

Yanıtlar:




10

Java'da gördüğüm en iyi SMS API JSMPP'dir. Güçlü, kullanımı kolay ve kurumsal düzeyde bir uygulama için kendim kullandım (günde 20.000'den fazla SMS mesajı gönderiyorum).

Bu API, mevcut SMPP API'nin ayrıntı düzeyini azaltmak için oluşturuldu. Otomatik olarak bağlantı istek-yanıtı sorgulama gibi düşük seviyeli protokol iletişiminin karmaşıklığını gizlediği için kullanımı çok basit ve kolaydır.

Ozeki gibi diğer bazı API'leri denedim, ancak bunların çoğu ya ticari ya da iş hacminde sınırlamalar var (örneğin, bir saniyede 3'ten fazla SMS mesajı gönderemezsiniz).


10

SMSLib adında bir API var, gerçekten harika. http://smslib.org/

Artık size API'lerini kullanarak bu hizmeti verebilecek birçok Saas sağlayıcınız var

Ör: mailchimp, esendex, Twilio, ...


9

Bunu bir GSM Modem ve Java Communications API ile Yapabilirsiniz [Denendi ve Test Edildi]

  1. Öncelikle Java Comm Api'yi Ayarlamanız Gerekiyor

    Bu Makale İletişim API'sinin Nasıl Kurulacağını Ayrıntılı Olarak Açıklamaktadır

  2. Sonra Bir GSM Modeme İhtiyacınız Var (tercihen sim900 Modülü)

  3. Java JDK en son sürümü tercih edilir

  4. AT Komut Kılavuzu

    kod

    paket örneği;

        import java.io.*;
        import java.util.*;
    
        import gnu.io.*;
    
        import java.io.*;
    
    
        import org.apache.log4j.chainsaw.Main;
    
        import sun.audio.*;
    
        public class GSMConnect implements SerialPortEventListener, 
         CommPortOwnershipListener {
    
         private static String comPort = "COM6"; // This COM Port must be connect with GSM Modem or your mobile phone
         private String messageString = "";
         private CommPortIdentifier portId = null;
         private Enumeration portList;
         private InputStream inputStream = null;
         private OutputStream outputStream = null;
         private SerialPort serialPort;
         String readBufferTrial = "";
         /** Creates a new instance of GSMConnect */
         public GSMConnect(String comm) {
    
           this.comPort = comm;
    
         }
    
         public boolean init() {
           portList = CommPortIdentifier.getPortIdentifiers();
           while (portList.hasMoreElements()) {
             portId = (CommPortIdentifier) portList.nextElement();
             if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
               if (portId.getName().equals(comPort)) {
                   System.out.println("Got PortName");
                 return true;
               }
             }
           }
           return false;
         }
    
         public void checkStatus() {
           send("AT+CREG?\r\n");
         }
    
    
    
         public void send(String cmd) {
           try {
             outputStream.write(cmd.getBytes());
           } catch (IOException e) {
             e.printStackTrace();
           }
         }
    
         public void sendMessage(String phoneNumber, String message) {
               char quotes ='"';
           send("AT+CMGS="+quotes + phoneNumber +quotes+ "\r\n");
           try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
            //   send("AT+CMGS=\""+ phoneNumber +"\"\r\n");
           send(message + '\032');
           System.out.println("Message Sent");
         }
    
         public void hangup() {
           send("ATH\r\n");
         }
    
         public void connect() throws NullPointerException {
           if (portId != null) {
             try {
               portId.addPortOwnershipListener(this);
    
               serialPort = (SerialPort) portId.open("MobileGateWay", 2000);
               serialPort.setSerialPortParams(115200,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
             } catch (PortInUseException | UnsupportedCommOperationException e) {
               e.printStackTrace();
             }
    
             try {
               inputStream = serialPort.getInputStream();
               outputStream = serialPort.getOutputStream();
    
             } catch (IOException e) {
               e.printStackTrace();
             }
    
             try {
               /** These are the events we want to know about*/
               serialPort.addEventListener(this);
               serialPort.notifyOnDataAvailable(true);
               serialPort.notifyOnRingIndicator(true);
             } catch (TooManyListenersException e) {
               e.printStackTrace();
             }
    
        //Register to home network of sim card
    
             send("ATZ\r\n");
    
           } else {
             throw new NullPointerException("COM Port not found!!");
           }
         }
    
         public void serialEvent(SerialPortEvent serialPortEvent) {
           switch (serialPortEvent.getEventType()) {
             case SerialPortEvent.BI:
             case SerialPortEvent.OE:
             case SerialPortEvent.FE:
             case SerialPortEvent.PE:
             case SerialPortEvent.CD:
             case SerialPortEvent.CTS:
             case SerialPortEvent.DSR:
             case SerialPortEvent.RI:     
             case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
             case SerialPortEvent.DATA_AVAILABLE:
    
               byte[] readBuffer = new byte[2048];
               try {
                 while (inputStream.available() > 0) 
                 {
                   int numBytes = inputStream.read(readBuffer);
    
                   System.out.print(numBytes);
                   if((readBuffer.toString()).contains("RING")){
                   System.out.println("Enter Inside if RING Loop");    
    
    
    
                   }
                 }
    
                 System.out.print(new String(readBuffer));
               } catch (IOException e) {
               }
               break;
           }
         }
         public void outCommand(){
             System.out.print(readBufferTrial);
         }
         public void ownershipChange(int type) {
           switch (type) {
             case CommPortOwnershipListener.PORT_UNOWNED:
               System.out.println(portId.getName() + ": PORT_UNOWNED");
               break;
             case CommPortOwnershipListener.PORT_OWNED:
               System.out.println(portId.getName() + ": PORT_OWNED");
               break;
             case CommPortOwnershipListener.PORT_OWNERSHIP_REQUESTED:
               System.out.println(portId.getName() + ": PORT_INUSED");
               break;
           }
    
         }
         public void closePort(){
    
            serialPort.close(); 
         }
    
         public static void main(String args[]) {
           GSMConnect gsm = new GSMConnect(comPort);
           if (gsm.init()) {
             try {
                 System.out.println("Initialization Success");
               gsm.connect();
               Thread.sleep(5000);
               gsm.checkStatus();
               Thread.sleep(5000);
    
               gsm.sendMessage("+91XXXXXXXX", "Trial Success");
    
               Thread.sleep(1000);
    
               gsm.hangup();
               Thread.sleep(1000);
               gsm.closePort();
               gsm.outCommand();
               System.exit(1);
    
    
             } catch (Exception e) {
               e.printStackTrace();
             }
           } else {
             System.out.println("Can't init this card");
           }
         }
    
    
            }

7

Sen hiç Nexmo kullanabilirsiniz SMS göndermek sıra sıra SMS almak .

Nexmo Java Kitaplığı ile SMS göndermek oldukça basittir. Sonra yeni bir hesap oluşturmak API anahtarınızı & sırrı, sanal bir numara kiralama ve alma bu kadar gibi SMS göndermek için kütüphane kullanabilirsiniz:

  public class SendSMS {

      public static void main(String[] args) throws Exception {
          AuthMethod auth = new TokenAuthMethod(API_KEY, API_SECRET);
          NexmoClient client = new NexmoClient(auth);

          TextMessage message = new TextMessage(FROM_NUMBER, TO_NUMBER, "Hello from Nexmo!");

          //There may be more than one response if the SMS sent is more than 160 characters.
          SmsSubmissionResult[] responses = client.getSmsClient().submitMessage(message);
            for (SmsSubmissionResult response : responses) {
            System.out.println(response);
          }
      }
  }

SMS almak için webhook kullanan bir sunucu kurmanız gerekir. Bu da oldukça basit. Eğitimimize göz atmanızı tavsiye ederim.Java ile SMS alma .

Açıklama: Nexmo için çalışıyorum


2

TextMarks, API'leri aracılığıyla uygulamanızdan metin mesajları gönderip almanız için paylaşılan kısa koduna erişmenizi sağlar. Mesajlar 41411'den / 41411'e gelir (örneğin rastgele bir telefon yerine # ve e-posta ağ geçitlerinin aksine, çalışmak için tam 160 karaktere sahipsiniz).

Ayrıca, uygulamanızda çeşitli işlevleri çağırmaları için kişilere anahtar kelimelerinizde 41411'e metin yazmalarını da söyleyebilirsiniz. Diğer birçok popüler dilin yanı sıra bir JAVA API istemcisi ve çok kapsamlı belgeler ve teknik destek var.

14 günlük ücretsiz deneme, hala test eden ve uygulamalarını geliştiren geliştiriciler için kolayca uzatılabilir.

Buradan kontrol edin: TextMarks API Bilgisi


2

Java uygulamasında SMS göndermek ve almak için LOGICA SMPP Java API yapabilirsiniz. LOGICA SMPP, telekom uygulamasında kendini kanıtlamış API'dir. Logica API ayrıca size TCP / IP bağlantısında sinyal kapasitesi sağlar.

Tüm dünyadaki çeşitli telekom operatörleriyle doğrudan entegre olabilirsiniz.


2

İki yol var: Birincisi: Ücretini ödemeniz gereken bir SMS API Ağ Geçidi kullanın, belki ücretsiz de olsa bazı deneme sürümleri bulursunuz, ancak nadirdir. İkincisi: Dizüstü bilgisayarınıza bağlı bir modem GSM ile AT komutunu kullanmak için. bu kadar


2

Nasıl çalışacağınıza ve sağlayıcınızın kim olduğuna bağlıdır.

Bir sms-gateway şirketi ile çalışıyorsanız, muhtemelen SMPP protokolü üzerinden çalışacaksınız (3.4 hala en yaygın olanıdır), ardından OpenSMPP ve jSMPP'ye bir göz atacaksınız. Bunlar SMPP ile çalışmak için güçlü kitaplıklardır.

Kendi donanımınızla (bir gsm modem gibi) çalışacaksanız, mesaj göndermenin en kolay yolu AT komutlarıdır, bunlar modele göre farklılık gösterir, bu nedenle modeminiz tarafından hangi AT komutlarının desteklendiğini öğrenmelisiniz. . Ardından, modeminizin IP'si varsa ve bağlantıya açıksa, java soketi üzerinden komutlar gönderebilirsiniz.

Socket smppSocket = new Socket("YOUR_MODEM_IP", YOUR_MODEM_PORT);
DataOutputStream os = new DataOutputStream(smppSocket.getOutputStream());
DataInputStream is = new DataInputStream(smppSocket.getInputStream());

os.write(some_byte_array[]);
is.readLine();

Aksi takdirde, bir COM bağlantı noktası üzerinden çalışırsınız, ancak yöntem aynıdır (AT komutları göndermek), burada seri bağlantı noktalarıyla nasıl çalışılacağıyla ilgili daha fazla bilgi bulabilirsiniz .


2

OMK.smpp. API. SMPP'ye dayanır ve simülatör de ücretsiz olarak mevcuttur

LOGICA SMPP API.

Diğer bir seçenek de Kannel ücretsiz bir WAP ve SMS ağ geçididir.


Kannel'i yapılandırmak, modem ile yapılandırmayı başarırsanız sizi terletecektir, lütfen prosedürleri paylaşın.
Dun0523

2

Twilio gibi bulut tabanlı bir çözüm öneriyorum. Bulut tabanlı çözümler, sürekli bakım gerektirmediği için şirket içi bir çözüme göre daha uygun maliyetlidir. E-posta yoluyla SMS, kullanıcıdan operatör bilgilerini almanız gerektiğinden ve tüm cep telefonu numaralarına kısa mesaj gönderebileceğinizden asla emin olamayacağınız için zarif bir çözüm değildir. Web uygulamamda sunucu tarafında sms göndermek için twilio java api kullanıyorum. birkaç dakika içinde uygulamanızla entegre edebilirsiniz.

https://www.twilio.com/docs/java/install

Dokümanlardan bir SMS mesajı göndermenin bir örneğini burada bulabilirsiniz:

import com.twilio.sdk.TwilioRestClient;
import com.twilio.sdk.TwilioRestException;
import com.twilio.sdk.resource.factory.MessageFactory;
import com.twilio.sdk.resource.instance.Message;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

import java.util.ArrayList;
import java.util.List;

public class Example {

  // Find your Account Sid and Token at twilio.com/user/account
  public static final String ACCOUNT_SID = "{{ account_sid }}";
  public static final String AUTH_TOKEN = "{{ auth_token }}";

  public static void main(String[] args) throws TwilioRestException {
    TwilioRestClient client = new TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN);

    // Build a filter for the MessageList
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("Body", "Test Twilio message"));
    params.add(new BasicNameValuePair("To", "+14159352345"));
    params.add(new BasicNameValuePair("From", "+14158141829"));

    MessageFactory messageFactory = client.getAccount().getMessageFactory();
    Message message = messageFactory.create(params);
    System.out.println(message.getSid());
  }
}

1
Ücretli ancak kısa mesaj başına bir sentten az.
Karthik Sankar

1

smslib bu amaç için çok kullanışlıdır. Bilgisayarınıza bir modem bağlayabilir ve sms göndermek için bu kütüphaneyi kullanabilirsiniz. İşe yarıyor kullandım


1

Wavecell'de Java'yı da seviyoruz , ancak ihtiyaçlarınızın çoğunu karşılayacak bir REST API'ye sahip olduğumuz için bu soru dile özgü ayrıntılar olmadan yanıtlanabilir :

curl -X "POST" https://api.wavecell.com/sms/v1/amazing_hq/single \
    -u amazing:1234512345 \
    -H "Content-Type: application/json" \
    -d $'{ "source": "AmazingDev", "destination": "+6512345678", "text": "Hello, World!" }'

Java'da HTTP istekleri gönderirken sorun yaşıyorsanız şu sorulara bakın:

Belirli durumlar için SMPP API'yi kullanmayı da düşünebilirsiniz ve daha önce bahsedilen JSMPP kitaplığı bu konuda yardımcı olacaktır.


0

Kullanabilirsiniz Twilio . Ancak, biraz zor bir çözüm arıyorsanız, aşağıda bahsettiğim geçici çözümü takip edebilirsiniz.

Bu sms almak için mümkün değildir. Ancak bu, birçok müşteriye sms göndermek için kullanabileceğiniz zor bir yöntemdir. Twitter API'sini kullanabilirsiniz. Twitter hesabını cep telefonumuzdan sms ile takip edebiliriz. Sadece twitter'a sms göndermemiz gerekiyor. Kullanıcı adıyla bir twitter hesabı oluşturduğumuzu hayal edin @username. Daha sonra aşağıda gösterildiği gibi 40404'e sms gönderebiliriz.

follow @username

Sonra o hesapta tweet atılan tweetleri almaya başlarız.

Dolayısıyla, bir twitter hesabı oluşturduktan sonra, o hesaptan tweet göndermek için Twitter API'sini kullanabiliriz. Daha sonra bahsettiğim gibi o hesabı takip eden tüm müşteriler tweet almaya başlıyor.

Twitter API ile nasıl tweet atılacağını aşağıdaki bağlantıdan öğrenebilirsiniz.

Twitter API

Geliştirmeye başlamadan önce twitter api kullanmak için izin almanız gerekir. Twitter api'ye aşağıdaki bağlantıdan ulaşabilirsiniz.

Twitter Geliştirici Konsolu

Bu, sorununuz için en iyi çözüm değil, ancak bu yardımın umarız.


-3

GSM modem kullanarak sms göndermek için AT & T komutlarını kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.