WhatsApp OTP
أثبت أن شخصًا يملك رقم واتساب، للتسجيل أو لتسجيل الدخول بلا كلمة مرور. هناك طريقتان؛ استخدم الرابط إلا إذا كان عليك أن ترسل الرمز بنفسك.
1. الرابط (موصى به): الشخص يرسل إليك الرمز
لا يُرسل شيء إلى من لم يكتب أولًا، فرقمك يرد فقط: وهذه أكثر الرسائل أمانًا، بلا حد يومي ولا ساعات ليل ولا انتظار.
POST /v1/otps
{"instance_id": "01K…", "channel": "link", "brand": "Acme", "reference": "signup-7", "locale": "en"}
201 {"data": {"id": "01K…", "channel": "link", "status": "pending", "code": "48291376",
"link": "https://wa.me/201000000001?text=My%20Acme%20verification%20code%3A%2048291376",
"qr": "data:image/png;base64,…", "expires_at": "2026-10-04T12:10:00+00:00", "…": "…"}}
- اعرض
linkكزر على الهاتف، أو صورةqrعلى الكمبيوتر، معcodeكبديل يمكن للشخص كتابته. - يرسل الشخص الرسالة. وحين تصل إلى رقمك قبل
expires_atيصبح الـ OTPverified. - يأتيك ويب هوك
otp.completedومعهphone: الرقم الذي أرسل الرسالة، وهو ما تسجّل دخول الشخص به.
من المفيد أن تعرف:
- أضف
phoneإلى الطلب كلما عرفته، ليُقبل الرمز من ذلك الهاتف فقط. من دونه يُتحقق من أي شخص يرسل الرمز، فقد يعيد أحدهم توجيه رابطك إلى شخص آخر. - ضع اسم تطبيقك في
brand: يظهر في النص الذي يرسله الشخص («My Acme verification code: …») وفي الرد، فيوضّح الرابط المعاد توجيهه ما الذي يُسجَّل الدخول إليه. codeموجود في هذا الرد فقط؛ احتفظ به في صفحتك، لا في سجل. ويمكن كتابته بمسافات أو شرطات أو بالأرقام العربية المشرقية.- يرد رقمك برسالة قصيرة «✅ Verified for Acme. You can go back to the app.» بلغة الشخص (
localeenأوar)، كرد. وتصلك رسالة الشخص كذلك كحدثmessage.receivedمع إخفاء أرقام الرمز، ولا يُرد عليها برد تلقائي. - نادرًا يخفي واتساب رقم المرسل (معرّف خاص): الـ OTP المنشأ بلا
phoneيكتمل مع ذلك، ويكونphoneبقيمة null. لا تسجّل دخول أحد أبدًا بهاتف قيمته null.
2. الرمز: رقمك يرسله
POST /v1/otps
{"instance_id": "01K…", "channel": "code", "phone": "201012345678", "brand": "Acme", "code_length": 6}
يرد بـ 202 مع status: "pending" (ولا يعيد الرمز أبدًا)، ويستلم الشخص «Acme code: 482913. It expires in 10 minutes. Never share it.» (أو نصها العربي، مع locale: "ar").
تحقق مما يكتبه الشخص عبر POST /v1/otps/{id}/check و{"code": "482913"}: الرد 200 مع status: "verified"، أو 422 مع attempts_left. خامس رمز خاطئ يُفشل الـ OTP. والـ OTP المنتهي أو الفاشل أو الملغى أو الذي تم التحقق منه بالفعل يرد بـ 409 مع status الخاص به.
الرمز رسالة مثل أي رسالة أخرى. لمن لم يكتب للرقم من قبل هو رسالة أولى: يُحسب ضمن حد الأشخاص الجدد لليوم وضمن الإحماء، ولا يُرسل ليلًا ولا أثناء تقييد واتساب للرقم. ولأن الرمز المتأخر لا فائدة منه، فهو لا يبقى في الانتظار أبدًا. إن تعذّر إرساله خلال دقيقتين تقريبًا، يفشل الـ OTP فورًا والسبب في failed_reason، مع ويب هوك otp.failed. ولهذا كان الرابط أفضل: فهو يعمل دائمًا. ومن يستلمون رمزًا ولا يردون أبدًا يُحسبون أيضًا على معدل ردود الرقم.
إدارة الـ OTP
GET /v1/otps/{id}:status(pending،verified،failed،expired،cancelled)،phone،verified_phone،reference،attempts_left،sends،failed_reason،expires_at،verified_at. يكونverified_phoneبقيمة null إذا أخفى واتساب رقم المرسل. ولا يعيد الرمز أبدًا.POST /v1/otps/{id}/resend: رمز جديد (ويتوقف القديم عن العمل) ومدةexpires_inجديدة، ما دام الـ OTP قيد الانتظار وبعد خروج الرمز الأخير (409ما دام في طريقه). المحاولات الخاطئة تظل محسوبة، وتنطبق حدود الهاتف الواحد المذكورة أدناه (429معRetry-After)، وبحد أقصى 5 رموز لكل OTP.DELETE /v1/otps/{id}: يلغي OTP قيد الانتظار؛ والرمز الذي لم يُرسل بعد لا يُرسل.- في لوحة التحكم، صفحة رمز التحقق (OTP) (في القائمة، للمسؤولين) تعرض كل عمليات OTP، مع التصفية حسب الحالة والطريقة والرقم، وتلغي ما كان قيد الانتظار. وزر جرّبها فيها ينشئ رابطًا تكمله من هاتفك.
الخيارات والحدود
expires_inمن 1 إلى 30 دقيقة (10 افتراضيًا)، وcode_lengthمن 4 إلى 8 أرقام (6)، وbrandحتى 30 حرفًا (حروف ومسافات و& ' . -؛ بلا أرقام، وبلا عنوان موقع، وليس «WhatsApp» أو «Meta»). الرموز من 6 أرقام أو أكثر أكثر أمانًا: مع 4 أرقام، خمس تخمينات لكل رمز من عشرة رموز في اليوم تمنح الغريب فرصة واحدة تقريبًا من كل 200.- يستلم الهاتف الواحد من حسابك رمزًا واحدًا في الدقيقة على الأكثر، و3 في الساعة و10 في اليوم (
429معRetry-After). ومن لم يكتب للرقم من قبل يستلم 3 في اليوم على الأكثر (الرسالة الأولى واثنتان بعدها)، ولا شيء في يوم لاحق قبل مرور 7 أيام على آخر رمز. طريقة الرابط ليس لها حد كهذا. ويمكن لحسابك بدء 30 عملية OTP في الدقيقة. - الرمز يستهلك رسالة واحدة من رسائل باقتك؛ والرابط يستهلك رسالة واحدة لتأكيده فقط، ويُتخطى التأكيد إن لم يبقَ في الباقة متسع.
الأمان
الرموز عشوائية، وتُخزَّن فقط على هيئة هاش بمفتاح، وتُقارن في زمن ثابت، ولا تُعاد أبدًا بعد رد الرابط نفسه. البدء والتحقق يحتاجان مفتاحًا يُسمح له بالإرسال؛ والقراءة تحتاج مفتاحًا يُسمح له بالقراءة؛ والمفتاح الخاص برقم واحد يصل إلى عمليات OTP لذلك الرقم فقط. أرسل ترويسة Idempotency-Key: إعادة المحاولة تعيد أول OTP (بلا رمزه؛ ابدأ واحدًا جديدًا إن فقدته). تُحفظ عمليات OTP لمدة 30 يومًا.