16 ответов:
(отказ от ответственности: я работаю в Twilio)
Twilio предлагает Java SDK для отправки SMS через Twilio REST API.
Если все, что вы хотите, это простые уведомления, многие перевозчики поддерживают SMS по электронной почте; см. SMS через E-Mail
есть API под названием SMSLib, это действительно awsome. http://smslib.org/
EDIT:
теперь у вас есть много поставщиков Saas, которые могут предоставить вам эту услугу, используя там API
пример: mailchimp, esendex, Twilio,...
лучший SMS API, который я видел в Java, - это JSMPP. Он мощный, простой в использовании, и я сам использовал его для приложения корпоративного уровня (отправка более 20 тыс. SMS-сообщений ежедневно).
этот API создан для уменьшения детализации существующего API SMPP. Это очень простой и легкий в использовании, потому что оно скрывает сложность низкоуровневое сообщение протокола как автоматически запрашивает ссылка на сайт запрос-ответ.
Я пробовал некоторые другие API, такие как Ozeki, но большинство из них либо является коммерческим, либо имеет ограничение в пропускной способности (например, не может отправлять более 3 SMS-сообщений в секунду).
вы можете использовать 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
вы можете сделать это с помощью GSM-модема и Java Communications Api [проверено и протестировано]
сначала вам нужно установить Java Comm Api
Далее вам нужен GSM модем (желательно модуль sim900 )
Java JDK последняя версия предпочтительнее
в руководстве
код
образец пакет;
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 + '2'); 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"); } } }
TextMarks дает вам доступ к его общему шорткоду для отправки и получения текстовых сообщений из вашего приложения через их API. Сообщения приходят от/до 41411 (вместо, например, случайного телефона# и в отличие от шлюзов электронной почты у вас есть полные 160 символов для работы).
вы также можете сказать людям, чтобы текст в ключевых словах до 41411, чтобы вызвать различные функции в вашем приложении. Существует клиент Java API наряду с несколькими другими популярными языками и очень полной документацией и техническая поддержка.
14-дневная бесплатная пробная версия может быть легко продлена для разработчиков, которые все еще тестируют ее и создают свои приложения.
смотрите здесь: TextMarks API Info
вы можете вы LOGICA SMPP Java API для отправки и получения SMS в приложении Java. LOGICA SMPP-это хорошо зарекомендовавший себя api в телекоммуникационном приложении. Logica API также предоставляет вам сигнализацию capicity при подключении TCP / IP.
вы можете напрямую интегрироваться с различными операторами связи по всему миру.
есть два способа : Во-первых: используйте шлюз SMS API , который вам нужно заплатить за него, возможно, вы найдете некоторые пробные даже бесплатные, но их мало . Во-вторых: использовать команду AT с модемом GSM, подключенным к вашему ноутбуку . вот и все
Это зависит от того, как вы собираетесь работать и кто ваш провайдер.
Если вы работаете с компанией sms-gateway, вы, вероятно, будете работать через протокол SMPP (3.4 по-прежнему является наиболее распространенным), а затем посмотрите на OpenSMPP и jSMPP. Это мощные библиотеки для работы с SMPP.
Если вы собираетесь работать со своим собственным оборудованием (например, gsm-модемом), самый простой способ отправки сообщений - это команды AT, они отличаются в зависимости от модели, поэтому вы должны узнать, что на команды, поддерживаемые вашим модемом. Далее, Если ваш модем имеет IP и открыт для подключения, вы можете отправлять команды через 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();в противном случае вы будете работать через COM-порт, но метод тот же (отправка команд AT), вы можете найти дополнительную информацию о том, как работать с последовательными портами здесь.
ОМК.СМПП. ПРИКЛАДНОЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС. это база, на СМПП и симулятор также доступен бесплатно
LOGICA SMPP API.
и еще один вариант Каннель бесплатный WAP-и SMS-шлюз.
Я предлагаю облачное решение, такое как Twilio. Облачные решения являются экономически эффективными, чем внутреннее решение, поскольку нет необходимости в постоянном обслуживании. SMS через электронную почту не является элегантным решением, так как вы должны получить информацию о перевозчике от пользователя, и вы никогда не можете быть уверены, что вы можете написать все мобильные номера. Я с использованием Twilio API-интерфейса Java в моем веб-приложение, чтобы отправить SMS с серверной стороны. в течение нескольких минут, вы можете интегрировать с вашим приложение.
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 очень полезно для этой цели u может подключить модем с ПК и использовать эту библиотеку для отправки sms. Он работает я использовал его
мы также любим 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 библиотека поможет с этим.
Comments