Cómo enviar SMS en Java

¿Cuáles son las formas posibles de enviar y recibir sms desde la aplicación java?

Nota: estoy esperando una lista de posibles formas. también tu opinión sobre cada uno, ¿cuál es mejor / cómo?

Eche un vistazo al kit de desarrollo de software SMS de Simplewire Java

Envío y recepción de SMS desde Java utilizando Ozeki Java SMS SDK

(Descargo de responsabilidad: yo trabajo en Twilio)

Twilio ofrece un Java SDK para enviar SMS a través de la API Twilio REST.

si lo único que desea es notificaciones simples, muchos operadores admiten SMS por correo electrónico; ver SMS a través del correo electrónico

Hay una API llamada SMSLib, es realmente impresionante. http://smslib.org/

EDITAR:

Ahora tiene muchos proveedores de Saas que pueden brindarle este servicio usando API.

Ej: mailchimp, esendex, Twilio, …

La mejor API de SMS que he visto en Java es JSMPP. Es potente, fácil de usar, y yo mismo lo usé para una aplicación de nivel empresarial (enviando más de 20 mil mensajes SMS por día).

Esta API creada para reducir la verbosidad de la API SMPP existente. Es muy simple y fácil de usar porque oculta la complejidad de la comunicación de protocolo de bajo nivel, como consultar automáticamente la solicitud-respuesta del enlace.

He intentado algunas otras API como Ozeki, pero la mayoría de ellas son comerciales o tienen una limitación en su rendimiento (es decir, no pueden enviar más de 3 mensajes SMS en un segundo, por ejemplo).

Puedes usar Nexmo para enviar SMS y recibir SMS .

Enviar SMS con Nexmo Java Library es bastante sencillo. Después de crear una cuenta nueva , alquilar un número virtual y obtener su clave de API y su secreto, puede usar la biblioteca para enviar SMS de esta manera:

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); } } } 

Para recibir SMS, deberá configurar un servidor que consum un webhook. Eso es bastante simple también. Recomiendo ver nuestro tutorial sobre cómo recibir SMS con Java .

Divulgación: trabajo para Nexmo

Puede hacerlo con un módem GSM y Java Communications Api [probado y probado]

  1. Primero necesita configurar Java Comm Api

    Este artículo describe en detalle cómo configurar la comunicación Api

  2. Luego necesita un módem GSM (preferiblemente el módulo sim900)

  3. La última versión de Java JDK es preferible

  4. AT Command Guide

    Código

    muestra del paquete;

      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"); } } } 

TextMarks le da acceso a su shortcode compartido para enviar y recibir mensajes de texto desde su aplicación a través de su API. Los mensajes provienen de / a 41411 (en lugar de, por ejemplo, un número de teléfono aleatorio y, a diferencia de las pasarelas de correo electrónico, tiene 160 caracteres completos para trabajar).

También puede decirle a las personas que envíen mensajes de texto en sus palabras clave al 41411 para invocar varias funciones en su aplicación. Hay un cliente API de JAVA junto con muchos otros lenguajes populares y documentación y soporte técnico muy completos.

La versión de prueba gratuita de 14 días se puede ampliar fácilmente para los desarrolladores que todavía están probando y creando sus aplicaciones.

Compruébelo aquí: TextMarks API Info

Puede LOGICA SMPP Java API para enviar y recibir SMS en la aplicación Java. LOGICA SMPP es una API probada en aplicaciones de telecomunicaciones. Logica API también le proporciona la capacidad de señalización en la conexión TCP / IP.

Puede integrarse directamente con varios operadores de telecomunicaciones en todo el mundo.

Hay dos formas: Primero: use una pasarela SMS API que debe pagar, quizás encuentre algunas versiones de prueba, incluso las gratuitas, pero escasas. Segundo: Para usar el comando AT con un módem GSM conectado a su computadora portátil. eso es todo

Depende de cómo va a trabajar y quién es su proveedor.

Si trabaja con una empresa de sms-gateway, probablemente trabaje a través del protocolo SMPP (el 3.4 sigue siendo el más común), luego eche un vistazo a OpenSMPP y jSMPP. Estas son potentes bibliotecas para trabajar con SMPP.

Si va a trabajar con su propio hardware (fe a gsm-modem) la forma más sencilla de enviar mensajes es a través de comandos AT, difieren según el modelo, por lo tanto, debe averiguar qué comandos AT admite su módem. . A continuación, si su módem tiene una IP y está abierto a la conexión, puede enviar comandos a través de un zócalo 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(); 

De lo contrario, trabajará a través de un puerto COM, pero el método es el mismo (enviar comandos AT), aquí puede encontrar más información sobre cómo trabajar con puertos serie.

OMK.smpp. API. está basado en SMPP y el simulador también está disponible de forma gratuita

LOGICA SMPP API.

Y otra opción es Kannel, una puerta de enlace WAP y SMS gratuita.

Sugiero una solución basada en la nube como Twilio. Las soluciones basadas en la nube son rentables, más que una solución interna ya que no se requiere mantenimiento continuo. SMS a través de correo electrónico no es una solución elegante, ya que debe obtener la información del proveedor del usuario y nunca puede estar seguro de que puede enviar mensajes de texto a todos los números de teléfono móvil. Estoy utilizando twilio java api en mi aplicación web, para enviar sms desde el servidor. en pocos minutos, puede integrarse con su aplicación.

https://www.twilio.com/docs/java/install

Aquí hay un ejemplo enviando un mensaje SMS desde los documentos:

 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 params = new ArrayList(); 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 es muy útil para este propósito. Puedes conectar un módem con tu PC y usar esta lib para enviar sms. Funciona Lo he usado

También nos encanta Java en Wavecell , pero esta pregunta puede responderse sin detalles específicos del idioma, ya que tenemos una API REST que cubrirá la mayoría de sus necesidades:

 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!" }' 

Mire estas preguntas si tiene problemas para enviar solicitudes HTTP en Java:

  • POST HTTP utilizando JSON en Java
  • ¿Cómo puedo enviar el objeto json en http post en java?

Para casos específicos también puede considerar usar la API SMPP y la ya mencionada biblioteca JSMPP lo ayudará con eso.

Puede usar los comandos de AT & T para enviar sms usando un módem GSM.