dazoapp bergantung pada 3 service terpisah yang tidak ada di repo ini. URL service tidak terpusat — ada dua sumber yang harus dijaga sinkron.
Sumber URL
Frontend — resources/js/global.js
Gitignored, dipilih lewat variabel env ('local' / 'development' / 'production'):
| Variabel | Lokal | Produksi | Dipakai |
|---|---|---|---|
base_url | 127.0.0.1:8000 | app.dazo.id | — |
url_api | 127.0.0.1:8081/v1/ | api.dazo.id/v1/ | 22 file |
url_engine | localhost:5002/ | engine.dazo.id/ | 6 file |
url_ai_agent | 127.0.0.1:1212/ | engine-bot.dazo.id/ | 2 file |
url_aws | cdn.dazo.id/dev | cdn.dazo.id | 29 file |
Backend — hardcoded per controller
URL tidak di config/, tapi ditulis ulang di masing-masing controller dengan pola if (env == production):
| Port lokal | Service | File yang menyimpan URL |
|---|---|---|
5002 | Engine WhatsApp | 12 file: DeviceController, LiveChatController, OrderController, AgentAiController, BroadcastscedularController, TeamController, TeamchatController, ShortlinkController, LoginlogController, DeviceService, Downgrade, SubscriptionNotif |
8081 | Backend Go | WaController, OrderController, DigitalProductService |
9091 | Backend Go (varian) | OrderController, DigitalProductService |
1212 | Engine Bot | AgentTestingInboxController, ProductController |
1313 | Engine Bot (varian) | ProductController |
8001 | Biolink | AuthController, WelcomeController, helpers.php |
Hanya satu yang sudah dipindah ke config: config/services.php:47 (ENGINE_BOT_URL / ENGINE_BOT_TOKEN), dipakai DokuCheckoutController.php:459.
Masalah yang perlu diketahui
1. Host produksi engine WhatsApp tidak konsisten
engine.dazo.id — 7 pemakaian
engine-wa.dazo.id — 3 pemakaian (di AgentAiController)Keduanya untuk service yang sama. Konfirmasi mana yang benar ke tim sebelum menulis URL baru.
2. Dua port untuk service yang sama
| Service | Port |
|---|---|
| Backend Go | 8081 dan 9091 |
| Engine Bot | 1212 dan 1313 |
Tanpa keterangan mana untuk konteks apa.
3. /api/ ditambah di produksi tapi tidak di lokal
AgentAiController menambahkan /api/ di URL produksi:
$this->url_engine = 'http://localhost:5002/'; // lokal: tanpa /api/
$this->url_engine = 'https://engine-wa.dazo.id/api/'; // prod: dengan /api/4. Pola if (env == production) diulang ~20 controller
Mengubah satu host berarti menyunting belasan file. Belum ada solusi terpusat.
Cara memanggil service
Dari frontend
import { Global } from '@/global.js'
const { url_api } = Global()
const { data } = await axiosInstance.get(`${url_api}chats/request-escalate`)services/api.js sudah punya beberapa endpoint siap pakai:
import api from '@/services/api'
// api.chats.request_escalate
// api.chats.finish_escalateDari backend
Pola dominan: curl_post() / curl_get() dengan URL dari property controller:
class Downgrade extends Command
{
public $url_engine = 'http://localhost:5002/';
public function handle()
{
if (config('app.env') == 'production') {
$this->url_engine = 'https://engine.dazo.id/';
}
$result = $this->curl_post($this->url_engine . 'deviceinfo', [
'instance' => $device->id,
]);
}
}JWT ke service
JWT yang diterbitkan dazoapp dipakai sebagai kredensial saat memanggil service lain:
// Contoh: AspireController meneruskan token dari request
$token = $request->header('Authorization');
$token = str_replace('Bearer ', '', $token);
// $token dikirim ke service AspireUntuk Engine Bot, token ada di config:
'Authorization' => 'Bearer ' . config('services.engine_bot.token')Detail alur JWT lihat Auth & JWT.
Service yang tidak bisa dites lokal
| Fitur | Service yang dibutuhkan |
|---|---|
| Device pairing, QR code | Engine WhatsApp (url_engine) |
| Live chat inbound | Engine WhatsApp |
| AI agent response, QnA | Engine Bot (url_ai_agent) |
| Broadcast kirim pesan | Engine WhatsApp |
| Follow-up otomatis | Engine Bot |
| Escalate chat | Backend Go (url_api) |
Integrasi pihak ketiga (bukan service internal)
| Kategori | Layanan | Config |
|---|---|---|
| Payment | DOKU, Duitku, Aspire, Midtrans | config/doku.php, .env |
| Shipping | Rajaongkir | hardcoded di RajaongkirController |
| Storage | AWS S3 + CDN | .env (AWS_*) |
| Notifikasi | Firebase | config/firebase.php, FirebaseServiceProvider |
| Auth Google | Google OAuth | laravel/socialite |
| Infrastruktur | Cloudflare DNS, Turnstile | config/constants.php, TurnstileService |
| Geolokasi | MaxMind GeoIP2 | GeoIPService, MAXMIND_LICENSE_KEY |
| Dokumen | DomPDF, Maatwebsite Excel, Milon Barcode | composer.json |
| Realtime | Socket.IO client | composables/useSocket.js |
Rencana pemusatan URL (belum dikerjakan)
Pusatkan semua URL service ke config/services.php untuk menghilangkan pola if (env == production) di ~20 controller. Lihat Deployment — Tahap 2 item 7 di dazoapp/README.md.
Langkah berikutnya
- Butuh auth untuk panggil service? Baca Auth & JWT.
- Baru mulai kerja? Baca Conventions.