Participant join/left webhooks is not coming in right order

We’re using Zoom SDK in our Android and IOS apps and using webhooks on backend to track which user is join/left the meeting.

The problem is if a user close our app when a meeting is active, the participant left webhooks is coming after 1-1,5 minute. If the user i rejoin same meeting before receiving “left webhook”, we’re receiving participant join and after few seconds “left webhook” which is the previous action comes too.

Here’s an join event webhook data:

{"event": "meeting.participant_joined", "payload": {"object": {"id": "842077624", "type": 2, "uuid": "tubFEWg9SAaVamwu6V0+kw==", "topic": "Erhan Ali Yılmaz - 1262", "host_id": "0suXBYNISdOR71g8xuvdxQ", "duration": 60, "timezone": "Europe/Istanbul", "start_time": "2019-11-02T19:42:04Z", "participant": {"id": "0suXBYNISdOR71g8xuvdxQ", "user_id": "16780288", "join_time": "2019-11-02T19:43:16Z", "user_name": "Host"}}, "account_id": "8uNqtHFMTI680LJICbjrPA"}}

Here’s the participant left webhook data:

{"event": "meeting.participant_left", "payload": {"object": {"id": "842077624", "type": 2, "uuid": "tubFEWg9SAaVamwu6V0+kw==", "topic": "Erhan Ali Yılmaz - 1262", "host_id": "0suXBYNISdOR71g8xuvdxQ", "duration": 60, "timezone": "Europe/Istanbul", "start_time": "2019-11-02T19:42:04Z", "participant": {"id": "0suXBYNISdOR71g8xuvdxQ", "user_id": "16778240", "user_name": "Host", "leave_time": "2019-11-02T19:43:48Z"}}, "account_id": "8uNqtHFMTI680LJICbjrPA"}}

as the timestamps proofs us as these events are not in a correct order.

How can we avoid from this situation?

Hi hardc0der,

Thanks for using Zoom SDK and thanks for the post. Do you mean that your user close the app via “Recent Apps” or use the system to kill your app that integrates the SDK, and the webhook info is unexpected?

Yes, if application is not closed gracefully (closed from recent apps, device shutdown due to battery low, device restart while the app is active), the webhooks comes in wrong order.

Hi hardc0der,

Thanks for the reply. Understand. I will work with the Webhook team to try to investigate this issue and see if we can find a solution for this. Will get back to you as soon as I have any updates.

Thanks!

any update? @Carson_Chen

Hi hardc0der,

Thanks for the reply. I have consulted the Webhook team regarding this situation:

  • It’s hard to avoid this situation on the webhook side and our webhook events are async, but it is possible to identify and collect the notifications that belong to the same meeting.
  • This situation usually happens when the user left the meeting unexpectedly and re-join the meeting within a very short time(e.g: less than 1 minute).
  • You could use the UUID provided in the webhook event to find the correct order of the user leave meeting/join meeting events. If a meeting is being started/joined by a user for multiple times, it will create multiple meeting UUIDs, and the meeting UUID within one single meeting instance stays the same. Thus you may use the UUID to identify the events that belong to the same event and assign the correct order to them.

On the SDK side, you could try to avoid this by implementing the leaveMeeting method in the onDestory()(Take Android as an example):

@Override
    protected void onDestroy() {
        ZoomSDK zoomSDK = ZoomSDK.getInstance();

        zoomSDK.removeAuthenticationListener(this);//unregister ZoomSDKAuthenticationListener
        if (zoomSDK.isInitialized()) {
            MeetingService meetingService = zoomSDK.getMeetingService();
            meetingService.removeListener(this);//unregister meetingServiceListener
            if (meetingService.getMeetingStatus() != MeetingStatus.MEETING_STATUS_IDLE) {
                meetingService.leaveCurrentMeeting(true);
            }
        }

        super.onDestroy();
    }

This could avoid the issue you are facing under some situations like the app is closed by “Recent App”, etc.
Hope this helps. Thanks!