Dealing with annoying Zoom authorization issue

Hello community,

I’m currently working on custom Zoom integration (unfortunately, the one provided by n8n works only with Meetings API) to send chat messages to the channel when Airtable record is created.

I was able to create a flow using HTTP requests, however, I need your help to figure out how to most effectively update authorization token.

The thing is that Zoom provides the auth token which expires in 1 hour, and you to make a request to refresh it.

I was thinking of creating a separate workflow which would rely on Cron job and sends refresh requests every 55 minutes or so. However, where can I save the result to be able to access it from a different workflow when needed?

Never dealt with n8n database, and would really appreciate a direction (or documentation with some examples).

Thank you for your help!

If you are using the HTTP node with OAuth2 the token will be refreshed for you. The node handles that behind the scenes.

Also, you can make a feature request here in the community for the missing resources/operations you need.

I looked into it, but the problem with Zoom is that they require Client ID and Client Secret be encoded in base64 format, which doesn’t seem to be supported by default at n8n? Or is it embeded in the code already?

I see what you mean now. If you do the OAuth2 with Zoom, does that work for you (using any available resource/operation)? I wonder if we have a bug in the node, cuz we do not provide that as base64. If it’s working right now, the only thing I can think of it’s that the underlying library manages it.

That’s the case! The current OAuth doesn’t work with zoom, so I just used regular HTTP requests and can get the auth token in that way, but storing and refreshing it is something I have problems with =(

Ok, can you share the endpoint you are trying to use? Also, just had a quick look at the Zoom node and it offers OAuth2 and access token authentication. Why don’t you use access token authentication in the meantime?

Just to clarify, I can use the Zoom Node to handle auth part with an empty action (since the only resource available there is “meeting”) and then send an http request which would use Zoom’s chat API?

Right now my flow looks like this:

  1. Send an HTTP request to https://zoom.us/oauth/token to get a token
  2. Send a POST request to https://api.zoom.us/v2/chat/users/XXXXXX/messages using the token from step 1.

As mentioned above, the problem with this workflow is that the token should be updated every hour, but you’re saying if I’ll create an empty Zoom event with oAuth2, it should be able to update automatically in the background?

Yeah, but why don’t you use the access token? so you do not have to worry about the token expiring? Just make sure that when you create the app, make the JWT expiring time something like1 one year.