Events of Instant Meeting

Description
I am new to Zoom API. I am working on a webhook app to receive meeting events.

When I create an instance meeting, my webhook app sometimes receive the following events:
meeting.created, meeting.started, meeting.participant_joined, meeting.participant_left, meeting.ended
However, sometimes only received the following events:
meeting.created, meeting.participant_joined, meeting.participant_left, meeting.ended
meeting.started, meeting.participant_joined, meeting.participant_left, meeting.ended

Why the sequence events are not consistent?

I also have the following questions regarding the fields in the posted events

  • Why the value of “duration” is always 0 even in the meeting.ended event?
  • Why the value of timezone is empty?
  • In meeting.created event, why there is no timestamp of the meeting created?
  • In meeting.created event, what are the account_id and operator_id? Should their values be same to specify who create the meeting?
  • What the API to use to retrieve details of account using account_id?
  • What the API to use to retrieve details of operator using operator_id?
  • What the API to use to retrieve details of host using host_id?
  • In meeting.ended event, why there is no timestamp of the meeting ended?

Thank you for the help.

Error
The full error message or issue you are running into.

Which App Type (OAuth / Chatbot / JWT / Webhook)?
webhook

Which Endpoint/s?
Knowing the API endpoint/s can help us to identify your issue faster. Please link the ones you need help/have a question with.

How To Reproduce (If applicable)
Steps to reproduce the behavior:

  1. Request URL / Headers (without credentials) / Body
  2. See error

Screenshots (If applicable)
If applicable, add screenshots to help explain your problem.

Additional context
Add any other context about the problem here.

Hey @heidi.zh.n, thanks for posting and using Zoom!

These events depend on how you are starting the instant meeting.

Are you starting the instant meeting the same way everytime?

You can also check your Webhook logs here to double check they were sent.

Since instant meetings do not have a set duration, the duration is 0.

Do you have a timezone set on your account?

Because instant meetings are not scheduled / created. They are just started.

Per our docs:

Screen Shot 2020-01-15 at 11.28.35 AM Screen Shot 2020-01-15 at 11.28.39 AM

The account or billing apis.

The Get Users Endpoint.

The Get Users Endpoint.

Once you receive the event, you can create your own timestamp.

Can you provide your use case so we can better assist in providing a solution?

Thanks,
Tommy

@tommy thank you for the reply.

About timestamp, based on your reply, it means that I didn’t fail to catch the timestamp. It is not in the notification. Thank you.

About timezone, if I don’t setup timezone in my account, the start_time will be in GMT timezone. Right?

About event sequence, I always start the meeting in same way: host a meeting with video off, start from browser. I wonder why I received different set of event.

About duration in the meeting.ended event, I still don’t understand why it is 0. You have the record when the meeting started, then you should be able to calculate the duration. Do I have to do that on my side? If yes, however there is no timestamp in meeting.ended and I have to use the time when got meeting.end notification, how can I calculate the correct duration? There will be some lagging time due to the time on network plus some other factors that can be unforeseen now.

By the way, I just tried the case of join meeting. I tried to join a meeting. I don’t see any event notified. Do you know why?

I am trying to build a webhook to store the meeting events and create a report about how many meeting happened (either created inside our company or outside), for each meeting who are the participants and how long the meeting last.

Thank you for your help.

Hey @heidi.zh.n, happy to help!

I understand it is not in the notification. My suggestion is once you receive the notification, create your own time stamp (for example in Node.js new Date()) or call the Get Meeting Details endpoint which includes the end_time.

Correct.

One reason you could be receiving different events is if the webhook notification is not responded to properly. Make sure to send a 200 OK back notifying Zoom the Webhook was delivered.

https://marketplace.zoom.us/docs/api-reference/webhook-reference#notification-delivery

I will double check if this is intended functionality, or a bug and get back to you. (ZOOM-133446)

In the meantime, can you please share the webhook JSON response you received?

Please check your logs here if the Join Meeting event was sent: https://marketplace.zoom.us/user/logs?type=WebhookOnly

Thanks for providing your use case. I would suggest to use scheduled meetings as there is more data available with the Webhooks when scheduling meetings.

Thanks,
Tommy

@tommy

I check the logs and don’t see any events of joining meeting when I tried to join a meeting. I was able to join the meeting. Any idea why there was no the corresponding event in the log?

From the logs, I do see the sequence of event for the meeting that I hosted are,
meeting.created, meeting.started, meeting.participant_joined, meeting.participant_left, meeting.ended
. However, my webhook app didn’t receive all of them. In this log, all the event seems notified successfully with 200. This is strange. Do you have such similar case before? If yes, usually what cause the problem?

Here is the JSON response for meeting.ended. You can see the duration is 0.

Hey @heidi.zh.n,

Were you joining a meeting outside of your Zoom account? If so you will not receive a Webhook.

Can you please share your code that receives the webhook so I can debug? If you see the webhook in the Zoom logs, there is a 99% chance it was indeed sent to your webhook url.

Thanks,
Tommy

Thanks,
Tommy

@tommy Yes, I was joining a meeting outside of my zoom account. Does it mean that the following scenario won’t work for my webhook app? My webhook app is under an account of company A. When a user, e.g. Mike, of company A join a meeting hosted by zoom account of company B, my webhook app won’t be notified of the event that Mike attended the meeting.

@tommy Here is the code

  @RequestMapping(value = "/zoom", method = RequestMethod.POST)
  public void receiveZoomEvent(
      @RequestHeader(value = "authorization", required = true) String authToken,
      @RequestBody Object object) throws Exception {
    if (!ZOOM_AUTH_TOKEN.equals(authToken))
        throw new AuthenticationException("Mismatch auth token: " + authToken);

    logger.info("Receive zoom event at {}: {}", System.currentTimeMillis(), mapper.writeValueAsString(object));
}

I don’t know how to exactly post code here. I tried my best. My code is based on SpringBoot.

Hey @heidi.zh.n

Correct. Your Webhook will only be sent if the action happens on your Zoom account.

Regarding the 0 for the duration, this is intended functionality for instant meetings.

The duration in the meeting ended event is the scheduled duration for this meeting. The actual meeting duration time needs to be calculated by the meeting end time and the meeting start time.
For instant meetings, the schedule duration time will be 0 minutes.

Thanks for sharing your code. Make sure to send a 200 OK response one you receive the Webhook.

Thanks,
Tommy

@tommy My code is based on SpringBoot so it does return 200 when there is no exception happen.

This is very strange that on my side my webhook app has missing event; on zoom side the log says that all the event posted successfully. I also check our server’s access.log but don’t see the event either. Where could be mysteriously intercepting the event?

Also, I wonder why there is no event is sent out when I join a meeting outside my account. I am using my user under my zoom account to joint the meeting. Should it been stored somewhere as the activity under my zoom account?

Hey @heidi.zh.n,

There is a possibility that if you are not sending back a 200 OK response, then Zoom thinks sending the Webhook failed on your end, and will prevent future webhooks from sending.

" After receiving a notification, your Event Notification Endpoint URL should respond with either a 200 or a 204 HTTP status code within three seconds for Zoom to consider that the notification was successfully delivered. Zoom will try to deliver the notification for up to three times for an event. If after executing the retry-logic, Zoom doesn’t receive a 2XX response, no further notifications related to that event will be sent to your app’s Event Notification Endpoint URL ."

Other reasons you are not seeing the webhook is your Verification Token changed, or maybe your firewall settings are blocking them thinking you are getting DDOS’d.

If what you are saying was possible, then I could setup Webhooks for any meeting I join outside my Zoom account, getting data about their meetings which I wouldn’t normally have access to. That would be a security vulnerability, and hence why it is not possible.

Setting up meeting Webhooks on your account means you get webhooks for your meetings. Not other peoples meetings.

Thanks,
Tommy

@tommy the missing event was definitely not caused by token changed because I can receive other events afterwards. The thing that puzzled me is that, for example, I didn’t receive the following event but on webhook log says that it was posted successfully with 200 response value. What is your explanation?

I am not sure about your comments related to security vulnerability. I join an outside meeting so I should be able to get event about when I join the meeting, left the meeting, and who hosted the meeting. These are not secrete for me because I was in that meeting.

Thank you so much for you help.

Hey @heidi.zh.n,

This could be your firewall blocking the requests.

Checkout these related posts:

The outside meeting would have to have the Participant Joined Webhook enabled, but then they would receive the webhook, not you.

Thanks,
Tommy

@tommy about outside meeting, I understand now that Zoom doesn’t provide event notification of it. Thank you.

I read the posts that you give to me in the above reply. I think that their cases are different from me. They never receive the event. I do receive the events but there are missing event (s) randomly for each meeting. Sometime it was meeting.created missed or sometimes it was meeting.started or meeting.participant_left missed. It is random so it doesn’t seem that the firewall block the posted event, or the token was invalid. If the firewall blocked, the webhook log probably would not show the posted status as 200.

Hey @heidi.zh.n, happy to help! :slight_smile:

Can you share the meetingIDs / meetingUUIDs for the webhook logs that you did not receive and we will look into our logs?

Thanks,
Tommy

@tommy

In this meeting (https://aws1.discourse-cdn.com/business6/uploads/zoomdeveloper/original/2X/5/5d6170d4c21447f2965fb4845fbc4469a887be49.png), I didn’t receive the meeting.ended log. I mentioned it above.

In the following meeting, I didn’t receive meeting.started event.

Receive zoom event at 1579060211865: {“event”:“meeting.created”,“payload”:{“account_id":“lQf4jvA9T6WWsgkO7Yf6MQ”,“operator”:"heidi.zh.n@gmail.com”,“operator_id”:“XIN3KxiyQJGU_CtU-qSIFA”,“object”:{“id”:251361636,“uuid”:“rlRoDAP/StSQEkaxUYe9BQ==”,“host_id”:“XIN3KxiyQJGU_CtU-qSIFA”,“topic”:“Heidi Nolan’s Zoom Meeting”,“type”:1,“duration”:0}}}

Receive zoom event at 1579060240714: {“event”:“meeting.participant_joined”,“payload”:{“account_id”:“lQf4jvA9T6WWsgkO7Yf6MQ”,“object”:{“id”:251361636,“uuid”:“rlRoDAP/StSQEkaxUYe9BQ==”,“host_id”:“XIN3KxiyQJGU_CtU-qSIFA”,“topic”:“Heidi Nolan’s Zoom Meeting”,“type”:1,“start_time”:“2020-01-15T03:50:37Z”,“timezone”:"",“duration”:0,“participant”:{“user_id”:“16778240”,“user_name”:“Heidi Nolan”,“id”:“XIN3KxiyQJGU_CtU-qSIFA”,“join_time”:“2020-01-15T03:50:37Z”}}}}

Receive zoom event at 1579060300767: {“event”:“meeting.participant_left”,“payload”:{“account_id”:“lQf4jvA9T6WWsgkO7Yf6MQ”,“object”:{“id”:251361636,“uuid”:“rlRoDAP/StSQEkaxUYe9BQ==”,“host_id”:“XIN3KxiyQJGU_CtU-qSIFA”,“topic”:“Heidi Nolan’s Zoom Meeting”,“type”:1,“start_time”:“2020-01-15T03:50:37Z”,“timezone”:"",“duration”:0,“participant”:{“user_id”:“16778240”,“user_name”:“Heidi Nolan”,“id”:“XIN3KxiyQJGU_CtU-qSIFA”}}}}

Receive zoom event at 1579060299861: {“event”:“meeting.ended”,“payload”:{“account_id”:“lQf4jvA9T6WWsgkO7Yf6MQ”,“object”:{“id”:251361636,“uuid”:“rlRoDAP/StSQEkaxUYe9BQ==”,“host_id”:“XIN3KxiyQJGU_CtU-qSIFA”,“topic”:“Heidi Nolan’s Zoom Meeting”,“type”:1,“start_time”:“2020-01-15T03:50:37Z”,“timezone”:"",“duration”:0}}}

Thank you.

Hey @heidi.zh.n,

Thanks for sharing this info. We are looking into our logs and will update you as soon as we can. (ZOOM-134020)

I am wondering if for the meeting uuid rlRoDAP/StSQEkaxUYe9BQ== you joined the meeting instead of starting it? That would explain why the meeting started event was never sent.

Thanks,
Tommy

@tommy for meeting uuid rlRoDAP/StSQEkaxUYe9BQ== , I created the meeting and started it. I was the only one participant in this meeting.

Thanks @heidi.zh.n.

We are looking into the logs on our backend and will get back to you. :slight_smile:

Thanks,
Tommy

@tommy
About outside meeting, I understand that Zoom doesn’t provide event notification of it using webhook.

I wonder if Zoom provide any client side APIs that receive meeting events. Then, I can use these APIs to implement a client plugin. If yes, please point me to those APIs.

Best regards.