PHPackages                             nawasara/zoom - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. nawasara/zoom

ActiveLibrary[API Development](/categories/api)

nawasara/zoom
=============

Zoom meeting management dashboard for Nawasara — user management, meeting CRUD, recording management, and webhook integration with DB-cached snapshots and queue-backed mutations.

v0.1.4(2w ago)044MITPHPPHP ^8.1

Since May 7Pushed 2w agoCompare

[ Source](https://github.com/nawasara/zoom)[ Packagist](https://packagist.org/packages/nawasara/zoom)[ RSS](/packages/nawasara-zoom/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (8)Versions (6)Used By (0)

Nawasara Zoom Package
=====================

[](#nawasara-zoom-package)

Zoom meeting management dashboard untuk Nawasara — user management, meeting CRUD, recording management, dan webhook integration dengan DB-cached snapshots dan queue-backed mutations.

Menggunakan komponen UI dari **nawasara-ui** dan mengikuti pola package architecture seperti `nawasara-cloudflare` dan `nawasara-whm`.

Fitur
-----

[](#fitur)

### ✅ P1 — User Management (Read-only Mirror)

[](#-p1--user-management-read-only-mirror)

- List semua user di account Zoom Kominfo
- Detail user dengan license type, department, last login, total meetings
- Filter by license type dan status
- License usage tracking
- Responsive table dengan pagination

### ✅ P1 — Meeting Management (CRUD)

[](#-p1--meeting-management-crud)

- List meeting (scheduled + past) dengan filter
- Search by topic
- Create meeting — topic, start time, duration, host, password, waiting room, recording auto
- Update dan delete meeting
- Get join link (copyable URL + password)
- Support recurring meeting (P2)

### 🟡 P2 — Recording Management

[](#-p2--recording-management)

- List recording per meeting/host
- Download link (cloud recording)
- Delete recording dengan retention policy
- Storage size tracking

### 🟡 P2 — Webhook Integration

[](#-p2--webhook-integration)

- Real-time event handling (meeting started/ended, recording ready)
- Signature verification (HMAC SHA-256)

UI Components (nawasara-ui)
---------------------------

[](#ui-components-nawasara-ui)

Package menggunakan komponen-komponen dari `nawasara-ui`:

- `x-nawasara-ui::page.container` — Page wrapper
- `x-nawasara-ui::page.title` — Page title
- `x-nawasara-ui::page.actions` — Action buttons area
- `x-nawasara-ui::button` — Custom button dengan color/size variants
- `x-nawasara-ui::filter-bar` — Search + filter UI
- `x-nawasara-ui::filter-dropdown` — Filter dropdown
- `x-nawasara-ui::filter-chip` — Active filter chip
- `x-nawasara-ui::table` — Data table dengan headers
- `x-nawasara-ui::form.label` — Form label
- `x-lucide-*` — Icon components dari Lucide

Setup
-----

[](#setup)

### 1. Vault Configuration

[](#1-vault-configuration)

Tambah credential Zoom ke Vault:

```
'zoom' => [
    'client_id'     => 'xxx',
    'client_secret' => 'xxx',
    'account_id'    => 'xxx',
],
```

### 2. Create Server-to-Server OAuth App

[](#2-create-server-to-server-oauth-app)

1. Login ke [Zoom Marketplace](https://marketplace.zoom.us)
2. Create aplikasi baru dengan type **Server-to-Server OAuth**
3. Set scopes:
    - `user:read:admin`
    - `meeting:read:admin`, `meeting:write:admin`
    - `recording:read:admin`, `recording:write:admin`
4. Copy Account ID, Client ID, Client Secret ke Vault

### 3. Run Migration

[](#3-run-migration)

```
php artisan migrate
```

### 4. Seed Permissions

[](#4-seed-permissions)

```
php artisan db:seed --class="Nawasara\\Zoom\\Database\\Seeders\\PermissionSeeder"
```

### 5. Test Connection

[](#5-test-connection)

```
php artisan zoom:health-check
```

Penggunaan
----------

[](#penggunaan)

### Sync Jobs

[](#sync-jobs)

**Manual trigger:**

```
php artisan zoom:sync all       # Sync users, meetings, recordings
php artisan zoom:sync users     # Sync users only
php artisan zoom:sync meetings  # Sync meetings only
php artisan zoom:sync recordings # Sync recordings only
```

**Scheduled (automatic):**

- Users: setiap 1 jam
- Meetings: setiap 5 menit
- Recordings: setiap 30 menit

### Permissions

[](#permissions)

```
zoom.view
zoom.user.view
zoom.meeting.view
zoom.meeting.create
zoom.meeting.update
zoom.meeting.delete
zoom.recording.view
zoom.recording.download
zoom.recording.delete
zoom.sync.execute

```

### Livewire Components Structure

[](#livewire-components-structure)

Components mengikuti pola yang konsisten dengan packages lain:

```
src/Livewire/
├── Users/
│   ├── Index.php                    # Main page component
│   └── Section/
│       └── Table.php               # Table section component
├── Meetings/
│   ├── Index.php                   # Main page component
│   ├── Create.php                  # Create page component
│   ├── Edit.php                    # Edit page component
│   └── Section/
│       ├── Table.php              # Meetings table component
│       └── Form.php               # Create/edit form component
└── Recordings/
    ├── Index.php                   # Main page component
    └── Section/
        └── Table.php              # Recordings table component

```

### View Structure

[](#view-structure)

```
resources/views/livewire/pages/
├── users/
│   ├── index.blade.php             # Users page layout
│   └── section/
│       └── table.blade.php         # Users table with filters
├── meetings/
│   ├── index.blade.php             # Meetings list page
│   ├── create.blade.php            # Create meeting page
│   ├── edit.blade.php              # Edit meeting page
│   └── section/
│       ├── table.blade.php         # Meetings table with filters
│       └── form.blade.php          # Meeting form component
└── recordings/
    ├── index.blade.php             # Recordings page layout
    └── section/
        └── table.blade.php         # Recordings table with filters

```

### Key Livewire Pattern

[](#key-livewire-pattern)

**Index Component (Page Level):**

```
class Index extends Component
{
    public function render()
    {
        return view('nawasara-zoom::livewire.pages.users.index')
            ->layout('nawasara-ui::components.layouts.app');
    }
}
```

**Section Component (Table/Form):**

```
class Table extends Component
{
    #[Url]
    public string $search = '';

    public function render()
    {
        $repo = new ZoomUserRepository();
        $users = $repo->paginate(25, ['search' => $this->search]);

        return view('nawasara-zoom::livewire.pages.users.section.table', [
            'users' => $users,
        ]);
    }
}
```

Database
--------

[](#database)

### Models

[](#models)

- `ZoomUser` — snapshot user Zoom
- `ZoomMeeting` — snapshot meeting
- `ZoomRecording` — snapshot recording

### Jobs

[](#jobs)

- `SyncZoomUsersJob` — hourly user sync
- `SyncZoomMeetingsJob` — 5-minute meeting sync
- `SyncZoomRecordingsJob` — 30-minute recording sync
- `CreateZoomMeetingJob` — create meeting mutation
- `UpdateZoomMeetingJob` — update meeting mutation
- `DeleteZoomMeetingJob` — delete meeting mutation

### Repositories

[](#repositories)

- `ZoomUserRepository` — user data access
- `ZoomMeetingRepository` — meeting data access
- `ZoomRecordingRepository` — recording data access

### Livewire Components

[](#livewire-components)

- `Users/Index` — list users
- `Meetings/Index` — list meetings
- `Meetings/Form` — create/edit meeting
- `Recordings/Index` — list recordings

Database Tables
---------------

[](#database-tables)

TablePurpose`nawasara_zoom_users`User snapshot`nawasara_zoom_meetings`Meeting snapshot`nawasara_zoom_recordings`Recording snapshotAPI Rate Limits
---------------

[](#api-rate-limits)

Zoom API rate limits: 30 req/sec (Light), 60 req/sec (Medium)

Default sync intervals sudah account untuk limits ini. Untuk high-volume account, adjust di `config/nawasara-zoom.php`.

Troubleshooting
---------------

[](#troubleshooting)

### "Credential belum lengkap"

[](#credential-belum-lengkap)

Pastikan Vault sudah punya credential:

```
php artisan vault:show
```

### "Token expired during request"

[](#token-expired-during-request)

ZoomClient automatically refresh token (cached untuk 55 menit). Jika error persist, check timezone server.

### "Rate limit exceeded"

[](#rate-limit-exceeded)

Increase sync interval di config atau reduce page size.

Cross-package Integration
-------------------------

[](#cross-package-integration)

PackageTriggerAction**nawasara/notification**Meeting started/ended (webhook)Notify host/participant**nawasara/registry**Zoom user mappingMap Zoom user ↔ OPD/PIC**nawasara/itop**Zoom user syncSync ke iTop Person recordRoadmap
-------

[](#roadmap)

- Webhook real-time sync (P2)
- Batch meeting creation via CSV (P3)
- Meeting recordings auto-retention (P2)
- Integration dengan Zoom Phone (P3)
- Zoom Webinar support (P3)

License
-------

[](#license)

MIT

###  Health Score

39

—

LowBetter than 84% of packages

Maintenance96

Actively maintained with recent releases

Popularity11

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity36

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~3 days

Total

5

Last Release

19d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/16914951?v=4)[Pringgo J. Saputro](/maintainers/pringgojs)[@pringgojs](https://github.com/pringgojs)

![](https://www.gravatar.com/avatar/edcf770bde3babcc9fa554e305e361b8614c1e505470e75842de75ea3e502548?d=identicon)[nawasara](/maintainers/nawasara)

---

Top Contributors

[![pringgojs](https://avatars.githubusercontent.com/u/16914951?v=4)](https://github.com/pringgojs "pringgojs (14 commits)")

---

Tags

apilaravelzoommeetingrecordingvideo conferenceNawasara

### Embed Badge

![Health badge](/badges/nawasara-zoom/health.svg)

```
[![Health](https://phpackages.com/badges/nawasara-zoom/health.svg)](https://phpackages.com/packages/nawasara-zoom)
```

###  Alternatives

[nasirkhan/laravel-starter

A CMS like modular Laravel starter project.

1.4k2.7k](/packages/nasirkhan-laravel-starter)[venturedrake/laravel-crm

A free open source CRM built as a package for laravel projects

39910.0k](/packages/venturedrake-laravel-crm)[joisarjignesh/bigbluebutton

BigBlueButton Server API Library for Laravel

162151.8k1](/packages/joisarjignesh-bigbluebutton)[fleetbase/core-api

Core Framework and Resources for Fleetbase API

1232.2k16](/packages/fleetbase-core-api)[tomshaw/electricgrid

A feature-rich Livewire package designed for projects that require dynamic, interactive data tables.

119.2k](/packages/tomshaw-electricgrid)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
