Dokumentasi Developer

Integrasi AI ke SCRM

Panduan menghubungkan AI dari project Materi Trading ke SCRM 7 Star. AI tidak membalas langsung ke nasabah — AI mengisi kotak saran di chatroom, CS asli yang klik & edit sebelum kirim.

1. Ringkasan Arsitektur

Project Materi Trading = AI brain (prompt, persona, materi, embedding). Project SCRM 7 Star = UI chat tempat CS asli berkomunikasi dengan nasabah.

┌─────────────────────────────┐         ┌─────────────────────────────┐
│   SCRM 7 Star (Chatroom)    │         │   Materi Trading (AI Brain) │
│                             │  HTTPS  │                             │
│  Nasabah ◄──► CS asli       │ ──────► │  RAG + Prompt + Materi      │
│                             │  POST   │  /api/v1/ai/suggest         │
│  ┌───────────────────────┐  │         │                             │
│  │ Kotak Saran AI ◄───────┼──┼─────────┤  Return: suggested answer   │
│  │ (CS klik → edit → kirim)│  │         │  + meta stage/attachment    │
│  └───────────────────────┘  │         └─────────────────────────────┘
└─────────────────────────────┘

Yang dilakukan SCRM

  • Kirim pesan nasabah + riwayat chat ke API
  • Tampilkan data.answer di kotak saran
  • CS klik saran → edit (nama, link, dll) → kirim ke nasabah

Yang dilakukan Materi Trading

  • Baca materi via embedding (RAG)
  • Generate saran jawaban CS (persona Vania)
  • Return teks + metadata funnel stage

2. Prasyarat di Materi Trading

Pastikan hal-hal ini sudah siap sebelum SCRM mulai memanggil API:

AI aktif

Admin → Pengaturan AI → tab Umum → toggle "Aktifkan AI" ON

Materi ter-embed

Admin → AI Playground → "Embed Pending Saja" atau "Embed Semua" (badge pending = 0)

Profil Brand diisi

Admin → Pengaturan AI → tab Prompt & Persona → isi "Profil Brand" (legalitas, PT, BAPPEBTI)

Provider AI siap

Minimal 1 API key chat + embed terpasang (Cohere/Groq/Gemini, dll)

Token API dibuat

Admin → Token API → Create (lihat langkah 4)

Tips: uji dulu di /tanya-ai atau AI Playground admin sebelum hubungkan ke SCRM.

3. Prasyarat di SCRM 7 Star

Fitur minimum yang harus ada di SCRM agar integrasi berjalan:

Komponen SCRM Fungsi
Chatroom CS ↔ NasabahUI percakapan utama (sudah ada di SCRM)
Kotak Saran AIPanel terpisah dari bubble chat — menampilkan draft jawaban dari API. Bukan auto-kirim ke nasabah.
Tombol "Pakai Saran"CS klik → teks saran masuk ke input chat → CS edit → kirim manual
HTTP Client (backend)Server SCRM bisa POST ke https://www.materi.tools7star.shop/api/v1/ai/suggest (jangan panggil dari browser nasabah — token harus rahasia di server)
Penyimpanan riwayat chatKirim array history ke API supaya AI ingat konteks & adopt nama CS dari percakapan sebelumnya
Trigger otomatis (opsional)Setiap pesan masuk dari nasabah → panggil API → update kotak saran. Atau tombol "Minta Saran AI" manual.

4. Buat Token API

  1. Login admin → buka Token API
  2. Klik Create, isi nama mis. SCRM Production
  3. Set rate limit sesuai kebutuhan (default cukup untuk tim CS)
  4. Salin token yang muncul sekali (format: mtt_xxxxxxxx...) — simpan di env SCRM, jangan commit ke git
  5. Opsional: isi Allowed IPs kalau mau batasi hanya dari server SCRM
Penting: Token hanya ditampilkan 1 kali saat create. Kalau hilang, buat token baru & nonaktifkan yang lama.

5. Endpoint API

POST https://www.materi.tools7star.shop/api/v1/ai/suggest
Endpoint utama — minta saran jawaban CS berdasarkan pesan nasabah + riwayat chat.
GET https://www.materi.tools7star.shop/api/v1/ai/health
Health check — verifikasi token valid & API hidup sebelum go-live.

Base URL: https://www.materi.tools7star.shop
Auth header (wajib): Authorization: Bearer mtt_<token>
Content-Type: application/json

6. Request & Response

Request Body (POST /ai/suggest)

{
  "question": "apakah ini penipuan?",
  "mode": "suggestion",
  "history": [
    { "role": "assistant", "content": "Halo Kak! Saya Agustina dari Materi Tools 😊" },
    { "role": "user", "content": "halo, ini apa ya?" },
    { "role": "assistant", "content": "Program E*Trade Data resmi via PT Mega Menara Mas Berjangka..." }
  ]
}
FieldWajibKeterangan
questionYaPesan terbaru dari nasabah (min 1, max 2000 karakter). Balasan pendek seperti ok / iya didukung — wajib sertakan history agar AI paham konteks.
modeTidaksuggestion (default, untuk SCRM) atau direct (testing langsung)
historyTidakMax 20 turn. role: user = nasabah, assistant = CS/manusia/AI sebelumnya
temperatureTidak0–1, opsional override (default dari pengaturan admin)

Response Sukses (HTTP 200)

{
  "success": true,
  "data": {
    "answer": "Wajar Kak hati-hati... Program E*Trade Data BUKAN penipuan karena...",
    "sources": [ { "id": 12, "title": "Legalitas", "url": "...", "similarity": 0.82 } ],
    "images": [],
    "meta": {
      "provider": "groq",
      "model": "llama-3.3-70b-versatile",
      "latency_ms": 1240,
      "stage": "objection",
      "needs_attachment": null,
      "needs_link": null,
      "detected_cs_name": "Agustina",
      "mode": "suggestion"
    }
  }
}

Field penting untuk SCRM

  • data.answer — teks saran untuk kotak saran (CS copy/edit)
  • data.meta.stage — tahap funnel: greeting, discovery, testimoni, closing_pre_transfer, dll.
  • data.meta.needs_attachmenttestimoni = CS perlu attach gambar testimoni manual
  • data.meta.needs_linkpendaftaran = saran mengandung placeholder link daftar
  • data.meta.detected_cs_name — nama CS terdeteksi dari history (AI adopt identitas ini)
  • data.sources — referensi internal (opsional ditampilkan ke CS, jangan ke nasabah)

7. Alur Integrasi di SCRM

  1. 1

    Nasabah kirim pesan

    Pesan masuk ke chatroom SCRM seperti biasa.

  2. 2

    SCRM kumpulkan history

    Ambil N pesan terakhir (user + assistant) dari database chat session.

  3. 3

    SCRM panggil API

    POST ke /api/v1/ai/suggest dengan question = pesan terbaru nasabah, mode = suggestion, history = riwayat.

  4. 4

    Tampilkan di Kotak Saran

    Render data.answer di panel saran — JANGAN auto-kirim ke nasabah.

  5. 5

    CS review & edit

    CS baca saran, klik "Pakai", edit nama/link/gambar sesuai kebutuhan.

  6. 6

    CS kirim manual

    CS tekan send — bubble chat yang nasabah lihat = versi final dari CS, bukan AI mentah.

Mapping role history: di SCRM, pesan nasabahrole: "user" (atau customer), pesan CS manusiarole: "assistant" (atau agent / cs). Urutan kronologis dari lama ke baru.
Balasan pendek (ok / ya / iya / baik): wajib kirim history lengkap. API menerima pesan 1–2 huruf. Respons ada di suggestion (root), answer (root), atau data.answer.

7b. Troubleshooting: ok / ya tidak muncul suggestion

Gejala: baik / halo dapat suggestion, tapi ok / ya tidak — dan tidak ada di Query Log Admin.

Jika curl manual dengan question: "ok" return success: true tapi SCRM tetap kosong, masalah ada di kode SCRM — biasanya filter if (message.length < 3) return sebelum panggil API.

Fix wajib di SCRM:

  • Hapus filter panjang minimum pesan — setiap pesan nasabah harus POST ke /api/v1/ai/suggest
  • Kirim question = teks pesan terbaru (termasuk ok, ya)
  • Baca response.suggestion atau response.data.answer untuk kotak saran
  • Refresh halaman chat tidak otomatis generate ulang — AI dipanggil saat pesan masuk
// ❌ JANGAN di SCRM:
if (customerMessage.length < 3) return;

// ✅ WAJIB di SCRM:
const res = await fetch(MATERI_AI_URL + '/api/v1/ai/suggest', {
  method: 'POST',
  headers: { Authorization: 'Bearer ' + TOKEN, 'Content-Type': 'application/json' },
  body: JSON.stringify({ question: customerMessage, mode: 'suggestion', history }),
});
const json = await res.json();
// Coba field berikut (salah satu pasti ada isinya):
const text = json.suggestion
  || json.answer
  || json.text
  || json.data?.suggestion
  || json.data?.answer
  || json.data?.text
  || '';
// Tampilkan $text di kotak saran — JANGAN auto-kirim ke nasabah
Query Log ada tapi kotak saran SCRM kosong?
  • API sudah jalan — masalah di render UI SCRM, bukan Materi Trading
  • SCRM mungkin baca field salah (mis. data.data.answer — tidak ada)
  • SCRM mungkin sembunyikan suggestion jika teks mirip pesan CS terakhir
  • SCRM mungkin hanya tampilkan jika provider=gemini — template juga valid
  • Cek Network tab browser CS: respons harus punya suggestion berisi teks

8. Signal Khusus untuk CS

Dalam mode suggestion, AI bisa menyertakan signal text yang perlu ditangani CS di UI SCRM:

[LAMPIRKAN GAMBAR TESTIMONI]

Muncul saat AI tahap testimoni. SCRM tampilkan reminder ke CS: "Saran AI meminta lampirkan gambar testimoni" — CS attach manual dari folder/galeri internal.

{LINK_PENDAFTARAN}

Placeholder link daftar. CS ganti dengan URL aktif sebelum kirim ke nasabah. AI hanya kasih link ini setelah tahap post-verifikasi transfer.

meta.needs_attachment = "testimoni"

Alternatif programmatic — SCRM bisa highlight tombol attach otomatis tanpa parse teks.

9. Contoh Kode

cURL — Health Check

curl -X GET "https://www.materi.tools7star.shop/api/v1/ai/health" \
  -H "Authorization: Bearer mtt_TOKEN_ANDA_DISINI" \
  -H "Accept: application/json"

cURL — Minta Saran

curl -X POST "https://www.materi.tools7star.shop/api/v1/ai/suggest" \
  -H "Authorization: Bearer mtt_TOKEN_ANDA_DISINI" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "question": "apakah ini penipuan?",
    "mode": "suggestion",
    "history": [
      {"role": "assistant", "content": "Halo Kak! Saya Agustina dari Materi Tools."},
      {"role": "user", "content": "halo, ini apa ya?"}
    ]
  }'

PHP (backend SCRM)

$response = Http::withToken(env('MATERI_AI_TOKEN'))
    ->timeout(30)
    ->post('https://www.materi.tools7star.shop/api/v1/ai/suggest', [
        'question' => $customerMessage,
        'mode'     => 'suggestion',
        'history'  => $chatHistory, // [['role'=>'user','content'=>'...'], ...]
    ]);

if ($response->successful() && $response->json('success')) {
    $suggestion = $response->json('data.answer');
    $stage      = $response->json('data.meta.stage');
    // Tampilkan $suggestion di kotak saran SCRM
}

JavaScript (via backend proxy — jangan expose token di frontend)

// Panggil endpoint internal SCRM Anda, BUKAN langsung ke Materi Trading
const res = await fetch('/internal/ai-suggest', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ sessionId, question }),
});
const { suggestion, meta } = await res.json();
// Render suggestion di kotak saran chatroom

10. Error & Rate Limit

HTTPerrorArtinya
401unauthorized / invalid_tokenToken kosong atau salah
403token_expired / token_disabled / ip_not_allowedToken tidak bisa dipakai
422validation_failedParameter tidak valid (question & message kosong, history salah format)
429rate_limit_minute / rate_limit_dayTerlalu banyak request — cek header Retry-After
502provider_errorSemua provider AI sedang down/quota habis

Response headers: X-RateLimit-Limit-Minute, X-RateLimit-Remaining-Minute, X-RateLimit-Limit-Day, X-RateLimit-Remaining-Day

11. Checklist Go-Live

Butuh uji coba dulu sebelum integrasi?