nawasara/zoom
Composer 安装命令:
composer require 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.
README 文档
README
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
✅ 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)
- 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
- List recording per meeting/host
- Download link (cloud recording)
- Delete recording dengan retention policy
- Storage size tracking
🟡 P2 — Webhook Integration
- Real-time event handling (meeting started/ended, recording ready)
- Signature verification (HMAC SHA-256)
UI Components (nawasara-ui)
Package menggunakan komponen-komponen dari nawasara-ui:
x-nawasara-ui::page.container— Page wrapperx-nawasara-ui::page.title— Page titlex-nawasara-ui::page.actions— Action buttons areax-nawasara-ui::button— Custom button dengan color/size variantsx-nawasara-ui::filter-bar— Search + filter UIx-nawasara-ui::filter-dropdown— Filter dropdownx-nawasara-ui::filter-chip— Active filter chipx-nawasara-ui::table— Data table dengan headersx-nawasara-ui::form.label— Form labelx-lucide-*— Icon components dari Lucide
Setup
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
- Login ke Zoom Marketplace
- Create aplikasi baru dengan type Server-to-Server OAuth
- Set scopes:
user:read:adminmeeting:read:admin,meeting:write:adminrecording:read:admin,recording:write:admin
- Copy Account ID, Client ID, Client Secret ke Vault
3. Run Migration
php artisan migrate
4. Seed Permissions
php artisan db:seed --class="Nawasara\\Zoom\\Database\\Seeders\\PermissionSeeder"
5. Test Connection
php artisan zoom:health-check
Penggunaan
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
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
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
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
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
Models
ZoomUser— snapshot user ZoomZoomMeeting— snapshot meetingZoomRecording— snapshot recording
Jobs
SyncZoomUsersJob— hourly user syncSyncZoomMeetingsJob— 5-minute meeting syncSyncZoomRecordingsJob— 30-minute recording syncCreateZoomMeetingJob— create meeting mutationUpdateZoomMeetingJob— update meeting mutationDeleteZoomMeetingJob— delete meeting mutation
Repositories
ZoomUserRepository— user data accessZoomMeetingRepository— meeting data accessZoomRecordingRepository— recording data access
Livewire Components
Users/Index— list usersMeetings/Index— list meetingsMeetings/Form— create/edit meetingRecordings/Index— list recordings
Database Tables
| Table | Purpose |
|---|---|
nawasara_zoom_users |
User snapshot |
nawasara_zoom_meetings |
Meeting snapshot |
nawasara_zoom_recordings |
Recording snapshot |
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
"Credential belum lengkap"
Pastikan Vault sudah punya credential:
php artisan vault:show
"Token expired during request"
ZoomClient automatically refresh token (cached untuk 55 menit). Jika error persist, check timezone server.
"Rate limit exceeded"
Increase sync interval di config atau reduce page size.
Cross-package Integration
| Package | Trigger | Action |
|---|---|---|
| nawasara/notification | Meeting started/ended (webhook) | Notify host/participant |
| nawasara/registry | Zoom user mapping | Map Zoom user ↔ OPD/PIC |
| nawasara/itop | Zoom user sync | Sync ke iTop Person record |
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
MIT
nawasara/zoom 适用场景与选型建议
nawasara/zoom 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 155 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 05 月 09 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「api」 「laravel」 「zoom」 「meeting」 「recording」 「Nawasara」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 nawasara/zoom 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 nawasara/zoom 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 nawasara/zoom 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A Filament plugin for displaying image galleries with zoom, rotate, and flip capabilities
A laravel zoom api wrapper
Stand-alone zoomify tile generator (format Zoomify) for use with OpenSeadragon, OpenLayers and various viewers.
A PSR-7 compatible library for making CRUD API endpoints
TYPO3 PhotoSwipe-Plugin for native image-enlargement
Laravel Zoom package
统计信息
- 总下载量: 155
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 48
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-05-09