D
Modul

AI Agent

Konfigurasi AI agent — prompt engineering, QnA, 7 skenario follow-up otomatis, testing inbox, integrasi engine bot.

Modul AI Agent mengelola konfigurasi AI yang memproses pesan WhatsApp masuk. Prompt, QnA, follow-up otomatis, dan testing inbox. Eksekusi AI dilakukan di engine bot (Node.js, tidak ada di repo ini).

File kunci

FileBarisPeran
app/Http/Controllers/AgentAiController.php1.477CRUD agent, prompt/qna/followup/welcome, integrasi device
app/Http/Controllers/AgentTestingInboxController.phpTesting inbox (simulasi chat AI)
app/Models/Agent.php38Model agent AI
app/Models/AgentTestingInbox.php27Inbox testing
config/default_data.php126Prompt default + 7 followup default

Model Agent

Field: name, template (mis. “Customer Service”, “Sales”), language_character (gaya bahasa), history_limit (jumlah pesan ke LLM), message_await (detik), message_limit, random_time, welcome_messages (array {type, message, fileName}), prompt, qna_conditional (array [{question, answer}]), followup (object keyed by 7 skenario), store_id.

Relasi: devices() hasMany Device via agent_id. Accessor integrated (devices isNotEmpty).

Prompt engineering

Default prompt di config/default_data.php:6-32 — heredoc dengan placeholder {{template}}, {{store_name}}, {{language_character}}. Berisi Do’s & Dont’s (10 poin masing-masing).

Saat storeAgent: str_replace placeholder → prompt default disimpan ke agent.prompt.

7 skenario follow-up

Tiap entry: {is_generate_ai, message, sending_time, image, fileName}.

KeySkenario
call_to_orderAjak order
ask_product_qtyTanya jumlah
ask_shipping_addressTanya alamat
ask_shipping_methodTanya kurir
ask_payment_methodTanya pembayaran
confirm_orderKonfirmasi
payment_reminderIngatkan bayar

Jika is_generate_ai=true, pesan diregen ulang oleh AI. Template message pakai placeholder {{nama_pelanggan}}, {{nama_produk}}, dll.

Controller method utama

MethodFungsi
storeAgentCreate agent + prompt default dari config
updatePromptUpdate prompt
updateQnaCRUD QnA (action: add/update/delete)
updateFollowUpUpdate entry followup per key
updateWelcomeUpdate welcome_messages + upload image S3
changeAgentAssign/cancel device.agent_id
listConnectedDevicesList device + status real-time
setting($id)Render editor lengkap

Route

Web (routes/web.php:423)

MethodPathFungsi
GET/aiagentList agent
GET/aiagent/setting/{id}Editor

API (routes/api.php:723)

Prefix /agent:

MethodPathFungsi
POST/agent/store-agentCreate
PUT/agent/update/{id}Update umum
PATCH/agent/update-prompt/{id}Update prompt
PATCH/agent/update-qna/{id}CRUD QnA
PATCH/agent/update-followup/{id}Update followup
POST/agent/update-welcome/{id}Update welcome
POST/agent/change-agentAssign device
GET/agent/connected-deviceList device
DELETE/agent/destroy/{id}Hapus

Integrasi

ServiceEndpointUntuk
Engine Bot (url_ai_agent)POST /api/generate_welcomeGenerate welcome dari AI
Engine Bot (url_ai_agent)POST /api/ai-agent-testingSimulasi chat testing
Engine Bot (url_ai_agent)Socket.IO io.connect()Real-time testing chat
Engine WA (url_engine)GET /api/device-infoCek status device di listConnectedDevices
AWS S3S3UploadControllerUpload image welcome

Temuan

  • generalPrompt() rusak — deklarasi string tanpa return. Method mengembalikan null. Tidak ada route yang memanggil — mendekati dead code
  • Permission AI agent dimatikan — semua cek findPermissionByName dikomentari. Akses via store.addon_plan saja
  • Route /agent/store & /agent/upload mati — tidak ada method. Route terdaftar tapi controller tidak punya method
  • updateQna cari by question string — kalau ada duplikat, hanya pertama yang terupdate. Tidak pakai UUID stabil sebagai key
  • URL engine WA inkonsisten — AgentAi pakai engine-wa.dazo.id/api/ (dengan /api/), controller lain pakai engine.dazo.id/ (tanpa /api/)