BroadNet
المجلةهندسة
هندسة

التعبئة التلقائية لـ SMS OTP: Android SMS Retriever، وiOS one-time-code، وتنسيق رسائل WebOTP

يمكن لرموز SMS أن تُعبأ تلقائياً في Android وiOS والويب إذا تم تنسيق الرسالة لذلك: هاش التطبيق المكون من 11 حرفاً لـ SMS Retriever Android، وautocomplete="one-time-code" لنظام iOS وSafari، وسطر أخير من @your-domain #code لـ WebOTP. إليك كل تنسيق ونموذج واحد يعمل مع الثلاثة معاً.

8 دقائق قراءة
هندسة · العدد 40
8 دقائق قراءة

مكن لرموز SMS لمرة واحدة (OTP) أن تُعبأ تلقائياً إذا تم تنسيق الرسالة للمنصة. في Android، يقرأ SMS Retriever API رسالة لا تتجاوز 140 بايت، وتحتوي على الرمز وتتضمن هاش مكون من 11 حرفاً يحدد تطبيقك. في iOS وSafari، يتم تمييز حقل الإدخال بـ autocomplete="one-time-code" (textContentType oneTimeCode في التطبيقات الأصلية) وتقترح لوحة المفاتيح الرمز. أما على الويب، فيقرأ WebOTP API رسالة يكون سطرها الأخير @your-domain #code. يمكن لنموذج واحد أن يلبي احتياجات الثلاثة.

النقاط الرئيسية

  • تزيل ميزة التعبئة التلقائية الحاجة إلى التبديل بين التطبيقات، مما يمنع فقدان المستخدمين في المرحلة ما بين استلام الرمز وكتابته.
  • Android SMS Retriever: رسالة لا تتجاوز 140 بايت، تحتوي على الرمز وهاش التطبيق المكون من 11 حرفاً؛ ولا تتطلب إذن SMS.
  • Android SMS User Consent: بدون هاش؛ يجب أن تحتوي الرسالة على رمز أبجدي رقمي مكون من 4 إلى 10 أحرف مع رقم واحد على الأقل؛ ويقوم المستخدم بالنقر للموافقة.
  • iOS وSafari: autocomplete="one-time-code" في حقل الإدخال؛ السطر الأخير المرتبط بالنطاق يتيح ميزة الاقتراح في Safari.
  • WebOTP: السطر الأخير @domain #code، بدون مخطط (scheme) أو منفذ (port) أو مسار (path)؛ مدعوم في Chrome على Android وأجهزة سطح المكتب.

لماذا تهم ميزة التعبئة التلقائية لـ OTP؟

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

كيف تعمل API SMS Retriever Android؟

تتيح API SMS Retriever لتطبيق Android الخاص بك استقبال رسالة التحقق دون طلب إذن القراءة لـ SMS. تحدد وثائق Google ثلاث قواعد للرسالة:

  • ألا تتجاوز 140 بايت؛
  • أن تحتوي على رمز التحقق لمرة واحدة (OTP) الذي يرسله التطبيق مرة أخرى إلى خادمك؛
  • أن تتضمن سلسلة هاش (hash) مكونة من 11 حرفاً تحدد تطبيقك.

يتم حساب الهاش من اسم حزمة تطبيقك وشهادة التوقيع الخاصة بها: أضف اسم الحزمة إلى الصيغة الست عشرية (hex) للشهادة، ثم خذ SHA-256، وقم بتشفيرها باستخدام base64 واحتفظ بأول 11 حرفاً. عادةً ما يتم توقيع إصدارات التصحيح (debug) وإصدارات النشر (release) بمفاتيح مختلفة، لذا يكون لها هاش مختلف. يقوم خادمك بإضافة الهاش الصحيح عند بناء الرسالة.

عندما لا تتمكن من وضع هاش التطبيق في الرسالة، على سبيل المثال لأن القالب مشترك مع قنوات أخرى، تظهر API SMS User Consent الخاصة بـ Android للمستخدم مطالبة للسماح لتطبيقك بقراءة رسالة واحدة. وفقاً لـ Google، يجب أن تحتوي الرسالة على سلسلة أبجدية رقمية تتراوح بين 4 إلى 10 أحرف مع رقم واحد على الأقل، وإذا قمت بتحديد معرّف مُرسِل، يجب أن تأتي الرسالة من ذلك المُرسِل. يستمع API لمدة خمس دقائق تقريباً بعد تشغيله ثم تنتهي مهلته.

كيف تعمل خاصية التعبئة التلقائية OTP على نظام iOS؟

يوفر نظام iOS ميزة التعبئة التلقائية لرمز التحقق من لوحة المفاتيح. في التطبيقات الأصلية، قم بضبط textContentType حقل النص إلى oneTimeCode؛ أما في صفحات الويب، فأضف autocomplete="one-time-code" إلى حقل الإدخال. عندما تصل SMS مطابقة، يظهر الرمز فوق لوحة المفاتيح ويقوم المستخدم بالنقر عليه. لا يطبق متصفح Safari ميزة WebOTP JavaScript API، ولكن تشير وثائق WebOTP الخاصة بمتصفح Chrome إلى أنه باستخدام وسم الإكمال التلقائي، تقترح لوحة المفاتيح الافتراضية الرمز إذا كان SMS يتبع تنسيق النطاق الموضح أدناه (iOS 14 و macOS Big Sur أو الإصدارات الأحدث).

ما هو تنسيق رسالة WebOTP؟

تسمح API WebOTP لصفحة الويب بقراءة الرمز باستخدام navigator.credentials.get({ otp: { transport: ['sms'] } }). يجب أن تبدأ SMS بنص قابل للقراءة من قبل البشر وتنتهي بسطر أخير بهذا التنسيق:

snippet
Your BroadNet code is 482913.
@www.example.com #482913
  • يبدأ السطر الأخير بـ @ متبوعاً بنطاق الصفحة التي تطلب الرمز.
  • مسافة واحدة، ثم # والرمز.
  • لا يُستخدم مخطط (scheme) أو منفذ (port) أو مسار (path) في النطاق، ولا توجد مسافات بداخله.
  • يجب أن يحتوي الجزء القابل للقراءة من قبل البشر على الرمز أيضاً، وذلك للأشخاص الذين يقرأون الرسالة.

احتفظ دائماً بـ autocomplete="one-time-code" في حقل الإدخال أيضاً، حتى تظل المتصفحات التي لا تدعم WebOTP توفر الرمز.

هل يمكن لقالب SMS واحد أن يعمل على جميع المنصات؟

نعم، إذا ظل ضمن حد الـ Android بايت وكانت الأسطر بالترتيب الصحيح. إليك قالب مدمج:

snippet
Your BroadNet code is 482913. Do not share it.
FA+9qCX9VSu
@www.example.com #482913
المنصةما الذي يقرأ الرمزما تحتاجه الرسالة
تطبيق AndroidSMS Retriever APIالرمز ورمز هاش التطبيق المكون من 11 حرفاً؛ بحد أقصى 140 بايت
تطبيق Android (بدون هاش)واجهة برمجة تطبيقات SMS User Consent APIرمز أبجدي رقمي مكون من 4 إلى 10 أحرف مع رقم واحد على الأقل
تطبيق iOSالتعبئة التلقائية لرمز الأمان (oneTimeCode)رمز يمكن التعرف عليه؛ يُوصى باستخدام سطر مرتبط بالنطاق
Safari (iOS, macOS)autocomplete="one-time-code"السطر الأخير @domain #code
Chrome (Android, desktop)WebOTP APIالسطر الأخير @domain #code

الهاش (hash) المعروض هو مجرد نموذج: استخدم القيمة الخاصة بتطبيقك. حافظ على القالب ضمن مجموعة رموز GSM-7 ليبقى في مقطع واحد؛ حيث إن استخدام رمز تعبيري (emoji) أو حرف مشكّل سيحول الرسالة بالكامل إلى Unicode، مما يقلل المساحة المتاحة إلى النصف وقد يتسبب في تجاوز سعة الـ 140 بايت. اطلع على الترميز وتقسيم الرسائل SMS.

كيف يمكنك إرسال هذه الرسائل باستخدام BroadNet؟

قم ببناء الرسالة على خادمك الخاص وإرسالها عبر OTP API أو SMS API؛ علامات السطر الجديد هي جزء من نص الرسالة. في حال عدم وصول الرمز، توفر منتجات OTP من BroadNet خاصية التحوّل الاحتياطي عبر SMS و WhatsApp والصوت و Flash Call، كما يقوم MyOTP.App بإرسال الرموز عبر SMS أو WhatsApp أو Telegram من حساب واحد. للاطلاع على تدفق العملية بالكامل، اقرأ كيفية بناء تدفق OTP ودليلنا لـ التحقق متعدد القنوات OTP.

الأسئلة الشائعة

لماذا لا يقرأ تطبيق Android الخاص بي OTP SMS؟

عادةً ما يكون هاش التطبيق (app hash) في الرسالة غير مطابق للإصدار (تختلف مفاتيح debug عن release)، أو أن الرسالة أطول من 140 بايت، أو أن المستمع (listener) بدأ العمل بعد وصول الرسالة.

هل أحتاج إلى إذن SMS لتعبئة الرموز تلقائياً في Android؟

لا. يعمل كل من API SMS Retriever و API SMS User Consent دون الحاجة إلى إذن القراءة SMS.

كيف يمكنني تفعيل التعبئة التلقائية OTP على نظام iOS؟

قم بضبط textContentType على oneTimeCode في التطبيقات الأصلية (native app)، أو أضف autocomplete="one-time-code" إلى حقل الإدخال في صفحات الويب.

ما هو تنسيق SMS WebOTP؟

نص قابل للقراءة البشرية أولاً، ثم سطر أخير يبدأ بـ @ متبوعاً بنطاقك، ثم مسافة، ثم # والرمز، على سبيل المثال @www.example.com #482913.

هل يعمل WebOTP في متصفح Safari؟

لا يدعم Safari JavaScript API WebOTP، ولكن باستخدام autocomplete="one-time-code"، تقترح لوحة المفاتيح رموزاً من الرسائل بتنسيق مرتبط بالنطاق (domain-bound).

هل يمكنني استخدام قالب واحد لـ Android وiOS والويب؟

نعم: الرمز في النص، ورمز التطبيق (app hash) في سطر مستقل، وسطر الارتباط بالنطاق في النهاية، وكل ذلك ضمن 140 بايت.

تمت مراجعة قواعد المنصة في 28 سبتمبر 2026 في وثائق SMS Retriever وSMS User Consent الخاصة بـ Google (developers.google.com) ووثائق WebOTP الخاصة بـ Chrome (developer.chrome.com). اطلع على معاييرنا التحريرية.

هل كان هذا مفيداً؟

كيف نكتب المحتوى ونراجعه

بقلم

فريق التحرير في BroadNet

ينشر فريق التحرير مدونة BroadNet. تُكتب المقالات مع فرق BroadNet للشؤون التنظيمية والمنتجات والهندسة وأبحاث الصناعة وحلول المشغّلين، وتُراجَع وفق معاييرنا التحريرية.

تابع القراءة

ثلاثة أخرى من المجلة.

اطلع على جميع المقالات
ك
منتج

كل ما تحتاج لمعرفته حول التحقق عبر SMS

كيف يؤكد التحقق SMS ( OTP) هوية المستخدم: كيف يعمل تدفق الرمز، وقيود الخط الأرضي والرجوع إلى الصوت، واعتبارات الخصوصية، واختيار واجهة برمجة تطبيقات SMS API.

فريق التحرير في BroadNet
2m
ت
منتج

تسليم رمز التحقق لمرة واحدة بشكل صحيح - زمن الاستجابة، والرجوع إلى الوضع الاحتياطي، والتحويل.

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

فريق التحرير في BroadNet
9m
ك
هندسة

كيفية إرسال SMS عبر الكود: Python، PHP، Node.js، Java، Go و C# باستخدام استدعاء REST واحد

يعد إرسال SMS عبر الكود عبارة عن طلب HTTPS POST موثق واحد: يتضمن رمز Bearer، وجسم طلب JSON يحتوي على معرّف المُرسِل، ورقم الوجهة، والرسالة، ونوع الرسالة، بالإضافة إلى معرف الرسالة في الرد. إليك نفس الطلب بلغات Python، PHP، Node.js، Java، Go و C#، بالإضافة إلى معالجة الأخطاء ونصائح للإنتاج.

فريق التحرير في BroadNet
9m
المجلة، عبر البريد الإلكتروني

مقال واحد شهرياً. لا شيء آخر.

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

نرسل رسالة واحدة شهريًا. يمكنك إلغاء الاشتراك في أي وقت. اطّلع على سياسة الخصوصية.

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

معظم ما نكتبه تعلمناه أثناء الإنتاج.

إذا لاقت هذه المعلومات استحسانك، فلنتحدث. أخبرنا عن حالة الاستخدام، والأحجام، والأسواق - وسنعود إليك بمعلومات عن التوجيه والتسعير، وعميل مرجعي يمكنك الاتصال به.

$ curl -X POST https://api.broadnet.me/sms/sendSms