Koneksi API
Hubungkan API eksternal Anda ke enuchat sehingga AI dan aturan dapat mengambil data real-time dari sistem Anda.
Cara Kerjanya
Koneksi API memungkinkan Anda mengintegrasikan enuchat dengan sistem backend Anda sendiri — mesin pemesanan, CRM, manajemen pesanan, inventaris, dan banyak lagi. Saat pengunjung mengajukan pertanyaan, enuchat dapat memanggil API Anda untuk mendapatkan data nyata dan memasukkannya ke dalam respons.
Alurnya
- Konfigurasikan koneksi — URL dasar dan autentikasi API Anda
- Tambahkan endpoint — panggilan API spesifik dengan template path dan pemetaan respons
- Buat aturan — aturan AI atau statis dengan tindakan CALL_API
- Pengunjung mengajukan pertanyaan — aturan dipicu, memanggil API Anda, memetakan respons ke variabel sesi
- AI merespons dengan data nyata — variabel sesi tersedia untuk AI untuk menghasilkan jawaban yang akurat
Contoh: Ketersediaan Kamar Hotel
Pengunjung: "Apakah kamar 205 tersedia minggu depan?"
Aturan AI cocok: "Saat pengunjung bertanya tentang ketersediaan kamar"
Tindakan CALL_API: GET https://api.hotel.com/rooms/205/availability
Respons dipetakan: room_available = true, price = "€120/malam"
AI merespons: "Kamar 205 tersedia minggu depan dengan harga €120/malam. Apakah Anda ingin memesannya?"
Mengatur Koneksi
Pergi ke Pengaturan → Koneksi API di dasbor Anda.
1. Buat Koneksi
Sebuah koneksi mewakili satu API eksternal. Anda membutuhkan:
| Field | Deskripsi | Contoh |
|---|---|---|
| Nama | Label untuk koneksi ini | API Pemesanan Hotel |
| URL Dasar | URL root API | https://api.hotel.com/v1 |
| Jenis Auth | Cara autentikasi | Bearer Token, OAuth2, dll. |
2. Jenis Autentikasi
None
Untuk API publik yang tidak memerlukan autentikasi.
API Key
Mengirim kunci statis sebagai header atau parameter query.
| Field | Deskripsi |
|---|---|
| Kunci | Nilai kunci API Anda |
| Nama Header | Header yang digunakan (default: X-Api-Key) |
Kunci dikirim sebagai: X-Api-Key: your_key_here
Bearer Token
Mengirim token statis di header Authorization.
Dikirim sebagai: Authorization: Bearer your_token_here
Basic Auth
Mengirim nama pengguna dan kata sandi, dikodekan base64.
Dikirim sebagai: Authorization: Basic dXNlcjpwYXNz
OAuth 2.0 (Client Credentials)
Mengambil token akses secara otomatis dan menyimpannya dalam cache hingga kedaluwarsa. Terbaik untuk API modern seperti Salesforce, Google, atau server OAuth kustom.
| Field | Deskripsi |
|---|---|
| URL Token | Endpoint token OAuth (mis. https://auth.example.com/oauth/token) |
| Client ID | Client ID OAuth Anda |
| Client Secret | Client secret OAuth Anda |
| Scope | Scope dipisahkan spasi (mis. read write) |
enuchat menangani siklus hidup token secara otomatis — mengambil pada panggilan pertama, menyimpan dalam cache hingga kedaluwarsa, menyegarkan saat dibutuhkan.
Keamanan: Semua kredensial dienkripsi saat istirahat menggunakan libsodium. Mereka tidak pernah diekspos di respons API — hanya nilai bertopeng yang ditampilkan di dasbor.
Mengonfigurasi Endpoint
Setiap koneksi dapat memiliki beberapa endpoint — panggilan API spesifik yang ingin Anda lakukan.
| Field | Deskripsi | Contoh |
|---|---|---|
| Nama | Label untuk endpoint ini | Periksa ketersediaan |
| Metode | Metode HTTP | GET, POST, PUT, DELETE |
| Path | Path URL (ditambahkan ke URL dasar). Gunakan {'{'}variable} untuk nilai dinamis | /rooms/{'{'}roomId}/availability |
| Parameter Query | Parameter URL sebagai pasangan kunci-nilai. Nilai mendukung {'{'}variable} | date={'{'}checkIn} |
| Template Body | Body JSON untuk POST/PUT. Mendukung interpolasi {'{'}variable} | {'{'}"guest": "{'{'}name}"} |
| Pemetaan Respons | Petakan field respons JSON ke variabel sesi menggunakan notasi titik | data.available → room_available |
| Deskripsi | Konteks untuk AI (data apa yang dikembalikan endpoint ini) | Mengembalikan ketersediaan kamar dan harga |
Interpolasi Variabel
Gunakan {'{'}variableName} dalam path, parameter query, dan template body. Variabel berasal dari:
- Variabel sesi — diatur oleh aturan sebelumnya (tindakan SET_VARIABLE)
- Parameter tindakan — di-hardcode dalam tindakan aturan CALL_API
Pemetaan Respons
Petakan field respons JSON ke variabel sesi menggunakan notasi titik:
// API returns:
{'{'}
"data": {'{'}
"available": true,
"price": {'{'} "amount": 120, "currency": "EUR" }
}
}
// Mapping:
data.available → room_available // "true"
data.price.amount → room_price // "120"
data.price.currency → room_currency // "EUR"Variabel yang dipetakan disimpan sebagai variabel sesi pada percakapan dan tersedia untuk AI untuk menghasilkan respons.
Menggunakan dengan Aturan
Panggilan API dipicu oleh tindakan CALL_API dalam aturan. Anda dapat menggabungkannya dengan tindakan lain.
Resep: Pencarian Status Pesanan
Koneksi: API Manajemen Pesanan — https://api.shop.com/v2 — Bearer Token
Endpoint: GET /orders/{'{'}orderId} → petakan data.status → order_status, data.eta → delivery_eta
Aturan (tipe AI): "Saat pengunjung bertanya tentang status pesanan atau pengiriman mereka"
Tindakan:
- CALL_API → endpoint Status Pesanan
- REPLY_AI → AI menggunakan
order_statusdandelivery_etauntuk merespons
Hasil: Pengunjung: "Di mana pesanan saya #4521?" — AI: "Pesanan Anda #4521 sedang dikirim dan harus tiba pada Kamis."
Resep: Harga Real-Time
Koneksi: API Harga — https://pricing.example.com — API Key
Endpoint: GET /products/{'{'}productId}/price → petakan price → current_price, currency → price_currency
Aturan (statis): MESSAGE_MATCHES_REGEX: /\b(price|cost|how much)\b/i
Tindakan:
- CALL_API → endpoint Harga
- REPLY_TEXT → "Harga saat ini adalah {'{'}current_price} {'{'}price_currency}."
Pengujian
Selalu uji koneksi dan endpoint Anda sebelum menggunakannya dalam aturan:
- Uji Koneksi — memverifikasi autentikasi berfungsi (untuk OAuth2: mengambil token)
- Uji Endpoint — melakukan panggilan API nyata dengan variabel sampel dan menampilkan respons
- Uji Aturan (dry-run) — di halaman Aturan, uji apakah aturan akan cocok dan tindakan apa yang akan dieksekusi
Tip: Mulai dengan menguji koneksi, lalu setiap endpoint, lalu aturan lengkap. Dengan cara ini Anda dapat mengisolasi masalah di setiap level.
Keamanan
- Enkripsi saat istirahat — semua kredensial dienkripsi menggunakan libsodium sebelum penyimpanan
- Tidak pernah diekspos — respons API tidak pernah menyertakan kredensial yang didekripsi, hanya nilai bertopeng
- Perlindungan SSRF — enuchat memblokir panggilan ke localhost, IP pribadi, dan nama host internal
- Timeout — panggilan API eksternal memiliki timeout 5 detik untuk mencegah hang
- Caching token OAuth2 — token akses disimpan dalam cache dengan aman dan disegarkan secara otomatis
- Isolasi tenant — koneksi dibatasi pada tenant Anda, tidak dapat diakses oleh orang lain