Como enviar SMS em Java
Quais são as formas possíveis de enviar e receber sms da aplicação java ?
Nota: estou à espera de uma lista de maneiras possíveis. também a sua opinião sobre cada um, o que é melhor / como?16 answers
(declaração de exoneração de Responsabilidade: trabalho na Twilio)
Twilio oferece um SDK Java para o envio de SMS através da API Twilio REST.
Se só quiser notificações simples, muitas transportadoras suportam SMS via email; veja SMS através de E-Mail
Editar:
Agora você tem um monte de provedores de Saas que podem lhe dar este serviço usando lá APIs
Ex: mailchimp, esendex, Twilio ,..
Esta API criou para reduzir a verbosidade da API SMPP existente. É muito simples e fácil de usar porque esconde a complexidade de a comunicação de Protocolo de baixo nível, como a consulta automática link pedido-resposta.
Tentei outras APIs como o Ozeki, mas a maioria delas é comercial ou tem limitação no seu rendimento (ou seja, não pode enviar mais de 3 mensagens SMS num segundo, por exemplo).
Você pode usar Nexmo para enviar SMSassim como receber SMS.
Enviar SMS com a biblioteca Java Nexmo é bastante simples. Depois de criar uma nova conta , alugar um número virtual e obter a sua chave & segredo da API, poderá usar a biblioteca para enviar SMS como:
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 receber SMS, terá de configurar um servidor que consuma um webhook. Também é bastante simples. Eu recomendo verificar o nosso tutorial em recebendo SMS com Java .
divulgação: eu trabalho para a Nexmo
Pode fazer isto com um Modem GSM e uma Api de comunicações Java [experimentada e testada]
-
Primeiro você precisa definir Java Comm Api
Este artigo descreve em detalhe como configurar a Api de comunicação
Em seguida, você precisa de um Modem GSM (de preferência Módulo sim900)
Java JDK última versão preferível
-
No Guia de comandos
Código
Amostra de embalagem;
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"); } } }
Os Favoritos dão-lhe acesso ao seu shortcode partilhado para enviar e receber mensagens de texto da sua aplicação através da sua API. As mensagens vêm de / para 41411 (em vez de, por exemplo, um telefone Aleatório# e, ao contrário dos portais de E-mail, você tem os 160 caracteres completos para trabalhar).
Também pode dizer às pessoas para enviarem texto nas suas palavras-chave para 41411 para invocarem várias funcionalidades na sua aplicação. Há um cliente API JAVA, juntamente com várias outras linguagens populares e documentação muito abrangente e técnica suportar.
O teste gratuito de 14 dias pode ser facilmente estendido para desenvolvedores que ainda estão testando e construindo seus aplicativos.Veja aqui: Informação da API dos favoritos do texto
Você pode logar a API SMPP Java para enviar e receber SMS na aplicação Java. LOGICA SMPP é api bem comprovada na aplicação telecom. A API Logica também lhe fornece capicidade de sinalização na ligação TCP / IP.
Pode integrar-se directamente com vários operadores de telecomunicações em todo o mundo.Se você trabalha com uma empresa de SMS-gateway você provavelmente vai trabalhar através do protocolo SMPP (3.4 ainda é o mais comum), então dê uma olhada no OpenSMPP e jSMPP. Estas são poderosas libs para trabalhar com o SMPP.
Se vai trabalhar com o seu próprio hardware (por exemplo, um modem gsm), a maneira mais fácil de enviar mensagens é através de comandos AT, eles diferem dependendo do modelo, por isso, deve descobrir o que são os comandos AT apoiado pelo seu modem. Em seguida, se o seu modem tiver um IP e estiver aberto à ligação, poderá enviar comandos através do 'socket' de 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();
Caso contrário, irá trabalhar através de uma porta COM, mas o método é o mesmo (enviar comandos AT), poderá encontrar mais informações sobre como trabalhar com portas seriais aqui.
OMK.smpp. CONJUNTO. é a base em SMPP. e o simulador também está disponível gratuitamente
LOGICA SMPP API.
E outra opção é Kannel uma 'gateway' WAP e SMS livres.
Https://www.twilio.com/docs/java/install
Aqui está um exemplo a enviar uma mensagem SMS dos 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<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());
}
}
O Smslib é muito útil para este fim. o u pode ligar um modem ao seu pc e usar esta lib para enviar sms . Funciona. já o usei.
Também adoramos Java em Wavecell , mas esta pergunta pode ser respondida sem detalhes específicos da linguagem, Uma vez que temos uma API de descanso que irá cobrir a maioria das suas necessidades:
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!" }'
Veja estas perguntas se tiver problemas em Enviar pedidos HTTP em Java:
Para casos específicos, pode também considerar a utilização do a API SMPP e já mencionada a biblioteca JSMPP vai ajudar nisso.
Pode usar comandos AT & T para enviar sms através do modem GSM.