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
| File | Baris | Peran |
|---|---|---|
app/Http/Controllers/AgentAiController.php | 1.477 | CRUD agent, prompt/qna/followup/welcome, integrasi device |
app/Http/Controllers/AgentTestingInboxController.php | — | Testing inbox (simulasi chat AI) |
app/Models/Agent.php | 38 | Model agent AI |
app/Models/AgentTestingInbox.php | 27 | Inbox testing |
config/default_data.php | 126 | Prompt 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}.
| Key | Skenario |
|---|---|
call_to_order | Ajak order |
ask_product_qty | Tanya jumlah |
ask_shipping_address | Tanya alamat |
ask_shipping_method | Tanya kurir |
ask_payment_method | Tanya pembayaran |
confirm_order | Konfirmasi |
payment_reminder | Ingatkan bayar |
Jika is_generate_ai=true, pesan diregen ulang oleh AI. Template message pakai placeholder {{nama_pelanggan}}, {{nama_produk}}, dll.
Controller method utama
| Method | Fungsi |
|---|---|
storeAgent | Create agent + prompt default dari config |
updatePrompt | Update prompt |
updateQna | CRUD QnA (action: add/update/delete) |
updateFollowUp | Update entry followup per key |
updateWelcome | Update welcome_messages + upload image S3 |
changeAgent | Assign/cancel device.agent_id |
listConnectedDevices | List device + status real-time |
setting($id) | Render editor lengkap |
Route
Web (routes/web.php:423)
| Method | Path | Fungsi |
|---|---|---|
| GET | /aiagent | List agent |
| GET | /aiagent/setting/{id} | Editor |
API (routes/api.php:723)
Prefix /agent:
| Method | Path | Fungsi |
|---|---|---|
| POST | /agent/store-agent | Create |
| 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-agent | Assign device |
| GET | /agent/connected-device | List device |
| DELETE | /agent/destroy/{id} | Hapus |
Integrasi
| Service | Endpoint | Untuk |
|---|---|---|
Engine Bot (url_ai_agent) | POST /api/generate_welcome | Generate welcome dari AI |
Engine Bot (url_ai_agent) | POST /api/ai-agent-testing | Simulasi chat testing |
Engine Bot (url_ai_agent) | Socket.IO io.connect() | Real-time testing chat |
Engine WA (url_engine) | GET /api/device-info | Cek status device di listConnectedDevices |
| AWS S3 | S3UploadController | Upload image welcome |
Temuan
generalPrompt()rusak — deklarasi string tanpareturn. Method mengembalikannull. Tidak ada route yang memanggil — mendekati dead code- Permission AI agent dimatikan — semua cek
findPermissionByNamedikomentari. Akses viastore.addon_plansaja - Route
/agent/store&/agent/uploadmati — tidak ada method. Route terdaftar tapi controller tidak punya method updateQnacari byquestionstring — 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 pakaiengine.dazo.id/(tanpa/api/)