SDK 0.9.0-rc.0

Member SDK

Member adalah user terautentikasi milik aplikasi customer. Member berbeda dari Visitor yang bersifat sementara dan Agent yang bekerja untuk tenant.

Status: universal communication release candidate

Rilis 0.9 menyediakan direct/group chat, P2P direct audio/video, managed group audio/video, selected/all-member ringing, upgrade direct call, dan host transfer. Ringnity memilih media plane dari server; aplikasi tidak memilih LiveKit.

Apa yang bisa dibangun

Gunakan Member sebagai baseline universal untuk aplikasi chat, komunitas, game, kelas, telehealth, atau meeting dengan user terautentikasi. Ringnity mengelola authorization, durable chat, receipt, realtime, signaling, direct P2P media, group media, reconnect, dan transport policy. Aplikasi customer mengelola login, relationship bisnis, navigasi, branding, conversation UI, call controls, dan layout participant.

Core meeting berbasis chat dan group audio/video siap dibangun secara headless. Screen sharing, server recording, captions, dan waiting room belum termasuk public contract 0.9 dan tidak boleh diasumsikan tersedia.

1. Customer backend menerbitkan token

const issued = await server.tokens.createMemberToken({
  externalId: authenticatedUser.id,
  displayName: authenticatedUser.displayName,
  scopes: [
    "member:profile:read", "member:conversations:read",
    "member:conversations:write",
    "member:messages:read", "member:messages:write",
    "member:receipts:write", "member:attachments:write",
    "member:calls:read", "member:calls:write",
    "member:devices:write", "member:realtime:connect",
  ],
});

Server API credential membutuhkan scope server:member-token:write dan tidak pernah masuk ke browser atau aplikasi mobile.

2. Backend mengizinkan pasangan Member

const granted = await server.memberConversations.grant({
  memberExternalIds: [authenticatedUser.id, peerUser.id],
});

Operasi backend-only ini membutuhkan server:member-conversation:write. Client tidak dapat membuat relationship sendiri.

3. Aplikasi membuka direct chat

const member = new RingnityMember({ tokenProvider: fetchMemberToken });
const profile = await member.getProfile();
const chat = await member.openConversation(peerMemberId);
await member.sendMessage(chat.conversation.conversationId, {
  body: "Hello",
  clientMessageId: crypto.randomUUID(),
});
await member.connect();
member.subscribe(chat.conversation.conversationId);

Kontrak yang sama tersedia pada TypeScript, React Native, Flutter, Kotlin, dan Swift.

4. Aplikasi membuat group chat

const group = await member.createGroup({
  title: "Product community",
  memberIds: selectedMemberIds,
  clientRequestId: crypto.randomUUID(),
});
await member.sendMessage(group.conversationId, { body: "Welcome" });
await member.inviteGroupMembers(group.groupId, additionalMemberIds);

Select all diselesaikan UI menjadi daftar memberIds eksplisit agar retry deterministik dan perubahan directory tidak memperluas audience secara diam-diam.

5. Aplikasi membuat direct call

const call = await member.createCall(chat.conversation.conversationId, {
  callChannel: "video",
});

member.on("call.incoming", async ({ call }) => {
  await member.acceptCall(call.id);
});

SDK mengelola media P2P, SDP/ICE replay, dan TURN/TLS. Aplikasi tetap memiliki UI/UX dan keputusan accept/decline.

6. Aplikasi membuat group call

const room = await member.createCallRoom({
  sourceConversationId: group.conversationId,
  initialMedia: "video",
  audienceScope: "selected_members",
  inviteeMemberIds: selectedMemberIds,
});
const media = await member.joinManagedCallRoom(room.callRoomId, {
  microphoneEnabled: true,
  cameraEnabled: true,
});

Gunakan audienceScope all_members untuk mengundang seluruh anggota aktif. Untuk mengubah direct call aktif menjadi group call, kirim upgradeFromCallSessionId pada createCallRoom.

7. Aktifkan incoming call di background

await member.registerDevice({
  platform: "ios",
  provider: "apns_voip",
  token: pushKitToken,
  apnsEnvironment: "production",
});

Gunakan APNs VoIP pada iOS atau FCM pada Android. Push hanya membangunkan aplikasi; SDK tetap mengambil status dan signaling yang server-authorized setelah reconnect.

Batas keamanan

  • Satu externalId unik hanya di dalam tenant customer.
  • Token Member tidak dapat digunakan sebagai Visitor atau Agent.
  • Member yang dinonaktifkan langsung kehilangan akses walau JWT belum kedaluwarsa.
  • Revocation backend menutup membership kedua pihak tanpa menghapus riwayat.
  • AI customer service tetap Agent dengan policy AI dan human handoff.
Gunakan capability guide MCP →

Turn Your Website Into a Real-Time Call Center

Let customers call your team directly from your website, no phone numbers and no apps required. Just add one <script>.