استقبال الرسائل القصيرة (SMS) في جافا

سيقدم لك الدليل في هذه الصفحة مقدمة موجزة عن كيفية الحصول على الرسائل المستلمة من بوابة الرسائل القصيرة (SMS Gateway) إلى تطبيق جافا الخاص بك. يتم توضيح هذه العملية من خلال كود جافا بسيط يستخدم طلبات HTTP لجمع الرسائل الواردة من بوابة الرسائل القصيرة. إذا اتبعت هذا الدليل، ستتعلم كيفية إنشاء تطبيق جافا نموذجي يحصل على الرسائل من مجلد الوارد، وسوف تتمكن من رؤية كيفية اختبار الحل. لذا، دعونا نبدأ.

ما هي واجهة برمجة تطبيقات الرسائل القصيرة (SMS API) لجافا؟

تمكنك واجهة برمجة تطبيقات الرسائل القصيرة (SMS API) لجافا من تنفيذ خدمات الرسائل القصيرة في تطبيق جافا الخاص بك. تتواصل الواجهة مع بوابة الرسائل القصيرة باستخدام طلبات HTTP التي ترسل الرسالة وتعود برسالة استجابة.

المتطلبات الأساسية

استقبال الرسائل القصيرة في جافا
  1. افتح Apache NetBeans IDE
  2. أنشئ تطبيق جافا جديد
  3. أنشئ فئة جافا جديدة
  4. انسخ والصق مثال الكود المصدري أدناه
  5. اكتب 'https://localhost:9515' في متصفحك لفتح بوابة الرسائل القصيرة
  6. اختر اتصال خادم HTTP وافتح نموذج HTML الخاص به
  7. أرسل بعض الرسائل الاختبارية
  8. شغل تطبيق جافا لاستقبال الرسائل

الفيديو 1 - كيفية استقبال الرسائل القصيرة في جافا (شرح بالفيديو)

كود جافا المثال أدناه الذي يمكنه استقبال الرسائل الواردة من بوابة الرسائل القصيرة متاح للاستخدام مجانًا، يمكنك تعديله أو استخدامه في مشروعك. إذا كنت ترغب فقط في اختبار الحل، تحتاج إلى اتباع التعليمات خطوة بخطوة أدناه أو يمكنك أيضًا مشاهدة الفيديو أعلاه لمعرفة كيفية إنشاء تطبيق جافا المثال الذي يمكنه استقبال الرسائل الواردة من بوابة الرسائل القصيرة.

package ozeki;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.GeneralSecurityException;
import java.security.cert.X509Certificate;
import java.util.stream.Collectors;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.xml.parsers.*;
import org.xml.sax.InputSource;
import org.w3c.dom.*;
import java.io.*;

public class ReceiveSMS {
 
    public static void main(String[] args) {
 
        TrustManager[] trustAllCerts = new TrustManager[]{
            new X509TrustManager() {
                @Override
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return new X509Certificate[0];
                }
 
                @Override
                public void checkClientTrusted(
                        java.security.cert.X509Certificate[] certs, String authType) {
                }
 
                @Override
                public void checkServerTrusted(
                        java.security.cert.X509Certificate[] certs, String authType) {
                }
            }
        };
        try {
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
 
            HostnameVerifier allHostsValid = new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            };
            HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
 
        } catch (GeneralSecurityException e) {
            System.out.println(e.getMessage());
        }
 
        try {
            StringBuilder sendString = new StringBuilder();
            String username = "john";
            String password = "Xc3ffs";
            String httpUrl = "https://127.0.0.1:9508/";
            String folder = "inbox";
            String limit = "3";
 
            sendString.append(httpUrl).append("api?action=receivemessage&username=").
                    append(username).append("&password=").
                    append(password).append("&folder=").append(folder).
                    append("&limit=").append(limit).append("&afterdownload=delete");
 
            System.out.println("Sending request: " + sendString.toString());
 
            URL url = new URL(sendString.toString());
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("GET");
 
            BufferedReader br = null;
            System.out.println("Http response received: ");
            if (con.getResponseCode() == 200) {
                br = new BufferedReader(new InputStreamReader(con.getInputStream()));
                String response =  br.lines().collect(Collectors.joining("\n"));
                response = response.substring(response.indexOf('\n')+1);
                response = response.substring(response.indexOf('\n')+1);
                DisplayMessages(response);
  
            } else {
                br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
                String response =  br.lines().collect(Collectors.joining("\n"));
                System.out.println(response);
            }
            
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }
    }
    
    static void DisplayMessages(String response) {
        try{
            DocumentBuilderFactory dbf =
                DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(response));

            Document doc = db.parse(is);
            NodeList nodes = doc.getElementsByTagName("message");
            
            for (int i = 0; i < nodes.getLength(); i++) {
                Element element = (Element) nodes.item(i);

                NodeList originator = element.getElementsByTagName("originator");
                Element line = (Element) originator.item(0);
                String sender = getCharacterDataFromElement(line);
                
                NodeList messagedata = element.getElementsByTagName("messagedata");
                line = (Element) messagedata.item(0);
                String text = getCharacterDataFromElement(line);
                DisplayMessage(sender, text);
            }
        } catch (Exception ex) {
            System.out.println("The inbox is empty");
        } 
    }
    public static void DisplayMessage(String sender, String text) {
        System.out.println(sender + ": "+ text);
    }
      
    public static String getCharacterDataFromElement(Element e) {
        Node child = e.getFirstChild();
        if (child instanceof CharacterData) {
           CharacterData cd = (CharacterData) child;
           return cd.getData();
        }
        return "?";
      }
}

الخطوة 1 - افتح Apache NetBeans IDE

لتتمكن من إنشاء تطبيق جافا، تحتاج إلى تطبيق قادر على فعل ذلك. أحد هذه التطبيقات هو Apache NetBeans IDE والذي يمكن تنزيله من قسم المتطلبات المسبقة أعلاه. إذا كان لديك بالفعل هذا البيئة التطويرية، فما عليك سوى فتحها من سطح المكتب كما ترى في الشكل 1.

فتح netbeans
الشكل 1 - افتح Apache NetBeans

الخطوة 2 - إنشاء تطبيق جافا جديد

بعد فتح Apache NetBeans IDE، أول شيء تحتاج إلى فعله هو إنشاء تطبيق جافا. لذلك، اختر خيار 'New project..' من شريط الأدوات. بهذا الإجراء، تظهر نافذة تحتوي على جميع المشاريع المتاحة التي يمكن إنشاؤها في Apache NetBeans. هنا، اختر خيار تطبيق جافا كما في الشكل 2، وأخيرًا، انقر على 'Next'.

إنشاء مشروع جديد
الشكل 2 - إنشاء مشروع تطبيق جافا جديد

الخطوة 3 - تكوين تطبيق جافا

قبل إنشاء تطبيق جافا، تحتاج إلى إجراء بعض التكوينات عليه. هنا في هذه القائمة، تحتاج إلى تحديد اسم للمشروع، يمكنك أيضًا تحديد موقع للمشروع. يمكن تحديد اسم الحزمة هنا أيضًا. إذا انتهيت من جميع التكوينات، فقط انقر على 'Finish' كما في الشكل 3.

تكوين المشروع
الشكل 3 - تكوين اسم المشروع والحزمة

الخطوة 4 - إنشاء فئة جافا

بعد إنشاء تطبيق جافا، يجب عليك إنشاء فئة جافا حيث أنه لا يحتوي على أي فئة بعد. لذلك، حدد الحزمة بالنقر بزر الماوس الأيمن، ثم 'New'، وكما يظهر الشكل 4، انقر على 'Java class...'. ثم، تحتاج إلى تحديد اسم لفئة جافا وإذا انتهيت، فقط انقر على 'Create'.

إنشاء فئة جافا جديدة
الشكل 4 - إنشاء فئة جافا جديدة

الخطوة 5 - استبدال كود جافا من هذه الصفحة

في هذه المرحلة، لديك تطبيق جافا الذي تحتاجه، لكنه لا يحتوي على الكود الصحيح. لإصلاح ذلك، تحتاج إلى استبدال الكود الأصلي بكود المثال من هذه الصفحة. لذا، انتقل إلى كود المثال، وانسخه إلى الحافظة باستخدام اختصار لوحة المفاتيح Ctrl+C. ثم، انتقل إلى فئة جافا التي تم إنشاؤها، وقم أولاً بحذف الكود الموجود هنا. بعد ذلك، اضغط على Ctrl+V للصق كود المثال في فئة جافا كما تراه في الشكل 5.

استبدال كود جافا
الشكل 5 - استبدال كود جافا من الموقع

الخطوة 6 - إرسال بعض الرسائل الاختبارية

قبل تشغيل تطبيق جافا المثال، تحتاج إلى وجود بعض الرسائل الواردة التي يمكن جمعها بواسطة التطبيق. يوفر لك SMS Gateway الفرصة لمحاكاة الرسائل الواردة حتى تتمكن من اختبار الحل الخاص بك. لذلك، فقط افتح SMS Gateway واختر اتصال HTTP Server. إذا لم يكن لديك اتصال HTTP Server، تحقق من كيفية إنشاء اتصال HTTP Server. هنا، افتح النموذج HTML لهذا الاتصال، وكما في الشكل 6، أرسل بعض الرسائل الاختبارية.

محاكاة رسائل واردة
الشكل 6 - محاكاة بعض الرسائل الواردة

الخطوة 7 - تشغيل تطبيق جافا

الخطوة الأخيرة من هذا الدليل هي تشغيل تطبيق جافا. هذه عملية بسيطة؛ كل ما تحتاج إلى فعله هو النقر على زر 'Run' في Apache NetBeans كما في الشكل 7. هذا الإجراء يقوم بتشغيل كود جافا المثال، والذي يطبع طلب HTTP الذي تم إرساله إلى SMS Gateway، ثم يطبع أيضًا الرد من SMS Gateway والذي يحتوي على جميع الرسائل الواردة.

تشغيل كود جافا
الشكل 7 - تشغيل كود جافا في NetBeans لاستقبال SMS

لخص ذلك

هذا الدليل الذي قرأته للتو يقدم لك معلومات حول كيفية استقبال رسائل SMS من SMS Gateway باستخدام تطبيق جافا. باستخدام واجهة برمجة تطبيقات جافا للرسائل القصيرة، يمكنك الاستفادة من موارد لغة جافا واستخدامها للتحكم في SMS Gateway. واجهة برمجة تطبيقات جافا المدمجة مع Ozeki SMS Gateway ستشكل نظامًا قويًا لإرسال الرسائل القصيرة قادرًا على إرسال ما يصل إلى 1000 رسالة في الثانية.

إذا كنت ترغب في معرفة المزيد من الأفكار المفيدة حول مزايا حلول واجهات برمجة التطبيقات المماثلة الأخرى، قم بزيارة صفحتنا حول استخدام Python لإدارة حركة الرسائل القصيرة.

إذا كنت بحاجة إلى إعادة توجيه البريد الإلكتروني إلى الرسائل القصيرة ولم تقم بذلك بالفعل، قم بتنزيل Ozeki SMS Gateway الآن وقم بإنشاء هذا الإعداد!