واجهة SMS API
أرسل رسائل التحقق والإشعارات من نظامك مباشرة
طلب HTTPS GET واحد من الخادم الخلفي لديك. استخدم الـAPI لإرسال أكواد التحقق والإشعارات المعاملاتية من نظامك الخاص، داخل مصر.
متاحة داخل مصر فقط
ماذا يمكنك أن تبني
رسائل يطلقها نظامك في اللحظة المناسبة
-
أكواد تحقق OTP
كود تسجيل الدخول أو تأكيد العملية يصل إلى العميل خلال ثوانٍ من طلبه.
-
تأكيد الطلبات
رسالة تلقائية عند إتمام الطلب أو تغيّر حالته في متجرك.
-
تتبع الشحنات
إشعار عند خروج الشحنة أو اقتراب المندوب من العميل.
-
تنبيهات الأنظمة الداخلية
تذكير بموعد أو تنبيه تجديد أو إشعار فاتورة من نظامك مباشرة.
لمن هذه الواجهة
- المطورون وشركات البرمجيات
- المتاجر الإلكترونية
- تطبيقات الجوال
- أنظمة الأعمال الداخلية
- شركات الشحن والتوصيل
- أكواد التحقق OTP
- تنبيهات المعاملات المصرفية وماكينات الصراف الآلي
- إشعارات برامج الولاء والمكافآت
- تأكيدات معاملات الويب
في كل الحالات ترسل الواجهة تنبيهات وإشعارات يطلبها نظام العميل. لا تنفّذ الواجهة أي معاملة ولا ترتبط بأجهزة الصراف الآلي.
كيف تعمل
أربع خطوات من الحدث إلى الرسالة
-
يقع حدث في نظامك
تسجيل مستخدم، تأكيد طلب، خروج شحنة.
-
خادمك يبني الطلب
يجمع الأرقام والرسالة واللغة ويطبق URL encoding على كل قيمة.
-
طلب HTTPS GET إلى البوابة
من الخادم الخلفي فقط، لا من المتصفح ولا من التطبيق.
-
ترد البوابة بنص عادي
تتحقق من الرد بمطابقة صارمة قبل اعتباره ناجحًا.
الربط الفني
طلب واحد من الخادم لديك
https://sms.masrbokra.com/sendsms.php
- البروتوكول
- HTTPS
- الطريقة
- GET
- صيغة الطلب
- Query parameters مع URL encoding
- صيغة الاستجابة
- نص عادي، وليس JSON
- الترميز
- UTF-8
حقول الإرسال المطلوبة
| الحقل | النوع | الوصف |
|---|---|---|
user | String | اسم مستخدم حساب الـAPI |
password | String | كلمة مرور حساب الـAPI |
numbers | String | رقم دولي واحد أو أرقام مفصولة بفواصل |
sender | String | اسم المرسل المعتمد على الحساب |
message | String | نص الرسالة بترميز UTF-8 |
lang | Enum | لغة الرسالة: en أو ar |
استجابة قبول الطلب
11:<valid-recipient-list>
ترد البوابة بنص عادي: 1 عند قبول الطلب، أو 1 متبوعة بقائمة الأرقام المقبولة. جداول الاستجابات الكاملة في دليل التكامل.
الاستعلام عن الرصيد
نفس العنوان مع user و password و action=get. تعيد البوابة قيمة رقمية كنص عادي قد تحتوي كسورًا عشرية.
ملاحظة تنفيذية: احتفظ ببيانات الاتصال على الخادم. الاستدعاء يتم من الخادم الخلفي لديك، لا من المتصفح ولا من داخل تطبيق الجوال.
أمثلة الكود
أمثلة تكامل من الخادم
بيانات حسابك تصلك عبر قناة آمنة منفصلة بعد التفعيل.
# Credentials come from the environment, never from the command line
# (a literal password would land in your shell history).
curl --get "https://sms.masrbokra.com/sendsms.php" \
--data-urlencode "user=$MASRBOKRA_SMS_USER" \
--data-urlencode "password=$MASRBOKRA_SMS_PASSWORD" \
--data-urlencode "numbers=201001234567" \
--data-urlencode "sender=YOUR_SENDER" \
--data-urlencode "message=Your order has shipped." \
--data-urlencode "lang=en" \
--connect-timeout 10 \
--max-time 20 \
--no-retry-all-errors
# The reply is plain text: "1", or "1:201001234567", or an error string. <?php
// Server-side only. Never call this endpoint from browser JavaScript.
$params = [
'user' => getenv('MASRBOKRA_SMS_USER'),
'password' => getenv('MASRBOKRA_SMS_PASSWORD'),
'numbers' => '201001234567',
'sender' => getenv('MASRBOKRA_SMS_SENDER'),
'message' => 'Your order has shipped.',
'lang' => 'en',
];
// http_build_query URL-encodes every value, including the Arabic ones.
$url = 'https://sms.masrbokra.com/sendsms.php?' . http_build_query($params);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 20,
]);
$body = curl_exec($ch);
curl_close($ch);
$reply = trim((string) $body);
// Strict match. startsWith('1') would also accept "10" and "11:...".
$accepted = $reply === '1'
|| preg_match('/^1:[1-9]\d{7,14}(,[1-9]\d{7,14})*$/', $reply) === 1;
// Log the reply, never $url — it contains the password and the message text.
error_log('MasrBokra reply: ' . $reply);
// Acceptance is not delivery. Do not resend automatically on a timeout:
// the gateway may already have accepted the request. // Server-side only (an API route, a worker, a cron job) — never the browser.
const ACCEPTED = /^1:[1-9]\d{7,14}(?:,[1-9]\d{7,14})*$/;
export async function sendSms({ numbers, message, lang = 'en' }) {
// URLSearchParams encodes every value for us.
const params = new URLSearchParams({
user: process.env.MASRBOKRA_SMS_USER,
password: process.env.MASRBOKRA_SMS_PASSWORD,
numbers,
sender: process.env.MASRBOKRA_SMS_SENDER,
message,
lang,
});
const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), 20_000);
let reply;
try {
const res = await fetch(
`https://sms.masrbokra.com/sendsms.php?${params}`,
{ signal: controller.signal },
);
reply = (await res.text()).trim();
} finally {
clearTimeout(timer);
}
// Log the reply only. The URL carries the password and the message body.
console.log('MasrBokra reply:', reply);
// Accepted by the gateway — which is not the same as delivered to a handset.
return { accepted: reply === '1' || ACCEPTED.test(reply), reply };
}
// On AbortError, surface it for a human to check the balance or the account
// log. Do not retry on a schedule: the send may already have gone through. import os
import re
import requests
ACCEPTED = re.compile(r"^1:[1-9]\d{7,14}(?:,[1-9]\d{7,14})*$")
def send_sms(numbers: str, message: str, lang: str = "en") -> tuple[bool, str]:
"""Send through the MasrBokra gateway. Server-side use only."""
params = {
"user": os.environ["MASRBOKRA_SMS_USER"],
"password": os.environ["MASRBOKRA_SMS_PASSWORD"],
"numbers": numbers,
"sender": os.environ["MASRBOKRA_SMS_SENDER"],
"message": message,
"lang": lang,
}
# requests URL-encodes params, including UTF-8 Arabic text.
response = requests.get(
"https://sms.masrbokra.com/sendsms.php",
params=params,
timeout=(10, 20), # connect, read
)
reply = response.text.strip()
# Log the reply, never response.url — it contains the password.
print("MasrBokra reply:", reply)
# Strict match, not reply.startswith("1").
accepted = reply == "1" or bool(ACCEPTED.match(reply))
# Accepted != delivered. Let a requests.Timeout raise rather than retrying
# in a loop, because the gateway may already have taken the request.
return accepted, reply صيغة الأرقام
الصيغة الدولية بالأرقام فقط، بدون + وبدون مسافات أو شرطات. البوادئ المصرية المدعومة: 010 و011 و012 و015.
| الإدخال المحلي | القيمة المرسلة |
|---|---|
01001234567 | 201001234567 |
01112345678 | 201112345678 |
01212345678 | 201212345678 |
01512345678 | 201512345678 |
باقات الرسائل
كلما زادت الباقة انخفض سعر الرسالة
نفس الباقات تُستخدم مع الرسائل الجماعية ومع الـAPI. الرصيد واحد على حسابك.
| عدد الرسائل | السعر | سعر الرسالة |
|---|---|---|
| 1,000 | 270 ج.م | 0.270 ج.م |
| 5,000 | 1,350 ج.م | 0.270 ج.م |
| 10,000 | 2,650 ج.م | 0.265 ج.م |
| 20,000 | 5,200 ج.م | 0.260 ج.م |
| 50,000 | 12,750 ج.م | 0.255 ج.م |
| 100,000 | 25,000 ج.م | 0.250 ج.م |
| 150,000 أقل سعر للرسالة | 36,750 ج.م | 0.245 ج.م |
جميع الأسعار لا تشمل ضريبة القيمة المضافة 14%.
اطلب باقتكتفعيل اسم المرسل
اسم شركتك على الرسالة بدل رقم مجهول
تفعيل واحد لاسم المرسل يخدم الرسائل الجماعية وواجهة الـAPI معًا.
- رسوم التفعيل
- 2,150 ج.م
- مدة التفعيل
- من 7 إلى 10 أيام عمل
- المستندات المطلوبة
-
- السجل التجاري
- البطاقة الضريبية
رسوم التفعيل لا تشمل ضريبة القيمة المضافة. تطبق الشروط والأحكام.
تحدث مع الفريق الفنيابدأ الربط مع فريقنا
يساعدك فريقنا الفني في تهيئة الحساب وخطوات الاختبار ومتابعة أي مشكلة في الإرسال بعد التشغيل.
- تكامل خفيف عبر طلبات HTTPS GET
- معالجة استجابات نصية مباشرة
- إرسال الرسائل والاستعلام عن الرصيد
- تسليم بيانات الحساب بصورة منفصلة وآمنة
أسئلة شائعة
أسئلة عن واجهة SMS API
ما الذي أحتاجه للبدء؟
حساب API واسم مرسل مفعّل ورصيد رسائل. نجهز لك الحساب ونرسل بيانات الاتصال ودليل التكامل لفريقك الفني.
ما لغات البرمجة المدعومة؟
أي لغة تستطيع إرسال طلب HTTPS. الدليل يتضمن أمثلة جاهزة بـ cURL وPHP وNode.js وPython.
هل الرصيد مشترك مع الرسائل الجماعية؟
نعم. نفس الباقات ونفس الرصيد يخدمان المنصة والـAPI معًا، ويمكنك استخدامهما بالتوازي على الحساب نفسه.
هل يمكن جدولة الإرسال؟
الجدولة متاحة في منصة الرسائل الجماعية. ومع الـAPI ينفذ نظامك الجدولة عنده ثم يستدعي الواجهة في الوقت الذي تحدده.
ابدأ الربط
أخبرنا بنظامك وحجم الإرسال المتوقع، ونجهز الحساب واسم المرسل ونرسل الدليل الكامل لفريقك.