صدى
English لوحة التحكم
المكالمات / المكالمات الجماعية

المكالمات الجماعية

المكالمة الجماعية غرفة حتى 10 مشاركين. أنشئها بـ type: group، وأصدر رمزاً لكل من يجب أن يكون داخلها، ويبقي الـ SDK قائمة المشاركين متزامنة.

حُدّث في 21 أكتوبر 2026 عدّل هذه الصفحة

01إنشاء الغرفة

تبدأ المكالمات الجماعية عادة بلا رنين: المشاركون على الشاشة أصلاً (درس، اجتماع صباحي، قناة توزيع). أنشئ المكالمة مرة واحدة واحتفظ بـ call_id ما دامت الغرفة حيّة.

curl -X POST https://sada.g4t.io/api/v1/calls \
-H "Authorization: Bearer sk_test_4vN8kR2pXa61Jd0s" \
-H "Content-Type: application/json" \
-d '{"type": "group", "ring": false, "metadata": {"room": "standup-42"}}'

02إضافة المشاركين

أصدر رمزاً لكل مشارك بـ POST /calls/{call_id}/tokens لحظة ضغطه على «انضمام» — لا مسبقاً، فالرموز تنتهي خلال 5 دقائق. تنتقل المكالمة إلى in_progress مع الرمز الثاني.

تتسع الغرفة لعشرة مشاركين نشطين. الطلب الحادي عشر يردّ بـ 422 Call is full؛ وحين يغادر أحدهم يتحرّر مقعده. كل رمز يرسل participant.joined إلى الـ webhooks، فتستطيع عكس القائمة عندك.

curl -X POST https://sada.g4t.io/api/v1/calls/call_k3j9x2m7qa/tokens \
-H "Authorization: Bearer sk_test_4vN8kR2pXa61Jd0s" \
-H "Content-Type: application/json" \
-d '{"user_ref": "u_1842", "display_name": "محمود عباس", "ttl": 300}'
الاستجابة
HTTP/1.1 422 Unprocessable Content
{ "message": "Call is full" }

03في التطبيق

يعرض كائن المكالمة participants ويطلق حدثاً كلما انضم أحد أو غادر أو كتم صوته. في Flutter، ترسم GroupCallScreen من عدّة الواجهة البلاطات بعمودين وتبرز المتحدث النشط من القائمة نفسها.

room.js lib/call_page.dart
1 const call = await Sada.join({ token, displayName: 'كرار حسن' });
2
3 renderTiles(call.participants); // everyone already in the room
4
5 call.on('participant-joined', (p) => addTile(p));
6 call.on('participant-left', (p) => removeTile(p.id));
7 call.on('muted', ({ participant, muted }) => tile(participant.id).muted = muted);
1 final call = CallController(
2 participants: const [
3 CallParticipant(id: 'u1', name: 'حسين علاء'),
4 CallParticipant(id: 'u2', name: 'كرار حسن', muted: true),
5 ],
6 )..start();
7
8 call.toggleMute(); // mirrored by the Mute control
9 call.setActiveSpeaker(1); // accent border / ripple follow this
10 call.end(); // freezes the duration for EndedScreen
11
12 // Every screen accepts the same controller so they tick in sync.
13 InCallScreen(remoteName: 'حسين علاء', controller: call, quality: SadaNetworkQuality.good);
14 GroupCallScreen(title: 'اجتماع الفريق', controller: call);
15 EndedScreen(remoteName: 'حسين علاء', controller: call);

04الفوترة

تُحتسب المكالمات الجماعية كغيرها: دقائق الاتصال مقرّبة للأعلى مضروبة في عدد المشاركين. غرفة 10 دقائق بثلاثة أشخاص = 30 دقيقة مشارك؛ والغرفة نفسها بثمانية = 80. القاعدة كاملة في صفحة دقائق المشاركين.

05الحدود

الحدود الحالية التي يفرضها الـ API.

العنصرالحد
المشاركون النشطون في مكالمة فردية 2
المشاركون النشطون في مكالمة جماعية 10
المفاتيح في metadata 20
عمر رمز الانضمام 60 – 3600 s
طلبات الـ API لكل مفتاح سري 120 / min
✓ شكراً، وصلتنا ملاحظتك.