Apa cara yang mungkin untuk mengirim dan menerima sms dari aplikasi Java?
Bagaimana?
(Disclaimer: saya bekerja di Twilio)
Twilio menawarkan Java SDK untuk mengirim SMS melalui Twilio API SISA.
jika semua yang anda inginkan adalah pemberitahuan sederhana, banyak operator dukungan SMS melalui email; lihat SMS melalui E-Mail
Ada API yang disebut SMSLib, it's benar-benar padat. http://smslib.org/
EDIT:
Sekarang anda memiliki banyak Saas penyedia yang dapat memberikan layanan ini tidak menggunakan Api
Ex: mailchimp, esendex, Twilio, ...
Terbaik SMS API I've terlihat di Jawa JSMPP. Ini adalah kuat, mudah digunakan, dan saya digunakan sendiri untuk sebuah perusahaan-tingkat aplikasi (mengirim lebih dari 20K pesan SMS setiap hari).
API Ini dibuat untuk mengurangi bertele-tele yang ada SMPP API. It's sangat sederhana dan mudah digunakan karena menyembunyikan kompleksitas dari rendahnya tingkat protokol komunikasi seperti menanyakan secara otomatis link request-response.
I've mencoba beberapa Api lainnya seperti Ozeki, tetapi kebanyakan dari mereka baik yang komersial maupun yang memiliki keterbatasan dalam throughput (saya.e't mengirim lebih dari 3 pesan SMS dalam satu detik, misalnya).
Anda dapat menggunakan Nexmo untuk SMS serta SMS.
Mengirim SMS dengan Nexmo Library Java ini cukup mudah. Setelah membuat akun baru, menyewa sebuah virtual jumlah, dan mendapatkan API key & 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'akan perlu untuk mendirikan sebuah server yang mengkonsumsi webhook. Yang's cukup sederhana juga. Saya sarankan memeriksa tutorial kami di menerima SMS dengan Java.
Disclosure: saya bekerja untuk Nexmo
paket sampel;
import java.io.; import java.util.;
impor gnu.io.*;
import java.io.*;
import org.apache.log4j.gergaji mesin.Utama;
impor matahari.audio.*;
public class GSMConnect mengimplementasikan SerialPortEventListener, CommPortOwnershipListener {
private static String membawakan = "COM6"; // Port COM Ini harus terhubung dengan Modem GSM atau handphone anda private String messageString = ""; pribadi CommPortIdentifier portId = null; pribadi Pencacahan portList; pribadi InputStream inputStream = null; pribadi OutputStream outputStream = null; pribadi SerialPort serialPort; String readBufferTrial = ""; /* Creates a new instance dari GSMConnect / publik GSMConnect(String comm) {
ini.membawakan = comm;
}
public boolean init() { portList = CommPortIdentifier.getPortIdentifiers(); sementara (portList.hasMoreElements()) { portId = (CommPortIdentifier) portList.nextElement(); jika (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { jika (portId.getName().sama dengan(baru)) { Sistem.keluar.println("Punya PortName"); return true; } } } return false; }
public void checkStatus() { mengirim("DI+CREG?\r\n"); }
public void kirim(String cmd) { try { outputStream.menulis(cmd.getBytes()); } catch (IOException e) { e.printStackTrace(); } }
public void sendMessage(String phoneNumber, String pesan) { char quote ='",'; mengirim("AT+CMGS="+harga + phoneNumber +harga+ "\r\n"); try { Benang.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // kirim("AT+CMGS=\","+ phoneNumber +"\"\r\n"); mengirim(pesan + '\032'); Sistem.keluar.println("Pesan yang Dikirim"); }
public void hangup() { mengirim("ATH\r\n"); }
public void connect() melempar NullPointerException { jika (portId != null) { try { portId.addPortOwnershipListener(ini);
serialPort = (SerialPort) portId.terbuka("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 { /* Ini adalah peristiwa-peristiwa yang kita ingin tahu tentang/ serialPort.addEventListener(ini); serialPort.notifyOnDataAvailable(true); serialPort.notifyOnRingIndicator(true); } catch (TooManyListenersException e) { e.printStackTrace(); }
//Mendaftar ke jaringan rumah dari kartu sim
mengirim("ATZ\r\n");
} else { membuang baru NullPointerException("Port COM tidak ditemukan!!"); } }
public void serialEvent(SerialPortEvent serialPortEvent) { switch (serialPortEvent.getEventType()) { kasus SerialPortEvent.BI: kasus SerialPortEvent.OE: kasus SerialPortEvent.FE: kasus SerialPortEvent.PE: kasus SerialPortEvent.CD: kasus SerialPortEvent.CTS: kasus SerialPortEvent.DSR: kasus SerialPortEvent.RI: kasus SerialPortEvent.OUTPUT_BUFFER_EMPTY: kasus SerialPortEvent.DATA_AVAILABLE:
byte[] readBuffer = new byte[2048]; try { sementara (inputStream.tersedia() > 0) { int numBytes = inputStream.baca(readBuffer);
Sistem.keluar.cetak(numBytes); jika((readBuffer.toString()).mengandung("CINCIN")){ Sistem.keluar.println("Masukkan Dalam jika CINCIN Loop");
} }
Sistem.keluar.cetak(new String(readBuffer)); } catch (IOException e) { } break; } } public void outCommand(){ Sistem.keluar.cetak(readBufferTrial); } public void ownershipChange(int tipe) { switch (tipe) { kasus CommPortOwnershipListener.PORT_UNOWNED: Sistem.keluar.println(portId.getName() + ": PORT_UNOWNED"); break; kasus CommPortOwnershipListener.PORT_OWNED: Sistem.keluar.println(portId.getName() + ": PORT_OWNED"); break; kasus CommPortOwnershipListener.PORT_OWNERSHIP_REQUESTED: Sistem.keluar.println(portId.getName() + ": PORT_INUSED"); break; }
} public void closePort(){
serialPort.close(); }
public static void main(String args[]) { GSMConnect gsm = new GSMConnect(baru); jika (gsm.init()) { try { Sistem.keluar.println("Inisialisasi Sukses"); gsm.connect(); Benang.tidur(5000); gsm.checkStatus(); Benang.tidur(5000);
gsm.sendMessage("+91XXXXXXXX", "Trial Sukses");
Benang.sleep(1000);
gsm.hangup(); Benang.sleep(1000); gsm.closePort(); gsm.outCommand(); Sistem.exit(1);
} catch (Exception e) { e.printStackTrace(); } } else { Sistem.keluar.println("Dapat't init kartu ini"); } }
}
Anda dapat anda LOGICA SMPP Java API untuk mengirim dan Menerima SMS di aplikasi Java. LOGICA SMPP ini juga terbukti api di telekomunikasi aplikasi. Logica API juga menyediakan anda dengan sinyal capicity pada koneksi TCP/IP.
Anda dapat langsung mengintegrasikan dengan berbagai operator telekomunikasi di seluruh dunia.
Ada dua cara : Pertama : Menggunakan SMS Gateway API yang anda perlu membayar untuk itu , mungkin anda menemukan beberapa percobaan bahkan yang gratis tapi itu's langka . Kedua : Untuk menggunakan AT command dengan modem GSM yang terhubung ke laptop anda . yang's semua
Hal ini tergantung pada bagaimana anda're akan bekerja dan siapa penyedia anda.
Jika anda bekerja dengan sms-gateway perusahaan anda'll mungkin bekerja melalui protokol SMPP (3.4 masih yang paling umum), kemudian lihat pada OpenSMPP dan jSMPP. Ini adalah kuat libs untuk bekerja dengan SMPP.
Jika anda're akan bekerja dengan anda sendiri perangkat keras (f.e. gsm-modem) cara termudah untuk mengirim pesan melalui DI perintah, mereka berbeda tergantung pada model, jadi, anda harus mencari tahu apa yang DI perintah-perintah yang didukung oleh modem anda. Selanjutnya, jika modem anda memiliki IP dan terbuka untuk koneksi, anda dapat mengirim perintah melalui java socket
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();
Jika tidak, anda'll bekerja melalui COM port, tetapi metode yang sama (mengirim perintah AT), anda dapat menemukan lebih banyak informasi bagaimana bekerja dengan serial port di sini.
Saya sarankan solusi berbasis cloud seperti Twilio. Solusi berbasis Cloud ini adalah biaya-efektif, dari solusi di rumah karena tidak ada pemeliharaan yang diperlukan. SMS melalui email bukan solusi yang elegan, seperti yang anda miliki untuk mendapatkan pembawa informasi dari pengguna dan anda tidak pernah bisa yakin bahwa anda dapat mengirim pesan ke semua nomor ponsel. Saya menggunakan twilio java api di aplikasi web saya, untuk mengirim sms dari serverside. dalam beberapa menit, anda dapat mengintegrasikan dengan aplikasi anda.
https://www.twilio.com/docs/java/install
Berikut ini's contoh mengirim pesan SMS dari docs:
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());
}
}
OMK.smpp. API. it's dasar pada SMPP dan simulator ini juga tersedia secara gratis
LOGICA SMPP API.
Dan pilihan lain adalah Kannel gratis, WAP dan SMS gateway.
TextMarks memberikan anda akses ke ruang shortcode untuk mengirim dan menerima pesan teks dari aplikasi anda melalui API mereka. Pesan yang datang dari/ke 41411 (bukan misalnya acak telepon# dan tidak seperti e-mail gateway anda memiliki 160 karakter untuk bekerja dengan).
Anda juga dapat memberitahu orang-orang untuk teks dalam kata kunci(s) untuk 41411 untuk menjalankan berbagai fungsi dalam aplikasi anda. Ada JAVA API klien bersama dengan beberapa bahasa populer lainnya dan sangat komprehensif dokumentasi dan dukungan teknis.
Gratis 14 hari trial dapat dengan mudah diperluas untuk pengembang yang masih uji coba itu dan membangun aplikasi mereka.
Check it out di sini: TextMarks API Info
Kita juga suka Jawa di Wavecell, tetapi pertanyaan ini dapat dijawab tanpa bahasa-rincian spesifik karena kita memiliki REST API yang akan menutupi 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!" }'
Melihat ini pertanyaan jika anda memiliki masalah dengan mengirim permintaan HTTP pada Java:
Untuk kasus-kasus tertentu anda juga dapat mempertimbangkan menggunakan SMPP API dan telah disebutkan JSMPP perpustakaan akan membantu dengan itu.