Cara mengirim SMS di Jawa


133

Apa cara yang mungkin untuk mengirim dan menerima sms dari aplikasi Java?

Bagaimana?

Jawaban:




10

API SMS terbaik yang pernah saya lihat di Jawa adalah JSMPP. Ini kuat, mudah digunakan, dan saya menggunakannya sendiri untuk aplikasi tingkat perusahaan (mengirim lebih dari 20 ribu pesan SMS setiap hari).

API ini dibuat untuk mengurangi verbositas dari SMPP API yang ada. Ini sangat sederhana dan mudah digunakan karena menyembunyikan kompleksitas komunikasi protokol tingkat rendah seperti secara otomatis menanyakan tautan permintaan-respons.

Saya sudah mencoba beberapa API lain seperti Ozeki, tetapi kebanyakan dari mereka bersifat komersial atau memiliki batasan dalam throughputnya (yaitu tidak dapat mengirim lebih dari 3 pesan SMS dalam satu detik, misalnya).


10

Ada API yang disebut SMSLib, sangat mengagumkan. http://smslib.org/

Sekarang Anda memiliki banyak penyedia Saas yang dapat memberi Anda layanan ini menggunakan API mereka

Mis: simpanan surat, esendex, Twilio, ...


9

Anda Dapat Melakukan Ini Dengan Modem GSM dan Java Communications Api [Dicoba Dan Diuji]

  1. Pertama, Anda Perlu Mengatur Java Comm Api

    Artikel Ini Menjelaskan Secara Detail Cara Mengatur Komunikasi Api

  2. Selanjutnya Anda Membutuhkan Modem GSM (sebaiknya Modul sim900)

  3. Java JDK versi terbaru lebih disukai

  4. Panduan Perintah AT

    Kode

    sampel paket;

        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

Anda dapat menggunakan Nexmo untuk mengirim SMS serta menerima SMS .

Mengirim SMS dengan Nexmo Java Library cukup mudah. Setelah membuat akun baru , menyewa nomor virtual, dan mendapatkan kunci API & rahasia, Anda dapat menggunakan perpustakaan untuk mengirim SMS seperti:

  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);
          }
      }
  }

Untuk menerima SMS, Anda harus mengatur server yang menggunakan webhook. Itu juga cukup sederhana. Saya sarankan memeriksa tutorial kami tentang menerima SMS dengan Java .

Pengungkapan: Saya bekerja untuk Nexmo


2

TextMarks memberi Anda akses ke kode pendek bersama untuk mengirim dan menerima pesan teks dari aplikasi Anda melalui API mereka. Pesan datang dari / ke 41411 (alih-alih misalnya # telepon acak dan tidak seperti gateway email, Anda memiliki 160 karakter penuh untuk digunakan).

Anda juga dapat memberi tahu orang untuk mengirim teks ke kata kunci Anda ke 41411 untuk menjalankan berbagai fungsi di aplikasi Anda. Ada klien API JAVA bersama dengan beberapa bahasa populer lainnya dan dokumentasi yang sangat komprehensif dan dukungan teknis.

Uji coba gratis 14 hari dapat dengan mudah diperpanjang untuk pengembang yang masih mengujinya dan membangun aplikasi mereka.

Lihat di sini: Info API TextMarks


2

Anda dapat menggunakan LOGICA SMPP Java API untuk mengirim dan menerima SMS dalam aplikasi Java. LOGICA SMPP adalah api yang terbukti baik dalam aplikasi telekomunikasi. Logica API juga memberi Anda kapabilitas pensinyalan pada koneksi TCP / IP.

Anda dapat langsung berintegrasi dengan berbagai operator telekomunikasi di seluruh dunia.


2

Ada dua cara: Pertama: Gunakan SMS API Gateway yang Anda harus bayar untuk itu, mungkin Anda menemukan beberapa percobaan bahkan yang gratis tapi itu langka. Kedua: Untuk menggunakan perintah AT dengan modem GSM yang terhubung ke laptop Anda. itu saja


2

Itu tergantung pada bagaimana Anda akan bekerja dan siapa penyedia Anda.

Jika Anda bekerja dengan perusahaan sms-gateway Anda mungkin akan bekerja melalui protokol SMPP (3.4 masih yang paling umum), maka lihatlah OpenSMPP dan jSMPP. Ini adalah lib yang kuat untuk bekerja dengan SMPP.

Jika Anda akan bekerja dengan perangkat keras Anda sendiri (fe gsm-modem) cara termudah untuk mengirim pesan adalah melalui perintah AT, mereka berbeda tergantung pada model, jadi, Anda harus mencari tahu apa perintah AT yang didukung oleh modem Anda . Selanjutnya, jika modem Anda memiliki IP dan terbuka untuk koneksi, Anda dapat mengirim perintah melalui soket java

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();

Kalau tidak, Anda akan bekerja melalui port COM, tetapi metode ini sama (mengirim perintah AT), Anda dapat menemukan informasi lebih lanjut bagaimana bekerja dengan port serial di sini .


2

OMK.smpp. API. itu berdasarkan pada SMPP dan simulator juga tersedia secara gratis

LOGICA SMPP API.

Dan pilihan lainnya adalah Kannel WAP gratis dan gateway SMS.


Mengkonfigurasi kannel membuat Anda berkeringat jika Anda berhasil mengonfigurasinya dengan modem, silakan bagikan prosedur.
Dun0523

2

Saya menyarankan solusi berbasis cloud seperti Twilio. Solusi berbasis cloud lebih hemat biaya daripada solusi in-house karena tidak ada pemeliharaan yang berkelanjutan. SMS melalui email bukanlah solusi yang elegan, karena Anda harus mendapatkan informasi operator dari pengguna dan Anda tidak akan pernah yakin bahwa Anda dapat mengirim SMS ke semua nomor ponsel. Saya menggunakan twilio java api di aplikasi web saya, untuk mengirim sms dari server. dalam beberapa menit, Anda dapat berintegrasi dengan aplikasi Anda.

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

Berikut ini contoh mengirim pesan SMS dari dokumen:

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
Dibayar tetapi kurang dari satu sen per pesan teks.
Karthik Sankar

1

smslib sangat berguna untuk keperluan ini Anda dapat menghubungkan modem dengan PC Anda dan menggunakan lib ini untuk mengirim sms. Berhasil saya sudah menggunakannya


1

Kami juga menyukai Java di Wavecell , tetapi pertanyaan ini dapat dijawab tanpa detail khusus bahasa karena kami memiliki REST API yang akan mencakup sebagian besar kebutuhan Anda:

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!" }'

Lihatlah pertanyaan ini jika Anda memiliki masalah dengan mengirim permintaan HTTP di Java:

Untuk kasus-kasus tertentu Anda juga dapat mempertimbangkan menggunakan API SMPP dan perpustakaan JSMPP yang telah disebutkan akan membantu dengan itu.


0

Anda dapat menggunakan Twilio untuk ini. Tetapi jika Anda mencari solusi yang rumit, Anda dapat mengikuti solusi yang telah saya sebutkan di bawah ini.

Ini tidak mungkin untuk menerima sms. Tetapi ini adalah metode rumit yang dapat Anda gunakan untuk mengirim sms ke sejumlah klien. Anda dapat menggunakan API twitter. Kita dapat mengikuti akun twitter dari ponsel kita dengan sms. Kami hanya perlu mengirim sms ke twitter. Bayangkan kita membuat akun twitter dengan nama pengguna @username. Kemudian kita dapat mengirim sms ke 40404 seperti yang ditunjukkan di bawah ini.

follow @username

Lalu kami mulai mendapatkan tweet yang tweet di akun itu.

Jadi setelah kita membuat akun twitter maka kita bisa menggunakan Twitter API untuk memposting tweet dari akun itu. Kemudian semua klien yang telah mengikuti akun itu seperti yang saya sebutkan sebelumnya mulai menerima tweet.

Anda dapat mempelajari cara memposting tweet dengan API twitter dari tautan berikut.

API Twitter

Sebelum Anda mulai mengembangkan Anda harus mendapatkan izin untuk menggunakan api twitter. Anda bisa mendapatkan akses ke twitter api dari tautan berikut.

Konsol Pengembang Twitter

Ini bukan solusi terbaik untuk masalah Anda. Tapi harap bantuan ini.


-3

Anda dapat menggunakan perintah AT&T untuk mengirim sms menggunakan modem GSM.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.