D
Engineering

External Services

Service eksternal Konco — Meta Graph API v20.0 via dazo-whitelist-api, MonitPay payment gateway (aktif), Duitku (route nonaktif), Laravel Reverb WebSocket, Crisp Chat dual-channel WhatsApp, Duitku PHP SDK, dompdf + Excel export.

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

AspekKeterangan
Versi APIv20.0 (FACEBOOK_GRAPH_VERSION di .env API engine)
SDKfacebook/php-business-sdk ^20.0 (di dazo-whitelist-api)
Endpoint proxydazo-whitelist-api /api/facebook/*, /api/account/*, /api/transfer-balance/*
Token lifecycleLong-lived (60 hari), auto-refresh < 7 hari via facebook:refresh-tokens daily 02:00
Token storageUserFacebookToken di API engine — access_token di-encrypt (Crypt::encrypt + SALTED_CREAMY salt)
Wrapper web appApp\Src\FacebookApi (extends MyApi) — GuzzleHTTP ke API engine

Alur request Meta

text
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 Servers

Endpoint yang diproxy

GrupEndpoint di API engineFungsi
OAuth & token/api/application/token, /api/facebook/oauth-url, /api/facebook/callback, /api/facebook/accountsHandshake Passport, OAuth Facebook, list/disconnect akun FB
Business Manager/api/facebook/businesses/*, /api/business/*Fetch/import/rename BM
Ad Accounts/api/facebook/businesses/&#123;bmId&#125;/ad-accounts, /api/facebook/ad-accounts/*, /api/account/*List/import/rename ad accounts, cek partnership
Marketing/api/facebook/ad-accounts/&#123;id&#125;/campaigns, /adsets, /ads, /&#123;id&#125;/status, /&#123;id&#125;/budgetCampaigns/adsets/ads listing + status/budget mutation
Spend cap/api/account/balance, /topup, /withdraw, /refund, /spendcap, /check, /syncSaldo & spend cap mutations
Transfer balance/api/transfer-balance (GET/POST), /&#123;id&#125; (GET), /&#123;id&#125;/process (POST)Transfer saldo antar-akun
Import jobs/api/facebook/import-jobs/&#123;jobId&#125;, /&#123;jobId&#125;/cancelProgress tracking import massal

Detail per-endpoint di API Reference.

Payment gateway

MonitPay (aktif)

AspekKeterangan
Service classapp/Services/MonitpayService.php
Configconfig/monitpay.php
Callback URLPOST /api/monitpay/callback (MonitpayController::callback) — aktif
Sandbox/sandbox/monitpay — hanya environment non-production, middleware sandbox + auth:admin
Sync schedulermonitpay:sync tiap 2 menit (timeout 5 menit via withoutOverlapping(5))
Webhook logTabel WebhookLog — audit trail semua callback
Sync commandphp artisan monitpay:sync (SyncMonitpayTransactionCommand.php)

Duitku (nonaktif)

AspekKeterangan
Packageduitkupg/duitku-php dev-master
Wrapperapp/Src/ApiDuitku.php
Callback routeRoute::any('/duitku_callback', ...) — dikomentari di routes/api.php:23
Member callbackRoute::get('/payment_callback', ...) — dikomentari di routes/_member.php:46

Laravel Reverb (WebSocket)

AspekKeterangan
Packagelaravel/reverb ^1.0
Serverphp artisan reverb:start — di-start oleh local:start (terminal 2)
PortREVERB_PORT=8080 (default)
ProtocolWebSocket, compatible Pusher JS
FrontendLaravel Echo + pusher-js — config via VITE_REVERB_*
DriverBROADCAST_DRIVER=reverb

Event yang di-broadcast

EventTriggerChannel
AdminRequestCreatedAdmin request baruPrivate admin-request.&#123;admin_id&#125;
TicketMessageCreatedPesan tiket baruPrivate ticket.&#123;ticket_id&#125;
TicketStatusUpdatedStatus tiket berubahPrivate ticket.&#123;ticket_id&#125;
AdminSubscriptionReminderNotificationOrder paid belum diprosesPrivate admin channel (via notify:subscription-reminder)

Registrasi channel authorization di routes/channels.php.

Crisp Chat

AspekKeterangan
ConfigCRISP_WEBSITE_ID, CRISP_ENABLED di .env
WidgetInjected di layout (before </head>) — custom JS, bukan package
Locale"id" (Indonesian) — config $crisp.push(["config", "locale", ["id"]])
Theme color#2563eb (match project theme)
Dual-channelWhatsApp button di kiri Crisp — .wa-float-dual &#123; right: 95px; z-index: 999 &#125; vs Crisp z-index: 1000

Z-index hierarchy

ElementZ-IndexPosisi
Crisp widget1000Pojok kanan bawah
WhatsApp button999Digeser kiri Crisp (.wa-float-dual)
Other CTA998—

User identity sync

Saat member login, Crisp otomatis dapat identitas user:

javascript
window.CRISP_READY_TRIGGER = function() &#123;
    $crisp.push(["set", "user:email", ["&#123;&#123; auth()->user()->email &#125;&#125;"]]);
    $crisp.push(["set", "user:nickname", ["&#123;&#123; auth()->user()->name &#125;&#125;"]]);
&#125;;

Detail implementasi Crisp ada di CLAUDE.md repo dazo-whitelist.

Export utilities

PDF Invoice

AspekKeterangan
Packagebarryvdh/laravel-dompdf ^3.0
PenggunaanGenerate invoice transaksi (deposit, sewa, fee admin)
OutputPDF download — route admin.pdf

Excel export

AspekKeterangan
Packagemaatwebsite/excel ^3.1
PenggunaanExport data laporan iklan (scheduled export)
SchedulerAdsExportSchedule model — daily & weekly, dispatched jam 07:00 via SendScheduledAdsExportJob

User agent detection

AspekKeterangan
Packagejenssegers/agent ^2.6
PenggunaanDeteksi device/browser untuk logging & security (login notification)

Image processing

AspekKeterangan
Packageintervention/image ^2
PenggunaanResize/compress upload (profile, attachment tiket)

HTML purifier

AspekKeterangan
Packagesezyang/htmlpurifier ^4.17, mews/purifier ^3.4
PenggunaanSanitize rich text input (ticket message, news)

QR Code

AspekKeterangan
Packagebacon/bacon-qr-code ^3.0
PenggunaanGenerate QR untuk Google 2FA setup

Graph SDK lokal (web app)

AspekKeterangan
Packagefacebook/graph-sdk ^5.1
PenggunaanWrapper lokal terbatas di web app — sebagian besar Graph call di-delegasi ke API engine (php-business-sdk ^20.0)

Payment method storage

ModelFungsi
PaymentMethodMaster metode pembayaran (transfer bank, gateway)
BankAccountMaster rekening bank member & admin

Langkah berikutnya