Endpoint HTTP
Peta ruteโ
๐ perlu login ยท ๐ publik ยท ๐ publik tapi diverifikasi signature/token
Webhook masukโ
POST /webhook/duitkuโ
Callback pembayaran dari Duitku.
| Nama rute | webhook.duitku |
| CSRF | Dikecualikan |
| Verifikasi | MD5(merchantCode + amount + merchantOrderId + apiKey) dibanding field signature |
| Balasan | Selalu 200 โ OK bila diproses, IGNORED bila signature salah |
Field payload yang dibaca:
| Field | Kegunaan |
|---|---|
merchantOrderId | Harus RESV-{payment_id} |
resultCode | 00 = lunas |
paymentCode | Dipetakan ke payments.payment_method |
merchantCode, amount, signature | Verifikasi |
Seluruh payload disimpan ke payments.webhook_payload.
Non-200 membuat Duitku mengulang callback tanpa henti untuk pembayaran yang sudah selesai. Semua kegagalan di jalur ini ditelan dan dilog.
GET /api/webhooks/whatsapp/{account}โ
Verifikasi kepemilikan webhook.
| Gaya | Perilaku |
|---|---|
| Meta | Kembalikan nilai hub_challenge apa adanya (text/plain) |
| Token sederhana | Kembalikan OK |
| Token salah | 403 Forbidden |
Token dibaca dari hub_verify_token, verify_token, atau token.
POST /api/webhooks/whatsapp/{account}โ
Penerima pesan masuk dari gerbang WhatsApp.
| Nama rute | webhooks.whatsapp.handle |
| Verifikasi | Header X-Webhook-Token โ body token โ query ?token= |
| Sumber token yang diharapkan | whatsapp_business_accounts.webhook_verify_token, fallback WHATSAPP_WEBHOOK_VERIFY_TOKEN |
| Balasan sukses | 200 {"ok": true} |
| Payload tak dikenali | 200 {"ok": true, "ignored": true} |
| Token salah | 403 {"ok": false, "error": "invalid token"} |
Perilaku: langsung menitipkan pesan ke antrean pekerjaan dan menjawab 200 โ tidak menunggu AI selesai.
URL yang didaftarkan ke Jasnita:
{APP_URL}/api/webhooks/whatsapp/{id_akun}?token={verify_token}
Toschat tidak mengirim header autentikasi apa pun pada callback-nya.
Halaman publikโ
GET /antrianโ
Kios ambil nomor. Menampilkan form pilih Poli + Dokter (hanya yang is_active), dengan gambar latar dari Pengaturan.
POST /antrianโ
Membuat nomor antrian.
| Field | Validasi |
|---|---|
poly_id | wajib, integer, harus ada di polyclinics |
doctor_id | wajib, integer, harus ada di doctors |
Balasan: redirect ke /antrian dengan session queue_ticket berisi number (3 digit) dan date.
GET /dashboard-antrianโ
Papan tayang untuk TV. Menampilkan panggilan terbaru, semua loket aktif, video YouTube opsional, teks berjalan, dan gambar latar.
GET /booking/thanksโ
Halaman terima kasih; dibuka Duitku setelah pembayaran (DUITKU_RETURN_URL).
Rute panelโ
GET /admin/chat/media?p={path}โ
Proksi media Chat Rooms.
| Nama rute | admin.chat.media |
| Penjagaan | Cek login + izin halaman Chat Rooms |
| Perilaku | Unduh berkas dari Jasnita dengan Bearer token server-side, alirkan ke browser |
Bearer token tidak pernah menyentuh browser.
GET /admin/queue-dashboardโ
Redirect permanen ke /dashboard-antrian.
Halaman Filamentโ
| Path | Halaman | Permission |
|---|---|---|
/admin | Dashboard | โ |
/admin/chat-rooms | Chat Rooms | View:ChatRoomsPage |
/admin/simrs-sync | SIMRS Sync | View:SimrsSync |
/admin/queue-board | Antrian Loket | View:QueueBoardPage |
/admin/api-sdk | API & SDK | View:ApiSdkPage |
Resource Filamentโ
Semua mengikuti pola /admin/{plural-kebab}:
| Path | Resource | Grup menu |
|---|---|---|
/admin/patients | Pasien | Integrasi SIMRS |
/admin/doctors | Dokter | Integrasi SIMRS |
/admin/polyclinics | Poliklinik | Integrasi SIMRS |
/admin/doctor-schedules | Jadwal Dokter | Integrasi SIMRS |
/admin/appointments | Janji Temu | Integrasi SIMRS |
/admin/billings | Tagihan | Integrasi SIMRS |
/admin/hospital-queues | Antrian RS | Integrasi SIMRS |
/admin/contacts | Kontak | CRM |
/admin/chat-labels | Chat Labels | CRM |
/admin/ai-agents | AI Agents | CRM |
/admin/whatsapp-business-accounts | WhatsApp Business | CRM |
/admin/booking-requests | Booking Requests (baca-saja) | CRM |
/admin/packages | Packages | CRM |
/admin/token-prices | Token Prices | CRM |
/admin/token-usages | Token Usage | CRM |
/admin/follow-up-managements | Follow-up Management | CRM |
/admin/users | User | Pengaturan |
/admin/settings | Pengaturan | Pengaturan |
/admin/shield/roles | Peran User | Pengaturan |
Endpoint keluarโ
Ke Duitkuโ
| Endpoint | Header |
|---|---|
POST {base}/api/merchant/createInvoice | x-duitku-signature (SHA-256), x-duitku-timestamp, x-duitku-merchantcode |
Base: https://api-sandbox.duitku.com atau https://api-prod.duitku.com.
Ke Jasnita Toschatโ
Semua ber-Bearer token, timeout 30 detik, retry sekali kalau HTTP 401.
| Endpoint | Fungsi |
|---|---|
POST /api/v1/oauth/token | Ambil access token (form-urlencoded) |
POST /api/v1/chat/send | Kirim teks / media / template |
GET /api/v1/message-template/get | Daftar template |
POST /api/v1/chat/mark-as-read | Tandai satu pesan dibaca |
POST /api/v1/chat/mark-as-read-by-conversation-id | Tandai percakapan dibaca |
GET /api/v1/file?p= | Unduh media |
POST /api/v1/webhook/update | Daftarkan URL webhook |
GET /api/v1/subscriptions | Daftar channel (uji koneksi) |
GET /api/v1/contact | Daftar kontak (paginasi) |
GET /api/v1/chatpanel/get-with-filter/{status}/{filter} | Daftar percakapan |
POST /api/v1/chatpanel/get-detail | Isi thread |
GET /api/v1/chatpanel/get-status-count-with-status-filter/... | Jumlah per status |
Base URL disimpan per akun di gateway_base_url.
Ke penyedia LLMโ
Endpoint mengikuti API masing-masing provider; kredensial per AI Agent.
Ke Inimediaโ
Base: INIMEDIA_API_BASE_URL, autentikasi client_id + client_secret.