जवाबों:
(डिस्क्लेमर: मैं ट्विलियो में काम करता हूं)
Twilio , Twilio REST API के माध्यम से एसएमएस भेजने के लिए एक जावा एसडीके प्रदान करता है ।
यदि आप चाहते हैं कि सभी सरल सूचनाएं हैं, तो कई वाहक ईमेल के माध्यम से एसएमएस का समर्थन करते हैं; ई-मेल के माध्यम से एसएमएस देखें
जावा में मैंने जो सबसे अच्छा एसएमएस एपीआई देखा है वह JSMPP है। यह शक्तिशाली, उपयोग करने में आसान है, और मैंने इसे खुद को एक उद्यम-स्तर के अनुप्रयोग (20K एसएमएस संदेश प्रतिदिन भेजने) के लिए उपयोग किया है।
यह API मौजूदा SMPP API की वर्बोसिटी को कम करने के लिए बनाया गया है। यह बहुत ही सरल और उपयोग में आसान है क्योंकि यह निम्न स्तर के प्रोटोकॉल संचार की जटिलता को छुपाता है जैसे कि लिंक अनुरोध-प्रतिक्रिया को स्वचालित रूप से पूछते हैं।
मैंने कुछ अन्य एपीआई जैसे ओज़ेकी की कोशिश की है, लेकिन उनमें से ज्यादातर या तो वाणिज्यिक हैं या इसके थ्रूपुट में सीमा है (उदाहरण के लिए, एक सेकंड में 3 से अधिक एसएमएस संदेश नहीं भेज सकते हैं)।
एसएमएसलिब नामक एक एपीआई है, यह वास्तव में बहुत बढ़िया है। http://smslib.org/
अब आपके पास बहुत सारे सास प्रोवाइडर हैं जो आपको यह सेवा उनके एपीआई का उपयोग करके दे सकते हैं
Ex: mailchimp, esendex, Twilio, ...
सबसे पहले आपको Java Comm Api सेट करना होगा
यह आलेख विस्तार से बताता है कि संचार अपी को कैसे सेट किया जाए
अगला आपको एक जीएसएम मॉडम चाहिए (अधिमानतः sim900 मॉड्यूल)
जावा 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 + '\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");
}
}
}
आप SMS भेजने के साथ-साथ SMS प्राप्त करने के लिए Nexmo का उपयोग कर सकते हैं ।
Nexmo Java लाइब्रेरी के साथ एसएमएस भेजना काफी सीधा है। एक नया खाता बनाने के बाद , एक वर्चुअल नंबर को किराए पर लेना, और अपनी एपीआई कुंजी और रहस्य प्राप्त करके आप लाइब्रेरी का उपयोग एसएमएस भेजने के लिए कर सकते हैं:
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);
}
}
}
एसएमएस प्राप्त करने के लिए आपको एक सर्वर सेट करना होगा जो एक वेबहूक का उपभोग करता है। वह भी काफी सरल है। मैं जावा के साथ एसएमएस प्राप्त करने पर हमारे ट्यूटोरियल की जांच करने की सलाह देता हूं ।
प्रकटीकरण: मैं Nexmo के लिए काम करता हूं
TextMarks आप अपने एपीआई से पाठ संदेश भेजने और प्राप्त करने के लिए अपने साझा शोर्ट पर पहुँच देता है। संदेश / 41411 से आते हैं (उदाहरण के लिए एक यादृच्छिक फोन # और ई-मेल गेटवे के विपरीत आपके पास काम करने के लिए पूर्ण 160 वर्ण हैं)।
आप अपने ऐप में विभिन्न कार्यक्षमता को लागू करने के लिए लोगों को अपने कीवर्ड (एस) में 41411 पर पाठ करने के लिए भी कह सकते हैं। कई अन्य लोकप्रिय भाषाओं और बहुत व्यापक प्रलेखन और तकनीकी सहायता के साथ एक जावा एपीआई क्लाइंट है।
14 दिनों के नि: शुल्क परीक्षण को उन डेवलपर्स के लिए आसानी से बढ़ाया जा सकता है जो अभी भी इसका परीक्षण कर रहे हैं और अपने ऐप्स का निर्माण कर रहे हैं।
इसे यहाँ देखें: TextMarks API Info
जावा एप्लिकेशन में एसएमएस भेजने और रिसीव करने के लिए आप लॉग इन SMPP जावा एपीआई कर सकते हैं। टेलीकॉम एप्लिकेशन में लॉगिका एसएमपीपी अच्छी तरह से सिद्ध एपी है। लॉगिका एपीआई आपको टीसीपी / आईपी कनेक्शन पर सिग्नलिंग कैपिसिटी भी प्रदान करता है।
आप दुनिया के विभिन्न टेलीकॉम ऑपरेटर के साथ सीधे जुड़ सकते हैं।
दो तरीके हैं: पहला: एक एसएमएस एपीआई गेटवे का उपयोग करें जिसे आपको इसके लिए भुगतान करने की आवश्यकता है, हो सकता है कि आपको कुछ परीक्षण मुफ्त भी मिलें, लेकिन आप दुर्लभ हैं। दूसरा: अपने लैपटॉप से जुड़े मॉडेम जीएसएम के साथ एटी कमांड का उपयोग करने के लिए। बस इतना ही
यह इस बात पर निर्भर करता है कि आप कैसे काम करने वाले हैं और आपका प्रदाता कौन है।
यदि आप एक sms-Gateway कंपनी के साथ काम करते हैं, तो आप शायद SMPP प्रोटोकॉल के माध्यम से काम करेंगे (3.4 अभी भी सबसे आम है), तो OpenSMPP और jSMPP पर एक नज़र डालें। एसएमपीपी के साथ काम करने के लिए ये शक्तिशाली कामगार हैं।
यदि आप अपने स्वयं के हार्डवेयर (fe-gsm-modem) के साथ काम करने जा रहे हैं, तो संदेश भेजने का सबसे आसान तरीका एटी कमांड्स के माध्यम से है, वे अलग-अलग मॉडल पर निर्भर करते हैं, इसलिए, आपको यह पता लगाना चाहिए कि एटी कमांड आपके मॉडेम द्वारा समर्थित है या नहीं। । अगला, यदि आपके मॉडेम में एक आईपी और कनेक्शन के लिए खुला है, तो आप जावा सॉकेट के माध्यम से कमांड भेज सकते हैं
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 आदेश भेजना), आप अधिक जानकारी पा सकते हैं कि सीरियल पोर्ट के साथ कैसे काम करें ।
मैं टवीलियो जैसे क्लाउड आधारित समाधान का सुझाव देता हूं। क्लाउड-आधारित समाधान लागत-प्रभावी हैं, इन-हाउस समाधान की तुलना में कोई निरंतर रखरखाव नहीं है, आवश्यक है। ईमेल के माध्यम से एसएमएस एक सुरुचिपूर्ण समाधान नहीं है, क्योंकि आपको उपयोगकर्ता से वाहक जानकारी प्राप्त करनी है और आप कभी भी यह सुनिश्चित नहीं कर सकते हैं कि आप अपने मोबाइल नंबरों को टेक्स्ट कर सकते हैं। मैं सर्वर से एसएमएस भेजने के लिए अपने वेब एप्लिकेशन में ट्विलियो जावा एपीआई का उपयोग कर रहा हूं। कुछ ही मिनटों के भीतर, आप अपने ऐप के साथ एकीकृत कर सकते हैं।
https://www.twilio.com/docs/java/install
डॉक्स से एक एसएमएस संदेश भेजने का एक उदाहरण यहां दिया गया है:
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 इस उद्देश्य के लिए बहुत उपयोगी है कि आप अपने पीसी के साथ एक मॉडेम कनेक्ट कर सकते हैं और sms भेजने के लिए इस lib का उपयोग कर सकते हैं। यह काम करता है मैंने इसका इस्तेमाल किया है
वेवसेल में हम जावा को भी पसंद करते हैं , लेकिन इस सवाल का जवाब भाषा-विशिष्ट विवरण के बिना दिया जा सकता है क्योंकि हमारे पास एक 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 अनुरोध भेजने में समस्या होने पर इस प्रश्न को देखें:
विशिष्ट मामलों के लिए आप SMPP API का उपयोग करने पर विचार कर सकते हैं और पहले से ही उल्लेख किए गए JSMPP लाइब्रेरी से मदद मिलेगी।
आप इसके लिए ट्विलियो का उपयोग कर सकते हैं । लेकिन अगर आप कुछ पेचीदा वर्कअराउंड की तलाश में हैं तो आप नीचे बताए गए वर्कअराउंड का पालन कर सकते हैं।
यह एसएमएस प्राप्त करने के लिए संभव नहीं है। लेकिन यह एक ट्रिकी तरीका है जिसका इस्तेमाल करके आप sms को ग्राहकों की संख्या भेज सकते हैं। आप ट्विटर एपीआई का उपयोग कर सकते हैं। हम अपने मोबाइल फोन से sms से ट्विटर अकाउंट फॉलो कर सकते हैं। हमें सिर्फ ट्विटर पर एसएमएस भेजना है। कल्पना कीजिए कि हम उपयोगकर्ता नाम के साथ एक ट्विटर अकाउंट बनाते हैं @username
। फिर हम नीचे दिखाए अनुसार 40404 पर एसएमएस भेज सकते हैं।
follow @username
फिर हमें वो ट्वीट मिलने लगते हैं जो उस अकाउंट में ट्वीट किए जाते हैं।
इसलिए जब हम एक ट्विटर अकाउंट बनाते हैं तो हम उस अकाउंट से ट्वीट पोस्ट करने के लिए ट्विटर एपीआई का उपयोग कर सकते हैं। फिर सभी ग्राहक जो उस खाते का अनुसरण करते हैं जैसा कि मैंने ट्वीट करने से पहले शुरू किया था।
आप निम्न लिंक से ट्विटर एपीआई के साथ ट्वीट पोस्ट करना सीख सकते हैं।
इससे पहले कि आप विकसित करना शुरू करें आपको ट्विटर एप का उपयोग करने की अनुमति लेनी होगी। आप निम्न लिंक से ट्विटर एपीआई तक पहुंच प्राप्त कर सकते हैं।
यह आपकी समस्या का सबसे अच्छा समाधान नहीं है। लेकिन आशा है कि यह मदद करेगा।
आप जीएसएम मॉडम का उपयोग करके एसएमएस भेजने के लिए एटी एंड टी कमांड का उपयोग कर सकते हैं।