tutorbook icon indicating copy to clipboard operation
tutorbook copied to clipboard

Add Zoom meetings integration

Open nicholaschiang opened this issue 5 years ago • 4 comments
trafficstars

Is your feature request related to a problem? Please describe.

See #99 for a more detailed description of some known issues this will be addressing.

Right now, we're essentially forcing it upon the tutors and students themselves to create a Zoom meeting and share the link with each other. We don't want to do that; it should be as easy as possible for users.

Describe the solution you'd like

Whenever a match is created, we'll want to create a corresponding Zoom meeting.

For now, that Zoom meeting will be an unscheduled recurring meeting until we get our scheduling features more reliable.

To create those meetings, TB will use (this is a fallback order in case the first options don't work):

  1. The org's account (e.g. EPATT would sign-in and authorize TB to use it's Zoom account. TB would then create users and meetings using that Zoom account).
  2. The tutor's account (e.g. freelance tutors like @dpitty would sign-in and authorize TB to use their personal Zoom account).
  3. The student's account (e.g. sometimes students are also tutors and might have authorized TB to use their Zoom account in the past).
  4. The default org's Zoom account (i.e. the one that I'll be paying for).

Describe alternatives you've considered

In addition to Zoom, TB could call the Google Calendar API to request a Google Meet link for each match. This, however, would require a time (which we aren't very consistent about right now).

See the conferenceData property mentioned in these docs for more info. It seems like we can add a requestData field to create a new Google Meet meeting (even though there is no official "Google Meet API" documented).

nicholaschiang avatar Aug 26 '20 00:08 nicholaschiang

We'll need to build a settings page for orgs to manage this integration.

From the page, they'll be able to decide whether to create new users or use existing ones:

  • If they choose to create new users, TB will use the user's anonymous forwarding email address (created by TB) to create the user (because they likely already have Zoom accounts using their actual email addresses).
    • Requires both the meeting:write:admin scope and the user:write:admin scope.
  • If they choose to use existing users (e.g. PAUSD already has Zoom users for all it's students), TB will assume that every single user belonging to the org already has a corresponding user account (using their actual email address) within the org's Zoom account.
    • Only requires the meeting:write:admin scope.

nicholaschiang avatar Aug 26 '20 16:08 nicholaschiang

To be able to dynamically request those different scopes (i.e. meeting:write:admin and user:write:admin or just meeting:write:admin depending on the option they pick), it seems as if I'll have to create multiple TB OAuth Zoom apps.

Notice how there isn't a scopes param described in these docs.

nicholaschiang avatar Aug 26 '20 18:08 nicholaschiang

Zoom pricing is per user license, so TB will only create Zoom users when it has to (so as to reduce the cost of the org's Zoom subscription).

nicholaschiang avatar Aug 27 '20 15:08 nicholaschiang

Reopening this because our Zoom integration was temporarily taken from production (there's much to polish and improve before it can go back to production).

nicholaschiang avatar Sep 16 '20 22:09 nicholaschiang