Skip to main content
المصادقة الصوتية هي أداة اتصال-للموافقة صادرة. يطلب نظامك من Wave التحقّق من شخص؛ فتتّصل Wave بذلك الرقم، وتُشغّل رسالة قصيرة ثنائية اللغة تصف ما تجري الموافقة عليه، ثم تلتقط ضغطة المفتاح وتُعيد نتيجة موثوقة قابلة للقراءة آليًا عبر webhook موقّع (وواجهة استعلام عن الحالة). هي المكافئ الصوتي لخطوة الموافقة-بالدفع / رمز OTP — عامل أمان، وليست قائمة رد صوتي. ولأن النتيجة تحكم الوصول، فهي مصمّمة لتفشل بأمان: الموافقة الصريحة وحدها تمنح الوصول، ولا يمكن لردّ آليّ / بريد صوتي أن يوافق أبدًا.
هذا مسار صادر يبدأ عبر الواجهة (Wave تتّصل بالمستخدم). وهو يختلف عن قوائم الرد الصوتي (حيث يتّصل المتصل بك). المصادقة الصوتية مُقيّدة — اطلب من جهة تواصلك في Wave تفعيلها لحسابك.

المصادقة والفئات

كل مسار ضمن /v1/voice-auth يتطلّب مفتاح إنتاج (sk_live_) مع صلاحية voice_auth:write (أو voice_auth:read للاستعلام). لا تستطيع المفاتيح التجريبية إجراء مكالمات مصادقة حقيقية.

إنشاء طلب تحقّق (challenge)

تُعيد 201 معرّف الطلب و(في وضع number_match) الأرقام المطلوب عرضها:

النتيجة — الفشل الآمن

يصل الطلب إلى حالة نهائية واحدة state:
approved وdeclined فقط قراران صريحان من المستخدم. عامِل كل حالة أخرى كعدم منح وافشل بأمان. وتحقّق دائمًا من النتيجة عبر واجهة الحالة قبل اعتماد الموافقة — دفاعًا في العمق.

كشف الردّ الآلي (AMD)

قبل أي رسالة، تُصنّف Wave من ردّ على المكالمة. ردّ الآلة أو البريد الصوتي ينتهي إلى machine_detected ولا تُشغَّل رسالة الموافقة أبدًا — فلا يمكن لبريد صوتي التقاط ضغطة أو ترك موافقة. هذا مُطبَّق، وليس بأفضل جهد.

المطابقة الرقمية عالية التوكيد

للإجراءات عالية القيمة (المدفوعات، تغييرات المشرف)، اضبط assurance: "number_match". تتضمّن استجابة 201 قيمة match_digits (مثل "47") — اعرضها لمستخدمك. تطلب المكالمة حينها من المتّصل إدخال تلك الأرقام بالضبط للموافقة. أي إدخال خاطئ لا يوافق — وهذا يُبطل إرهاق المصادقة (“فقط اضغط 1”) والموافقات العرضية.

اسم المتصل

تقول المكالمة افتراضيًا «مكالمة من Wave…». يمكن لمؤسّستك أن تجعلها تقول اسمك أنت (اسم المتصل) بدلًا من ذلك، بلغة المكالمة: «مكالمة من أكمي للتحقّق من…». اسم المتصل اسمٌ منطوق فقط — يبقى رقم المتصل هو رقم Wave الموثَّق. اعتماد اسم (البوابة). في بوابة المطوّرين، افتح أسماء المتصل واطلب اسمًا بالإنجليزية وبالعربية. يحتاج الاسم إلى موافقتين قبل أن تستخدمه أي مكالمة: مالك أو مسؤول في مؤسّستك (طلب المالك أو المسؤول يتجاوز هذه الخطوة)، ثم Wave. الاسم من 2 إلى 40 حرفًا (حروف وأرقام ومسافات و. & ' -؛ بلا عناوين ويب؛ بلا 4 أرقام متتالية أو أكثر)، ويجب أن يستخدم الاسم العربي حروفًا عربية. لا يتغيّر اسم بعد طلبه — لاستخدام اسم جديد، اطلب اسمًا جديدًا. استخدامه في طلب تحقّق. أرسل brand_id عند الإنشاء. تنطق المكالمة:
  1. قيمة brand_id التي ترسلها، إن وُجدت؛ وإلا
  2. الاسم الافتراضي لمشروعك (يُضبط من صفحة أسماء المتصل)؛ وإلا
  3. «Wave» — فيستمر عمل أي تكامل لا يرسل brand_id.
يجب أن يكون brand_id اسمًا معتمدًا لمؤسّستك؛ أي شيء آخر (غير معروف، أو قيد المراجعة، أو مرفوض، أو متوقف، أو تابع لمؤسّسة أخرى) يُعيد 422 VOICE_AUTH_BRAND_NOT_APPROVED ولا تُجرى أي مكالمة. يحتفظ الطلب بالاسم الذي بدأ به، فإيقاف اسم أثناء مكالمة لا يغيّر ما يسمعه المستخدم. تحمل استجابة 201 وواجهة الحالة والـ webhook قيمة brand_id (null = «Wave»). عرض أسمائك من نظامك.
يتطلّب مفتاح إنتاج بصلاحية voice_auth:read. يُعيد كل أسماء مؤسّستك مع status (pending_tenant، pending_wave، approved، rejected، retired) وسبب الرفض، و is_default لـ مشروع المفتاح. للصفحة التالية أرسل cursor = قيمة next_cursor السابقة.
إذا تعذّرت خدمة تحويل النص إلى كلام، يمكن أن تنتقل Wave إلى رسائل مسجّلة مسبقًا. في هذا الوضع لا تذكر الرسالة العادية اسم أي متصل (لا «Wave» ولا اسمك)؛ وتبقى رسالة مطابقة الرقم تذكر اسمك. ويبقى brand_id محفوظًا ومُعادًا.

webhook النتيجة

عند بلوغ حالة نهائية ترسل Wave حدث voice_auth.completed موقّعًا إلى نقطة webhook الخاصّة بمشروعك. تحقّق من كل تسليم:
  • X-Wave-Signature — sha256=…، توقيع HMAC-SHA256 للمحتوى الخام بسرّ التوقيع الخاصّ بنقطتك. ارفض أي عدم تطابق.
  • X-Wave-Timestamp — بالثواني (unix)؛ ارفض التسليمات الأقدم من نافذتك (مثلًا 5 دقائق).
  • X-Wave-Event-Id — ثابت عبر إعادات الإرسال؛ استخدمه لمنع التكرار.
الـ webhook إشعار — أعد التأكيد عبر واجهة الحالة قبل المنح.

الاستعلام عن الحالة

تُعيد الحالة الحالية state وعدد المحاولات وamd_result وbrand_id والطوابع الزمنية و(عند الانتهاء) القرار. مقصورة على مؤسّستك فقط.

المعرّف الفريد للطلب، حدود المعدّل، ومكافحة الإساءة

  • Idempotency — أرسل Idempotency-Key؛ تُعيد المحاولة بنفس المفتاح نفس الطلب ولا تُجري مكالمة ثانية.
  • حدود لكل رقم ولكل جهة إصدار — تحدّ Wave من عدد الطلبات لرقم واحد ولكل مفتاح، وتحجب الأرقام/البادئات المُسيئة، لمنع القصف الصوتي والاحتيال. عند تجاوز الحدّ → 429.

الأخطاء