Service Task
Service Task adalah task yang dieksekusi sepenuhnya otomatis oleh sistem — tanpa intervensi manusia sama sekali. Ketika BPMS mencapai Service Task, ia langsung menjalankan logika yang sudah dikonfigurasi, menunggu hasilnya, lalu melanjutkan ke step berikutnya.
Simbol: Ikon roda gigi di sudut kiri atas persegi panjang sudut membulat
Definisi yang Tepat
Service Task menjawab: "Apa yang dilakukan sistem secara otomatis di titik ini?"
Kata kunci untuk mengenali Service Task:
- Sistem mengirim email otomatis
- Sistem memanggil API pihak ketiga
- Sistem menyimpan data ke database
- Sistem menghasilkan dokumen (PDF, laporan)
- Sistem mengintegrasikan data antar aplikasi
Mekanisme Implementasi
Cara Service Task diimplementasikan bergantung pada BPMS yang digunakan, namun secara konseptual ada tiga pendekatan:
1. Java Delegate / Delegate Expression (Camunda, Flowable)
Kode Java yang dijalankan langsung oleh engine:
@Component
public class KirimEmailDelegate implements JavaDelegate {
@Override
public void execute(DelegateExecution execution) {
String email = (String) execution.getVariable("emailPelanggan");
String nama = (String) execution.getVariable("namaPelanggan");
emailService.kirim(email, "Permohonan Anda Diterima", buildTemplate(nama));
}
}
Dikonfigurasi di properti Service Task:
Implementation: Delegate Expression
Value: ${kirimEmailDelegate}
2. External Task Pattern (Camunda 7+, Camunda 8)
Service Task tidak dieksekusi di dalam engine, melainkan oleh external worker yang polling ke engine. Ideal untuk integrasi dengan sistem non-Java.
Proses di Engine: [Service Task: Validasi KTP]
↕ polling
External Worker (Python/Node.js):
- Ambil task dari engine
- Panggil API Dukcapil
- Kirim hasil kembali ke engine
Keunggulan:
- Bisa ditulis dalam bahasa apapun (Python, Node.js, Go, dll.)
- Lebih tahan terhadap kegagalan (engine tidak menunggu sinkron)
- Mudah di-scale secara independen
3. Connector (Camunda, Flowable)
Konfigurasi deklaratif untuk integrasi umum tanpa kode:
<serviceTask id="kirimEmail" name="Kirim Notifikasi">
<extensionElements>
<camunda:connector>
<camunda:connectorId>mail-send</camunda:connectorId>
<camunda:inputOutput>
<camunda:inputParameter name="to">${emailPelanggan}</camunda:inputParameter>
<camunda:inputParameter name="subject">Permohonan Diproses</camunda:inputParameter>
</camunda:inputOutput>
</camunda:connector>
</extensionElements>
</serviceTask>
Jenis-Jenis Service Task Berdasarkan Fungsi
Integrasi API Eksternal
Memanggil layanan pihak ketiga. Ini adalah penggunaan Service Task yang paling umum.
| Contoh | API yang Dipanggil |
|---|---|
| Validasi NIK | API Dukcapil |
| Cek kredit | API SLIK OJK / BI Checking |
| Kirim SMS OTP | API Telco / SMS Gateway |
| Verifikasi rekening | API bank tujuan |
| Geocoding alamat | Google Maps API |
| Konversi mata uang | API kurs Bank Indonesia |
Contoh dalam diagram:
Lane: Sistem
[Service Task: Validasi NIK via API Dukcapil]
- Input: ${nik}, ${namaLengkap}, ${tanggalLahir}
- Output: ${validasiNIK} (valid/invalid), ${detailKTP}
- Timeout: 30 detik
- Retry: 3 kali
Pengiriman Notifikasi
Mengirim komunikasi otomatis ke pengguna atau sistem.
| Jenis | Contoh |
|---|---|
| Konfirmasi pendaftaran, notifikasi persetujuan | |
| SMS | OTP, status pengiriman, reminder |
| Push Notification | Update aplikasi mobile |
| WhatsApp Business | Notifikasi transaksi, pengingat |
| Webhook | Memberi tahu sistem lain via HTTP POST |
Operasi Database
Membaca atau menulis data tanpa interaksi pengguna.
[Service Task: Simpan Data Permohonan ke Database]
[Service Task: Ambil Riwayat Kredit dari Core Banking]
[Service Task: Update Status di Tabel Transaksi]
Pembuatan Dokumen
Menghasilkan dokumen output secara otomatis.
[Service Task: Generate Surat Keputusan Kredit (PDF)]
[Service Task: Buat Laporan Rekonsiliasi (Excel)]
[Service Task: Generate Nomor Rekening]
Kalkulasi dan Transformasi Data
Melakukan komputasi yang hasilnya disimpan sebagai variabel proses.
[Service Task: Hitung Angsuran Kredit]
- Input: ${pokokPinjaman}, ${sukuBunga}, ${tenorBulan}
- Output: ${angsuranPerBulan}, ${totalBunga}, ${jadwalAngsuran}
Penanganan Error di Service Task
Service Task yang memanggil sistem eksternal harus mempertimbangkan kegagalan. Pendekatan yang direkomendasikan:
Retry Otomatis
Konfigurasi retry untuk kegagalan sementara (network timeout, service unavailable):
Retries: 3
Retry Time Cycle: R3/PT10M (3 kali, setiap 10 menit)
Error Boundary Event
Untuk kegagalan yang tidak bisa di-retry, gunakan Error Boundary Event:
[Service Task: Proses Pembayaran]
◎ Error Boundary "Kartu Ditolak"
↓
[User Task: Pilih Metode Pembayaran Lain]
Timeout
Selalu definisikan batas waktu agar proses tidak stuck jika service eksternal tidak merespons:
[Service Task: Validasi Data]
◎ Timer Boundary (30 detik)
↓
[Service Task: Catat Timeout, Lanjutkan Default]
Contoh Lengkap: Proses Pembukaan Rekening Online
[User Task: Isi Formulir Pendaftaran]
↓
[Service Task: Validasi NIK via Dukcapil] ◎ Error → [Notif NIK Tidak Valid]
↓
[Service Task: Cek Daftar Hitam OJK] ◎ Error → [Notif Ditolak]
↓
[Service Task: Generate Nomor Rekening]
↓
[Service Task: Simpan ke Core Banking]
↓
[Service Task: Kirim Email Selamat Datang]
↓
[Service Task: Kirim SMS Nomor Rekening]
↓
[End Event]
Kesalahan Umum
1. Service Task untuk Pekerjaan Manusia
Jika ada manusia yang mengklik, mengisi, atau memutuskan — itu User Task, bukan Service Task.
2. Tidak Ada Penanganan Error
Service Task yang memanggil API eksternal tanpa Error Boundary Event adalah bom waktu. Sistem eksternal pasti akan gagal suatu saat.
3. Logic Bisnis di Dalam Service Task
Jika Service Task memutuskan jalur proses berdasarkan aturan bisnis yang kompleks — pisahkan ke Business Rule Task. Service Task seharusnya hanya eksekutor, bukan pengambil keputusan.
4. Transaksi yang Terlalu Panjang
Jika satu Service Task melakukan terlalu banyak hal (validasi + simpan + kirim email), pecah menjadi beberapa Service Task. Ini memudahkan penanganan error dan retry.
Selanjutnya: Script Task →