Каковы возможные способы отправки и получения смс из Java-приложения?
Как?
Каковы возможные способы отправки и получения смс из Java-приложения?
Как?
Посмотрите Комплект разработчика программного обеспечения Simplewire Java SMS
Отправка и получение SMS с Java с помощью SDK SDK Ozeki Java
(Отказ от ответственности: я работаю в Twilio)
Twilio предлагает Java SDK для отправки SMS через Twilio REST API.
если все, что вам нужно, это простые уведомления, многие операторы поддерживают SMS по электронной почте; см. SMS через E-Mail
Есть API под названием SMSLib, это действительно круто. http://smslib.org/
РЕДАКТИРОВАТЬ:
Теперь у вас есть много провайдеров Saas, которые могут предоставить вам эту услугу, используя там API
Например: mailchimp, esendex, Twilio,...
Лучший SMS-API, который я видел на Java, - JSMPP. Он мощный, простой в использовании, и я сам использовал его для приложения на уровне предприятия (ежедневно отправлял более 20 тыс. SMS-сообщений).
Этот API создан для уменьшения многословия существующего API SMPP. Он очень прост и прост в использовании, поскольку он скрывает сложность связь с протоколом низкого уровня, например, автоматически запрашивать ссылка-запрос-ответ.
Я пробовал некоторые другие API, такие как Ozeki, но большинство из них либо коммерчески, либо ограничено в его пропускной способности (например, нельзя отправлять более 3 SMS-сообщений в секунду).
Сначала вам нужно установить Java Comm Api
В этой статье подробно описывается, как настроить интерфейс API
Далее вам нужен GSM модем (предпочтительно модуль sim900)
Java JDK последняя версия предпочтительнее
AT Command Guide
образец упаковки;
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");
}
}
}
Вы можете использовать Nexmo для отправить SMS, а также получать SMS.
Отправка SMS с помощью Nexmo Java Library довольно проста. После создания новой учетной записи, аренды виртуального номера и получения ключа и секретности API вы можете использовать библиотеку для отправки SMS следующим образом:
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, вам необходимо настроить сервер, на котором используется webhook. Это довольно просто. Я рекомендую проверить наш учебник получение SMS с Java.
Раскрытие: я работаю для Nexmo
OMK.smpp. API. он базируется на SMPP и симулятор также доступен бесплатно
API LOGICA SMPP.
И еще один вариант Kannel бесплатный шлюз WAP и SMS.
TextMarks дает вам доступ к его общему короткому коду для отправки и получения текстовых сообщений из вашего приложения через их API. Сообщения поступают от/до 41411 (вместо, например, случайного телефона # и в отличие от шлюзов электронной почты у вас есть полные 160 символов для работы).
Вы также можете сообщить людям текст в ваших ключевых словах (41411), чтобы вызвать различные функции в вашем приложении. Существует клиент JAVA API, а также несколько других популярных языков и очень полная документация и техническая поддержка.
14-дневная бесплатная пробная версия может быть легко расширена для разработчиков, которые все еще тестируют ее и создают свои приложения.
Посмотрите здесь: Информация об API TextMarks
Вы можете использовать API-интерфейс LOGICA SMPP Java для отправки и получения SMS-сообщений в приложении Java. LOGICA SMPP хорошо зарекомендовал себя в телекоммуникационном приложении. API Logica также предоставляет вам возможность передачи сообщений по TCP/IP-соединению.
Вы можете напрямую интегрироваться с различными операторами связи по всему миру.
Существует два способа: Во-первых: используйте шлюз API SMS, который вам нужно оплатить, возможно, вы найдете пробную версию, даже бесплатную, но это мало. Второе: использовать AT-команду с модемом GSM, подключенным к вашему ноутбуку. что все
Это зависит от того, как вы собираетесь работать и кто ваш провайдер.
Если вы работаете с компанией sms-gateway, вы, вероятно, будете работать через протокол SMPP (3.4 по-прежнему является наиболее распространенным), а затем посмотрите на OpenSMPP и jSMPP. Это мощные библиотеки для работы с SMPP.
Если вы собираетесь работать со своим собственным оборудованием (например, gsm-модем), самый простой способ отправки сообщений - это команды AT, они различаются в зависимости от модели, поэтому вы должны узнать, какие AT-команды поддерживаются вашим модемом. Затем, если ваш модем имеет IP-адрес и открыт для подключения, вы можете отправлять команды через 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();
В противном случае вы будете работать через COM-порт, но метод тот же (отправка AT-команд), вы можете найти дополнительную информацию о том, как работать с последовательными портами .
Я предлагаю решение на базе облака, такое как Twilio. Решения на основе облачных вычислений являются экономически эффективными, чем внутреннее решение, поскольку нет необходимости в постоянном техническом обслуживании. СМС через электронную почту не является изящным решением, так как вам нужно получить информацию о перевозчике от пользователя, и вы никогда не можете быть уверены, что можете отправлять все мобильные номера. Я использую twilio java api в своем веб-приложении, чтобы отправить смс с серверов. в течение нескольких минут вы можете интегрироваться с вашим приложением.
https://www.twilio.com/docs/java/install
Здесь пример отправки SMS-сообщения из документов:
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 очень полезен для этой цели, вы можете подключить модем к вашему компьютеру и использовать эту библиотеку для отправки смс. Он работает, я использовал его
Мы также любим Java в Wavecell, но на этот вопрос можно ответить без специфических для языка деталей, поскольку у нас есть REST API, который будет охватывать большинство ваших потребностей:
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!" }'
Посмотрите на эти вопросы, если у вас возникли проблемы с отправкой HTTP-запросов в Java:
Для конкретных случаев вы также можете рассмотреть возможность использования SMPP API и уже упомянутый JSMPP поможет с этим.
Вы можете использовать команды AT и T для отправки смс с использованием GSM-модема.