إرسال الرسائل القصيرة (SMS) باستخدام C# (.NET): دليل كامل للتكامل مع API
في العالم الحديث، تظل إشعارات الرسائل القصيرة (SMS) واحدة من أكثر الطرق موثوقية للتواصل مع المستخدم. في نظام C# (.NET)، توجد طرق عديدة لإرسال الرسائل - بدءًا من طلبات HTTP المباشرة وصولاً إلى استخدام حزم NuGet المتخصصة. في هذه المقالة، سنشرح كيفية إعداد إرسال الرسائل القصيرة عبر الخدمات الشائعة (Twilio, sms.ru, Smsc) باستخدام تطبيق خالص على HttpClient، بالإضافة إلى مراجعة مكتبة جاهزة للعمل مع المزودين الروس.
اختيار النهج: مكتبة أم HTTP خالص؟
لإرسال الرسائل القصيرة (SMS) في C#، هناك طريقتان رئيسيتان:
- استخدام SDK الرسمي (مثل Twilio لـ .NET) - يوفر واجهة محددة الأنواع، ومعالجة مدمجة للأخطاء، وتوثيقًا.
- العمل المباشر مع REST API عبر HttpClient - تحكم كامل في الطلب، وتبعيات قليلة، وإمكانية العمل مع أي مزود.
الخيار الثاني هو الأفضل للأغراض التعليمية والمشاريع التي تتطلب مرونة. سننظر فيه بالتفصيل.
التنفيذ الأساسي لإرسال الرسائل القصيرة عبر HTTP API
لننشئ فئة SmsService التي سترسل الرسائل عبر API sms.ru (أو أي خدمة أخرى ذات تنسيق مشابه).
using System;using System.Net.Http;using System.Threading.Tasks;
public class SmsService{ private readonly HttpClient _httpClient; private readonly string _apiKey;
public SmsService(string apiKey) { _httpClient = new HttpClient(); _apiKey = apiKey; }
public async Task<string> SendSmsAsync(string phone, string message) { var url = $"https://sms.ru/sms/send?api_id={_apiKey}&to={phone}&msg={Uri.EscapeDataString(message)}&json=1"; var response = await _httpClient.GetAsync(url); return await response.Content.ReadAsStringAsync(); }}الاستخدام:
var sms = new SmsService("مفتاح_API_الخاص_بك");string result = await sms.SendSmsAsync("+79123456789", "مرحبًا! هذه رسالة اختبارية.");Console.WriteLine(result);التحسين: عدم التزامن ومعالجة الأخطاء
في مشروع حقيقي، من الضروري إضافة التحقق من صحة الرقم، وإعادة المحاولة عند الفشل، وتسجيل الأخطاء. النسخة المحسّنة:
public async Task<SmsResult> SendSmsAsync(string phone, string message){ try { if (string.IsNullOrWhiteSpace(phone) || phone.Length < 10) return new SmsResult { Success = false, Error = "تنسيق الرقم غير صحيح" };
var url = $"https://sms.ru/sms/send?api_id={_apiKey}&to={phone}&msg={Uri.EscapeDataString(message)}&json=1"; var response = await _httpClient.GetAsync(url); var json = await response.Content.ReadAsStringAsync();
// تحليل JSON (يمكن استخدام System.Text.Json) var result = JsonSerializer.Deserialize<SmsApiResponse>(json); return new SmsResult { Success = result?.Status == "OK", Response = json }; } catch (HttpRequestException ex) { return new SmsResult { Success = false, Error = $"خطأ في الشبكة: {ex.Message}" }; }}لتحليل الاستجابة، أنشئ نموذجًا بسيطًا:
public class SmsApiResponse{ public string Status { get; set; } public int Balance { get; set; }}مكتبة جاهزة: Twilio لـ .NET
إذا كنت بحاجة إلى جاهزية للإنتاج، استخدم Twilio SDK (NuGet: Twilio). مثال:
using Twilio;using Twilio.Rest.Api.V2010.Account;
TwilioClient.Init("ACCOUNT_SID", "AUTH_TOKEN");
var message = MessageResource.Create( body: "مرحبًا من C#!", from: new PhoneNumber("+1234567890"), to: new PhoneNumber("+79123456789"));
Console.WriteL