المكالمات الفردية والرنين
المكالمة الفردية تصل بين شخصين بالضبط. أنشئها مع تفعيل ring فيظهر للمتلقي شاشة الاتصال الأصلية؛ أصدر رمزاً لكل طرف ويتكفّل الـ SDK بالباقي.
01إنشاء المكالمة
type افتراضياً one_to_one وring افتراضياً true، فأقصر طلب هو POST /calls فارغ. مرّر metadata لتربط المكالمة بشيء في نظامك — طلب، حجز، تذكرة.
02دورة الحياة
تمرّ المكالمة ببضع حالات. كل تغيير يُسجَّل في الخط الزمني للمكالمة (events) والمهم منها يصل إلى الـ webhooks.
| الحالة | المعنى |
|---|---|
ringing
|
أُنشئت بـ ring: true؛ المتلقي يُستدعى. يُرسل call.started.
|
in_progress
|
حصل الطرفان على رمز (الرمز الثاني يضبط connected_at)، أو أُنشئت المكالمة بـ ring: false.
|
completed
|
انتهت بعد أن اتصلت. يحمل call.ended المدة ودقائق المشاركين.
|
missed
|
انتهت قبل أن يتصل أحد. يُرسل call.missed ولا يُفوتر شيء.
|
declined
|
رفض المتلقي المكالمة من شاشة الرنين. |
failed
|
تعذّر إنشاء اتصال الصوت. |
03الرنين الأصلي
مع ring: true يعرض هاتف المتلقي شاشة اتصال النظام — CallKit على iOS وfull-screen intent على Android — حتى والتطبيق مغلق. يقبل المتلقي، فيطلب تطبيقك رمزاً من خادمك، وينضم الـ SDK.
الرنين يحتاج بيانات إشعارات للتطبيق في لوحة التحكم ← بيانات الإشعارات: مفتاح Apple VoIP (.p8) مع معرّف المفتاح ومعرّف الفريق، وملف حساب خدمة Firebase (JSON). بدونها تُنشأ المكالمة وتعمل عندما يفتح المتلقي التطبيق؛ لكنها لا ترنّ.
استخدم ring: false حين يكون الطرفان على الشاشة أصلاً — زر «تحدّث مع السائق» بعد أن فتح الاثنان الطلب — فتبدأ المكالمة in_progress فوراً.
04إنهاء المكالمة
مغادرة أحد الطرفين من الـ SDK (call.leave()) تنهي المكالمة الفردية. ويستطيع خادمك إغلاقها نيابة عنهما بـ POST /calls/{call_id}/end: يُفصل الجميع، ويصل الباقين حدث ended بسبب ended، ويُرسل call.ended أو call.missed إلى الـ webhooks.
إنهاء مكالمة غير حيّة يردّ بـ 422 Call is not live. ويستطيع المشغّلون إنهاء مكالمة حيّة قسراً من لوحة التحكم؛ يسجّلها الخط الزمني forced بواسطة dashboard.
05البيانات الوصفية
metadata كائن JSON حتى 20 مفتاحاً يُخزَّن مع المكالمة ويُعاد كما هو في كائن المكالمة وفي كل webhook. استخدمه لتجد طرفك من القصة — order_id أو booking_id أو support_ticket — بدل جدول ربط.
البيانات الوصفية ظاهرة لكل من يقرأ سجل مكالماتك والـ webhooks، فاقتصر على المعرّفات لا البيانات الشخصية.