← Cloudflare Realtime / realtime / realtimekit / core
Завершение сессии
Чтобы завершить текущую сеанс для всех участников удалите всех участников с помощью kickAll(). Это останавливает текущую запись для данной сессии и устанавливает статус сессии в значение ENDED.
Завершение сессии отличается от выхода из встречи. Выход отключает только текущего участника. Сессия остаётся активной, если в ней ещё присутствуют другие участники.
Шаги
-
Проверьте, что у локального участника есть разрешение удалять участников.
const canEndSession = meeting.self.permissions.kickParticipant === true; if (!canEndSession) { // Disable the "End meeting/session" control in your UI. // You can also show a message to explain why the action is not available. }const canEndSession = meeting.self.permissions.kickParticipant === true; if (!canEndSession) { // Disable the "End meeting/session" control in your UI. // You can also show a message to explain why the action is not available. }const canEndSession = meeting.self.permissions.kickParticipant === true; if (!canEndSession) { // Disable the "End meeting/session" control in your UI. // You can also show a message to explain why the action is not available. }val canEndSession = meeting.localUser.permissions.host.canKickParticipant if (!canEndSession) { // Disable the "End meeting/session" control in your UI. // You can also show a message to explain why the action is not available. }let canEndSession = meeting.localUser.permissions.host.canKickParticipant if !canEndSession { // Disable the "End meeting/session" control in your UI. // You can also show a message to explain why the action is not available. }const canEndSession = meeting.self.permissions.kickParticipant === true; if (!canEndSession) { // Disable the "End meeting/session" control in your UI. // You can also show a message to explain why the action is not available. } -
Завершает сессию, удаляя всех участников.
Если у участника нет необходимого разрешения,
kickAll()выбрасывает ClientError с кодом ошибки1201.try { await meeting.participants.kickAll(); } catch (err) { if (err?.code === 1201) { // The participant does not have permission to end the session. // Update your UI to indicate that the action is not allowed. return; } throw err; }Если у участника нет необходимого разрешения,
kickAll()выбрасывает ClientError с кодом ошибки1201.try { await meeting.participants.kickAll(); } catch (err) { if (err?.code === 1201) { // The participant does not have permission to end the session. // Update your UI to indicate that the action is not allowed. return; } throw err; }Если у участника нет необходимого разрешения,
kickAll()выбрасывает ClientError с кодом ошибки1201.try { await meeting.participants.kickAll(); } catch (err) { if (err?.code === 1201) { // The participant does not have permission to end the session. // Update your UI to indicate that the action is not allowed. return; } throw err; }Если у участника нет необходимого разрешения,
kickAll()возвращаетHostError.val error: HostError? = meeting.participants.kickAll() if (error != null) { when (error) { is HostError.KickPermissionDenied -> { // The participant does not have permission to end the session. // Update your UI to indicate that the action is not allowed. } } } else { // Successfully initiated session end }Если у участника нет необходимого разрешения,
kickAll()возвращаетHostError.let error: HostError? = meeting.participants.kickAll() if let error = error { switch error { case .kickPermissionDenied: // The participant does not have permission to end the session. // Update your UI to indicate that the action is not allowed. break default: break } } else { // Successfully initiated session end }Если у участника нет необходимого разрешения,
kickAll()выбрасывает ClientError с кодом ошибки1201.try { await meeting.participants.kickAll(); } catch (err) { if (err?.code === 1201) { // The participant does not have permission to end the session. // Update your UI to indicate that the action is not allowed. return; } throw err; } -
Прослушивайте событие завершения сессии.
Когда сессия завершается, все участники покидают её. SDK генерирует
roomLeftсобытие сstateимеет значениеended.meeting.self.on("roomLeft", ({ state }) => { if (state === "ended") { // Update your UI to show that the meeting session has ended. } });Когда сессия завершается, все участники покидают её. SDK генерирует
roomLeftсобытие сstateимеет значениеended.meeting.self.on("roomLeft", ({ state }) => { if (state === "ended") { // Update your UI to show that the meeting session has ended. } });Когда сессия завершается, все участники покидают её. SDK генерирует
roomLeftсобытие сstateимеет значениеended.meeting.self.on("roomLeft", ({ state }) => { if (state === "ended") { // Update your UI to show that the meeting session has ended. } });Когда сессия завершается, все участники покидают её. Обработать завершение сессии можно, подписавшись на обработчики событий.
meeting.addMeetingRoomEventListener(object : RtkMeetingRoomEventListener { override fun onMeetingEnded() { // Update your UI to show that the meeting session has ended. } })Когда сессия завершается, все участники покидают её. Обработать завершение сессии можно, подписавшись на обработчики событий.
// Implement the delegate method extension MeetingViewModel: RtkMeetingRoomEventListener { func onMeetingEnded() { // Update your UI to show that the meeting session has ended. } } meeting.addMeetingRoomEventListener(meetingRoomEventListener: self)Когда сессия завершается, все участники покидают её. SDK генерирует
roomLeftсобытие сstateимеет значениеended.meeting.self.on("roomLeft", ({ state }) => { if (state === "ended") { // Update your UI to show that the meeting session has ended. } });
Сессию также можно завершить со стороны бэкенда, удалив всех участников с помощью Удалить всех участников API.
Завершение сессии со стороны бэкенда
Удалите всех участников с помощью API
Используйте Удалить всех участников метод API для удаления всех участников из активной сессии встречи.
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется:Realtime AdminRealtime
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/meetings/$MEETING_ID/active-session/kick-all" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"Прослушивайте события завершения сессии с помощью вебхуков
Зарегистрируйте вебхук, подписанный на meeting.ended. RealtimeKit отправляет это событие при завершении сессии.
Вы можете использовать его для запуска серверных процессов, например для отправки уведомления, формирования отчета или обновления записей о сессии в вашей базе данных.
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется:Realtime AdminRealtime
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/webhooks" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "Session ended webhook",
"url": "<YOUR_WEBHOOK_URL>",
"events": [
"meeting.ended"
]
}'Отключение встречи
Завершение сессии не отключает встречу. Участники могут снова присоединиться к встрече и начать новую сессию.
Чтобы запретить участникам присоединяться повторно и начинать новую сессию, установите статус встречи на INACTIVE с помощью Обновите встречу API.
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется:Realtime AdminRealtime
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/meetings/$MEETING_ID" \
--request PATCH \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"status": "INACTIVE"
}'Следующие шаги
- Подробнее о том, как пресеты управляют разрешениями, см. в Preset.
- Подробнее о возможных значениях состояния комнаты локального участника см. в Локальный участник.