D
Engineering

External Services

Peta URL service eksternal — backend Go, engine WhatsApp, engine bot. URL tidak terpusat, hardcoded per controller.

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'):

VariabelLokalProduksiDipakai
base_url127.0.0.1:8000app.dazo.id
url_api127.0.0.1:8081/v1/api.dazo.id/v1/22 file
url_enginelocalhost:5002/engine.dazo.id/6 file
url_ai_agent127.0.0.1:1212/engine-bot.dazo.id/2 file
url_awscdn.dazo.id/devcdn.dazo.id29 file

Backend — hardcoded per controller

URL tidak di config/, tapi ditulis ulang di masing-masing controller dengan pola if (env == production):

Port lokalServiceFile yang menyimpan URL
5002Engine WhatsApp12 file: DeviceController, LiveChatController, OrderController, AgentAiController, BroadcastscedularController, TeamController, TeamchatController, ShortlinkController, LoginlogController, DeviceService, Downgrade, SubscriptionNotif
8081Backend GoWaController, OrderController, DigitalProductService
9091Backend Go (varian)OrderController, DigitalProductService
1212Engine BotAgentTestingInboxController, ProductController
1313Engine Bot (varian)ProductController
8001BiolinkAuthController, 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

plaintext
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

ServicePort
Backend Go8081 dan 9091
Engine Bot1212 dan 1313

Tanpa keterangan mana untuk konteks apa.

3. /api/ ditambah di produksi tapi tidak di lokal

AgentAiController menambahkan /api/ di URL produksi:

php
$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

js
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:

js
import api from '@/services/api'
// api.chats.request_escalate
// api.chats.finish_escalate

Dari backend

Pola dominan: curl_post() / curl_get() dengan URL dari property controller:

php
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:

php
// Contoh: AspireController meneruskan token dari request
$token = $request->header('Authorization');
$token = str_replace('Bearer ', '', $token);
// $token dikirim ke service Aspire

Untuk Engine Bot, token ada di config:

php
'Authorization' => 'Bearer ' . config('services.engine_bot.token')

Detail alur JWT lihat Auth & JWT.

Service yang tidak bisa dites lokal

FiturService yang dibutuhkan
Device pairing, QR codeEngine WhatsApp (url_engine)
Live chat inboundEngine WhatsApp
AI agent response, QnAEngine Bot (url_ai_agent)
Broadcast kirim pesanEngine WhatsApp
Follow-up otomatisEngine Bot
Escalate chatBackend Go (url_api)

Integrasi pihak ketiga (bukan service internal)

KategoriLayananConfig
PaymentDOKU, Duitku, Aspire, Midtransconfig/doku.php, .env
ShippingRajaongkirhardcoded di RajaongkirController
StorageAWS S3 + CDN.env (AWS_*)
NotifikasiFirebaseconfig/firebase.php, FirebaseServiceProvider
Auth GoogleGoogle OAuthlaravel/socialite
InfrastrukturCloudflare DNS, Turnstileconfig/constants.php, TurnstileService
GeolokasiMaxMind GeoIP2GeoIPService, MAXMIND_LICENSE_KEY
DokumenDomPDF, Maatwebsite Excel, Milon Barcodecomposer.json
RealtimeSocket.IO clientcomposables/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