مدونة عادل خياطة

مدونة عربية للمبرمجين و المطورين

إرسال رسائل SMS

بواسطة عادل خياطة تعليقات 5

السلام عليكم.

ازدادت في الآونة الأخيرة الحاجة إلى إرسال إشعارات أو تنبيهات إلى الأشخاص لإعلامهم بوقوع حدث جديد, و هناك عدة طرق يمكن استخدامها من أجل ايصال هذه الاشعارات منها: الايميل و رسائل SMS و حتى برامج خاصة يتم إنتاجها لهذا الخصوص.

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

فالبنوك و الجهات الحكومية و شركات الشحن العالمي … الخ بدأت باستخدام هذه الخدمة لتكلفتها المنخفضة و لسهولة دمجها مع أي تطبيق سابق موجود في المؤسسة.

اليوم سأتكلم عن كيفية إرسال رسائل SMS عن طريق البرمجة باستخدام تكنولوجيا دوت نيت.

SendSMS

يوجد مواقع عدة تقدم خدمة إرسال الرسائل و التي تسمى: بوابة إس إم إس SMS Gateway

و هذه أمثلة عن هذه المواقع:

SMSGlobal

Intellisoftware

Waselny

طبعاً هذه المواقع ليست مجانية و عليك فتح حساب فيها ( يكون فيه بحدود 10 رسائل SMS مجانية لأغراض التجربة ).

لبناء المثال في تدوينة اليوم سأعتمد على بوابة SMS من موقع SMSGlobal لذلك إذا أردت تجربة المثال فعليك التوجه إلى موقعهم و إنشاء حساب تجريبي و من ثم استخدام اسم المستخدم و كلمة المرور في البرنامج للتجربة:

       String UserName = "MyUserName";
       String Password = "MyPassword";

 

و هذه المواقع تعتمد على مايسمى HTTP-API للتخاطب مع البرنامج و عادة تكون شبيهة ببعضها البعض و الفرق فقط في المسميات.

موقع SMSGlobal مثلاً يعتمد على الصفحة التالية: http://www.smsglobal.com/http-api.php في تلقي طلبات إرسال SMS و هذه الطلبات يتم إرسالها من البرنامج عن طريق طلب HTTP و هذا الطلب يتم صياغته و تجهيزه و من ثم إرساله باستخدام الكلاس: WebClient

و بالرجوع إلى موقع الشركة ( شرح الاستخدام ) نجد المعلومات المطلوبة من البوابة حتى يتم قبول عملية إرسال الرسالة و أهمها طبعاً:

اسم المستخدم – كلمة المرور – رقم المرسل – رقم/أرقام المستقبلين – نص الرسالة

الكود بسيط لهذه الجزئية:

WebClient client = new WebClient();
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
client.Headers.Add(“user-agent”, “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)”);
client.QueryString.Add(“action”, “sendsms”);
client.QueryString.Add(“user”, UserName);
client.QueryString.Add(“password”, Password);
client.QueryString.Add(“from”, “FromMe”);
client.QueryString.Add(“to”, smsTo);
client.QueryString.Add(“text”, Uri.EscapeDataString(message));
client.QueryString.Add(“maxsplit”, “5”);

string baseurl = “http://www.smsglobal.com/http-api.php”;

Uri uri = new Uri(baseurl);
client.OpenReadAsync(uri);

هنا يتم استخدام الإجراء: OpenReadAsync لإرسال الطلب و إرجاع التحكم إلى البرنامج مباشرة حتى لا يسبب عدم استجابة البرنامج أثناء الارسال.

وعند اكتمال الارسال, يتم استدعاء الإجراء: client_OpenReadCompleted الذي تم تحديده في الكود السابق و فيها نستطيع معرفة إذا ماتم إرسال الرسالة بنجاح أم لا و يتم عرض النتيجة في حقل النتيجة.

من الأمور المهمة عند إرسال رسالة واحدة إلى عدة مستخدمين أن تقوم بإرسالها عن طريق طلب واحد لأن ذلك أسرع بكثير و يتم وضع الأرقام واحداً تلو الآخر مفصولين بالفاصلة ( , ) و وضعه في حقل ال to.

ملاحظة أخيرة: رقم الموبايل يتم كتابته بالصيغة الدولية المتعارف عليها و لكن بدون 00 أو + مثل:

97155xxxxxxx

الكود المصدري

Be Sociable, Share!
التصنيفات: .NET, Programming

About عادل خياطة

مهندس كومبيوتر

تعليقات 5 حتى الأن.

  1. يقول Ghufran:

    يعطيك العافية شغل متعوب عليه

  2. يقول Anas:

    أتوقع أن موقع أس أم أس جلوبال قد تجاوز مشكلة إضافة صفرين قبل الرقم الدولي… بمعنى أنه لو وضعت صفرين أو لم تضع الصفرين فالرسالة ستصل إلى المستلم.

    أرجو التأكد من ذلك.

  3. يقول عادل خياطة:

    في كتيب الاستخدام ل HTTP API المذكور هو فقط أن لا يتم استخدام “+” قبل الرقم الدولي و لم يذكر أي شيء عن ال “00” و قمت بتجربتها من البرنامج و أعطاني Error 102 عند محاولة الارسال مما يعني أنها لن تعمل.
    الغريب في الأمر أنني جربت إرسال رسالة إلى رقم وضعت فيه ال “00” من الموقع مباشرة فتم ارسال الرسالة بنجاح!!
    يبدو أنهم أضافوا مرحلة تشييك إضافية في ال API ليست موجودة في موقعهم.

    • يقول Anas:

      نعم وأنا استغربت كذلك من ساعتين فقط جربت إرسال بوضع إشارة الزائد قبل الرقم وتم إرسال الرسالة. مع العلم أن أكبر ميزة مزعجة عندهم كان موضوع وضع الصفرين يعتبر خطأ… على العموم الآن تعمل بشكل أفضل.

      بخصوص إرسال رسائل أس أم أس… أنا أعتبره أفضل وأرخص خدمة تعمل بالشرق الأوسط. هل تشاطرني الرأي؟

      • يقول عادل خياطة:

        نعم هي رخيصة و أفضل من أي طرق أخرى لايصال المحتوى إلى المستقبل و لكنها غير مستقرة و غير مضمونة, فأنا أعاني من هذه المشكلة عند ارسال رسائل في عملي, فأنا أرسل أسعار أونصة الذهب عند تغيرها إلى الموظفين ووصول الرسالة مباشرة بعد ارسالها مهم جداً لأن سعر الأونصة متقلب بشكل سريع في بعض الأحيان.
        الذي يحدث أن الرسائل في بعض الأحيان يتم ارسالها عن طريق البوابة مباشرة و لكنها تتأخر في مخدم شركات الاتصالات حتى يتم توصيلها إلى المستقبل ( برأيي هذا يحدث بسبب انتشار خدمة الرسائل عند عدد كبير من الشركات/البنوك/المؤسسات/الأفراد … الذي يسبب ضغطاً هائلاً على سيرفرات شركات الاتصالات)
        في بعض الخدمات تأخر وصول الرسالة ليس له تأثير مثل اعلان عن تخفيضات لمحل ما, و لكن في حالة أسعار الأونصة و كما في البنوك في حال إرسال رسالة عند حدوث عملية سحب من الحساب, فهذا النوع من الاشعارات يجب أن يصل إلى المستقبل “مباشرة” بدون أي تأخير.
        أنا بحثت طويلاً إذا كانت شركات الاتصالات لديها خدمة “رسائل مضمونة” و لكن للأسف لم أجدها.
        بالنهاية: الخدمة حالياً هي الحل الأمثل و لكن ليس الكامل.

يجب أن تكون مسجل لتتمكن من اضافة تعليق .

  • RSS
  • Delicious
  • Digg
  • Facebook
  • Twitter
  • Linkedin
  • Youtube

الأكثر قراءة

إرسال رسائل SMS

السلام عليكم. ازدادت في الآونة الأخيرة الحاجة إلى إرسال إشعارات أو ...

مشكلة تخزين التعديلات على الجداول ف

السلام عليكم. عندما تنفذ إحدى التعديلات التالية على أحد الجداول في ...

على بركة الله

بسم الله و الحمد لله و الصلاة و السلام على ...

تفقيط الأرقام

السلام عليكم. في هذه التدوينة سأتكلم عن تفقيط الأرقام باللغة العربية. قبل ...

ربط مشروع برمجي في SQL Server مع TFS

السلام عليكم. امتداداً للتدوينة السابقة حول تثبيت Team Foundation Server فأردت ...