INTEGRITY Документация

Завершение сессии

Чтобы завершить текущую сеанс для всех участников удалите всех участников с помощью kickAll(). Это останавливает текущую запись для данной сессии и устанавливает статус сессии в значение ENDED.

Завершение сессии отличается от выхода из встречи. Выход отключает только текущего участника. Сессия остаётся активной, если в ней ещё присутствуют другие участники.

Шаги

  1. Проверьте, что у локального участника есть разрешение удалять участников.

    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.
    }
  2. Завершает сессию, удаляя всех участников.

    Если у участника нет необходимого разрешения, 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;
    }
  3. Прослушивайте событие завершения сессии.

    Когда сессия завершается, все участники покидают её. 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-токена

Хотя бы одно из следующих права доступа токена требуется:
Удалить всех участников
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-токена

Хотя бы одно из следующих права доступа токена требуется:
Добавьте вебхук
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-токена

Хотя бы одно из следующих права доступа токена требуется:
Обновите встречу
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"
	}'

Следующие шаги