Konco berintegrasi dengan sejumlah service eksternal — Meta Marketing API, payment gateway, WebSocket, live chat, dan export utilities. Sebagian besar komunikasi Meta diisolasi di dazo-whitelist-api; web app hanya berinteraksi via wrapper MyApi/FacebookApi.
Meta Graph API
| Aspek | Keterangan |
|---|---|
| Versi API | v20.0 (FACEBOOK_GRAPH_VERSION di .env API engine) |
| SDK | facebook/php-business-sdk ^20.0 (di dazo-whitelist-api) |
| Endpoint proxy | dazo-whitelist-api /api/facebook/*, /api/account/*, /api/transfer-balance/* |
| Token lifecycle | Long-lived (60 hari), auto-refresh < 7 hari via facebook:refresh-tokens daily 02:00 |
| Token storage | UserFacebookToken di API engine — access_token di-encrypt (Crypt::encrypt + SALTED_CREAMY salt) |
| Wrapper web app | App\Src\FacebookApi (extends MyApi) — GuzzleHTTP ke API engine |
Alur request Meta
Member action (UI)
│
▼
Livewire / Controller (dazo-whitelist)
│
▼
App\Src\FacebookApi::post($endpoint, $params)
│ + Bearer token dari tabel configs
│ + header public-key
▼
dazo-whitelist-api (port 8081)
│ + middleware auth:api + myapi
▼
FacebookAdAccountController / FacebookBusinessController / AccountController
│
▼
FacebookApiService (php-business-sdk wrapper)
│
▼
Meta Graph API v20.0 ──── 🌐 Facebook ServersEndpoint yang diproxy
| Grup | Endpoint di API engine | Fungsi |
|---|---|---|
| OAuth & token | /api/application/token, /api/facebook/oauth-url, /api/facebook/callback, /api/facebook/accounts | Handshake Passport, OAuth Facebook, list/disconnect akun FB |
| Business Manager | /api/facebook/businesses/*, /api/business/* | Fetch/import/rename BM |
| Ad Accounts | /api/facebook/businesses/{bmId}/ad-accounts, /api/facebook/ad-accounts/*, /api/account/* | List/import/rename ad accounts, cek partnership |
| Marketing | /api/facebook/ad-accounts/{id}/campaigns, /adsets, /ads, /{id}/status, /{id}/budget | Campaigns/adsets/ads listing + status/budget mutation |
| Spend cap | /api/account/balance, /topup, /withdraw, /refund, /spendcap, /check, /sync | Saldo & spend cap mutations |
| Transfer balance | /api/transfer-balance (GET/POST), /{id} (GET), /{id}/process (POST) | Transfer saldo antar-akun |
| Import jobs | /api/facebook/import-jobs/{jobId}, /{jobId}/cancel | Progress tracking import massal |
Detail per-endpoint di API Reference.
Payment gateway
MonitPay (aktif)
| Aspek | Keterangan |
|---|---|
| Service class | app/Services/MonitpayService.php |
| Config | config/monitpay.php |
| Callback URL | POST /api/monitpay/callback (MonitpayController::callback) — aktif |
| Sandbox | /sandbox/monitpay — hanya environment non-production, middleware sandbox + auth:admin |
| Sync scheduler | monitpay:sync tiap 2 menit (timeout 5 menit via withoutOverlapping(5)) |
| Webhook log | Tabel WebhookLog — audit trail semua callback |
| Sync command | php artisan monitpay:sync (SyncMonitpayTransactionCommand.php) |
Duitku (nonaktif)
| Aspek | Keterangan |
|---|---|
| Package | duitkupg/duitku-php dev-master |
| Wrapper | app/Src/ApiDuitku.php |
| Callback route | Route::any('/duitku_callback', ...) — dikomentari di routes/api.php:23 |
| Member callback | Route::get('/payment_callback', ...) — dikomentari di routes/_member.php:46 |
Laravel Reverb (WebSocket)
| Aspek | Keterangan |
|---|---|
| Package | laravel/reverb ^1.0 |
| Server | php artisan reverb:start — di-start oleh local:start (terminal 2) |
| Port | REVERB_PORT=8080 (default) |
| Protocol | WebSocket, compatible Pusher JS |
| Frontend | Laravel Echo + pusher-js — config via VITE_REVERB_* |
| Driver | BROADCAST_DRIVER=reverb |
Event yang di-broadcast
| Event | Trigger | Channel |
|---|---|---|
AdminRequestCreated | Admin request baru | Private admin-request.{admin_id} |
TicketMessageCreated | Pesan tiket baru | Private ticket.{ticket_id} |
TicketStatusUpdated | Status tiket berubah | Private ticket.{ticket_id} |
AdminSubscriptionReminderNotification | Order paid belum diproses | Private admin channel (via notify:subscription-reminder) |
Registrasi channel authorization di routes/channels.php.
Crisp Chat
| Aspek | Keterangan |
|---|---|
| Config | CRISP_WEBSITE_ID, CRISP_ENABLED di .env |
| Widget | Injected di layout (before </head>) — custom JS, bukan package |
| Locale | "id" (Indonesian) — config $crisp.push(["config", "locale", ["id"]]) |
| Theme color | #2563eb (match project theme) |
| Dual-channel | WhatsApp button di kiri Crisp — .wa-float-dual { right: 95px; z-index: 999 } vs Crisp z-index: 1000 |
Z-index hierarchy
| Element | Z-Index | Posisi |
|---|---|---|
| Crisp widget | 1000 | Pojok kanan bawah |
| WhatsApp button | 999 | Digeser kiri Crisp (.wa-float-dual) |
| Other CTA | 998 | — |
User identity sync
Saat member login, Crisp otomatis dapat identitas user:
window.CRISP_READY_TRIGGER = function() {
$crisp.push(["set", "user:email", ["{{ auth()->user()->email }}"]]);
$crisp.push(["set", "user:nickname", ["{{ auth()->user()->name }}"]]);
};Detail implementasi Crisp ada di CLAUDE.md repo dazo-whitelist.
Export utilities
PDF Invoice
| Aspek | Keterangan |
|---|---|
| Package | barryvdh/laravel-dompdf ^3.0 |
| Penggunaan | Generate invoice transaksi (deposit, sewa, fee admin) |
| Output | PDF download — route admin.pdf |
Excel export
| Aspek | Keterangan |
|---|---|
| Package | maatwebsite/excel ^3.1 |
| Penggunaan | Export data laporan iklan (scheduled export) |
| Scheduler | AdsExportSchedule model — daily & weekly, dispatched jam 07:00 via SendScheduledAdsExportJob |
User agent detection
| Aspek | Keterangan |
|---|---|
| Package | jenssegers/agent ^2.6 |
| Penggunaan | Deteksi device/browser untuk logging & security (login notification) |
Image processing
| Aspek | Keterangan |
|---|---|
| Package | intervention/image ^2 |
| Penggunaan | Resize/compress upload (profile, attachment tiket) |
HTML purifier
| Aspek | Keterangan |
|---|---|
| Packages | ezyang/htmlpurifier ^4.17, mews/purifier ^3.4 |
| Penggunaan | Sanitize rich text input (ticket message, news) |
QR Code
| Aspek | Keterangan |
|---|---|
| Package | bacon/bacon-qr-code ^3.0 |
| Penggunaan | Generate QR untuk Google 2FA setup |
Graph SDK lokal (web app)
| Aspek | Keterangan |
|---|---|
| Package | facebook/graph-sdk ^5.1 |
| Penggunaan | Wrapper lokal terbatas di web app — sebagian besar Graph call di-delegasi ke API engine (php-business-sdk ^20.0) |
Payment method storage
| Model | Fungsi |
|---|---|
PaymentMethod | Master metode pembayaran (transfer bank, gateway) |
BankAccount | Master rekening bank member & admin |
Langkah berikutnya
- Detail endpoint API engine? Lihat API Reference.
- Detail webhook MonitPay? Baca Payment Flow deep-dive.
- Detail scheduler? Lihat Architecture.