Skip to main content

Overview

The platform supports two video meeting providers:

Zoom

Configuration

OAuth flow

Files: app/Http/Controllers/Integrations/ZoomIntegrationController.php
  1. Tutor initiates connection from frontend
  2. Redirected to Zoom OAuth consent screen
  3. Zoom redirects back to ZOOM_REDIRECT_URI with auth code
  4. Backend exchanges code for access/refresh tokens
  5. Tokens stored in oauth_service_tokens table

Token validation

The ValidateZoomTokens scheduled job runs daily at 08:30 UTC (production only):
  1. Fetches all Zoom OAuth tokens
  2. Validates each by calling the Zoom API
  3. If invalid: sends ReconnectZoom email to the tutor
  4. Tracks reconnection attempts via updateReconnectionAttempts()
  5. If hasReachedMaxReconnectionAttempts(): deletes the token

Meeting creation

When an online lesson is booked, a Zoom meeting is created via the tutor’s connected account. The meeting details are stored in the meetings table.

Checking connection

Daily.co

File: app/Models/Services/DailyMeetingService.php

Configuration

How it works

Daily.co is used via a simpler API-key-based integration (no OAuth flow per user).

Creating a meeting

Creates a Daily.co room with:
  • Emoji reactions enabled
  • Hand raising enabled
  • Room name based on lesson ID
  • Expiry dates based on lesson times

Generating join URLs

Generates meeting tokens with user identity embedded, returns a join URL.

Other operations

Meeting model

File: app/Models/v1/Meeting.php
Meeting::createOrUpdateMeeting() — upsert logic that creates or updates meeting details. Used by both Zoom and Daily.co integrations. Meeting details are included in LessonBooked confirmation emails with direct join links for both tutor and student.