Apa cara yang mungkin untuk mengirim dan menerima sms dari aplikasi Java?
Bagaimana?
Apa cara yang mungkin untuk mengirim dan menerima sms dari aplikasi Java?
Bagaimana?
Jawaban:
(Penafian: Saya bekerja di Twilio)
Twilio menawarkan Java SDK untuk mengirim SMS melalui API Twilio REST.
jika yang Anda inginkan hanyalah pemberitahuan sederhana, banyak operator mendukung SMS melalui email; lihat SMS melalui E-Mail
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).
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, ...
Pertama, Anda Perlu Mengatur Java Comm Api
Artikel Ini Menjelaskan Secara Detail Cara Mengatur Komunikasi Api
Selanjutnya Anda Membutuhkan Modem GSM (sebaiknya Modul sim900)
Java JDK versi terbaru lebih disukai
Panduan Perintah AT
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");
}
}
}
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
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
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.
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
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 .
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());
}
}
smslib sangat berguna untuk keperluan ini Anda dapat menghubungkan modem dengan PC Anda dan menggunakan lib ini untuk mengirim sms. Berhasil saya sudah menggunakannya
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.
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.
Sebelum Anda mulai mengembangkan Anda harus mendapatkan izin untuk menggunakan api twitter. Anda bisa mendapatkan akses ke twitter api dari tautan berikut.
Ini bukan solusi terbaik untuk masalah Anda. Tapi harap bantuan ini.
Anda dapat menggunakan perintah AT&T untuk mengirim sms menggunakan modem GSM.