Как отправить СМС на Java



каковы возможные способы отправки и получения sms из java-приложения ?



примечание: Я ожидаю список возможных способов.
также Ваше мнение о каждом, что лучше / как?

790   16  

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 [проверено и протестировано]

  1. сначала вам нужно установить Java Comm Api

    в этой статье подробно описывается, как настроить Api связи

  2. Далее вам нужен GSM модем (желательно модуль sim900 )

  3. Java JDK последняя версия предпочтительнее

  4. в руководстве

    код

    образец пакет;

        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 библиотека поможет с этим.

вы можете использовать команды AT & T для отправки sms с помощью GSM-модема.

Comments

    Ничего не найдено.