Pernah kepikiran nggak sih gimana caranya kita bisa ngirim SMS massal, kayak promo diskon dari marketplace atau notifikasi banking? Nah, di balik layar ada teknologi keren yang bikin semua itu berjalan mulus, namanya SMPP. SMPP itu ibarat kurir digital yang super cepat buat ngirim pesan singkat dari satu sistem ke sistem lain. Tapi, tunggu dulu, sebelum kita bahas lebih dalam, saya mau cerita dulu nih pengalaman saya ngulik teknologi ini. Awalnya, saya cuma penasaran sama gimana caranya notifikasi SMS itu bisa langsung nyampe ke ponsel kita, sampai akhirnya saya ketemu SMPP, yang ternyata lebih seru daripada sekadar kirim SMS biasa!
Dari install server SMPP, main-main sama kode Node.js, sampai ngutak-ngatik simulator buat testing, semuanya jadi pengalaman yang nggak cuma bikin saya pusing, tapi juga bikin saya ngerti gimana dunia perpesanan singkat ini jalan. Kalau kalian penasaran, yuk ikutin cerita saya ngulik SMPP, siapa tahu kalian juga jadi tertarik buat coba!
Apa Itu SMPP?
SMPP (Short Message Peer-to-Peer) adalah sebuah protokol yang dirancang untuk memungkinkan komunikasi pesan singkat antara aplikasi (yang biasa disebut ESME – External Short Messaging Entity) dengan SMSC (Short Message Service Center). Singkatnya, SMPP adalah ‘bahasa’ yang digunakan oleh aplikasi pengirim pesan untuk bicara dengan server SMS. Dengan protokol ini, pengiriman SMS bisa dilakukan dengan cepat, terstruktur, dan tentunya skalabel untuk kebutuhan besar seperti pengiriman pesan massal.
Cara Kerja SMPP
Cara kerja SMPP bisa dibilang mirip dengan proses pengiriman surat. Ada pengirim, ada penerima, dan ada jalur yang menghubungkan keduanya. Berikut adalah langkah-langkah sederhananya:
Binding:
Aplikasi (client) harus terlebih dahulu ‘terhubung’ ke server SMSC melalui koneksi SMPP. Proses ini disebut binding. Ada tiga jenis koneksi yang bisa digunakan:
- Transmitter untuk mengirim pesan,
- Receiver untuk menerima pesan,
- Transceiver untuk keduanya (mengirim dan menerima pesan sekaligus).
Submit SM (Short Message):
Setelah binding, client bisa mengirimkan pesan dengan perintah submit_sm ke server SMSC. Pesan ini bisa berupa SMS ke nomor telepon tertentu atau broadcast ke banyak nomor sekaligus.
Delivery Receipt (DR):
Jika pesan berhasil dikirim, server akan mengirimkan Delivery Receipt (DR) ke aplikasi pengirim. DR ini berisi status pengiriman, apakah pesan berhasil diterima oleh ponsel penerima atau gagal.
MO (Mobile Originated):
Selain mengirim pesan, aplikasi juga bisa menerima pesan balasan dari pengguna ponsel. Proses ini dikenal sebagai Mobile Originated (MO). Contohnya, ketika kalian membalas SMS promo yang dikirimkan oleh suatu layanan.”


Peruntukan SMPP
SMPP biasanya digunakan oleh perusahaan besar, penyedia layanan telekomunikasi, dan pengembang aplikasi untuk berbagai kebutuhan seperti:
Marketing:
Pengiriman SMS massal untuk promo produk, diskon, atau pengumuman penting. Contohnya, pesan dari marketplace yang sering kalian terima saat ada flash sale.
Notifikasi Otomatis:
Pesan seperti OTP, pengingat jadwal, atau konfirmasi transaksi. Ini adalah salah satu penggunaan paling umum dari SMPP.
Sistem Darurat:
SMPP juga digunakan untuk layanan darurat seperti pengiriman peringatan bencana atau notifikasi keamanan.
Layanan Premium:
Misalnya, layanan konten seperti langganan berita, horoskop harian, atau notifikasi skor olahraga.
Integrasi Chatbot:
SMPP sering digunakan oleh chatbot untuk mengirim dan menerima SMS dalam skala besar.
Perkembangan SMPP: Dari Masa ke Masa
SMPP telah melalui perjalanan yang cukup panjang sejak pertama kali diperkenalkan di era kejayaan SMS. Ada tiga versi spesifikasi utama dari protokol SMPP yang digunakan hingga sekarang. Namun, yang menarik adalah meskipun versi terakhir dirilis hampir dua dekade lalu, protokol ini masih relevan digunakan di berbagai sistem hingga hari ini. Mari kita bahas satu per satu perjalanannya.
SMPP v3.3 (1997)
SMPP versi 3.3 adalah versi publik pertama yang dirilis pada tahun 1997. Versi ini menjadi fondasi bagi pengembangan layanan SMS di seluruh dunia. Pada saat itu, fitur-fiturnya cukup mendasar dan fokus pada pengiriman pesan teks sederhana. Namun, SMPP v3.3 memiliki keterbatasan, terutama dalam hal fleksibilitas dan dukungan untuk fitur-fitur yang lebih kompleks seperti Delivery Receipt (DR).
SMPP v3.4 (1999)
Dua tahun setelah versi 3.3, pada tahun 1999, SMPP v3.4 dirilis dengan berbagai pembaruan yang signifikan. Ini menjadi salah satu versi yang paling banyak digunakan hingga saat ini, karena mendukung fitur yang lebih kompleks seperti:
- Transceiver mode: Koneksi dua arah untuk pengiriman dan penerimaan pesan dalam satu sesi.
- Delivery Receipt (DR): Memberikan notifikasi status pengiriman pesan.
- Support for TLV (Tag-Length-Value): Memberikan fleksibilitas untuk menambahkan parameter-parameter tambahan pada pesan.
SMPP v3.4 menjadi standar de facto di industri, digunakan oleh banyak SMSC (Short Message Service Center) dan aplikasi hingga sekarang karena stabilitas dan kompatibilitasnya.
SMPP v5.0 (2003)
SMPP v5.0 adalah versi terakhir dari protokol ini yang dirilis pada tahun 2003. Versi ini memperkenalkan beberapa fitur baru seperti:
- Dukungan untuk MMS (Multimedia Messaging Service): Membuka peluang pengiriman konten multimedia seperti gambar dan video.
- Waktu hidup pesan (Message Lifetime): Fitur ini memungkinkan pengaturan validitas pesan.
- Peningkatan pengelolaan sesi dan status pesan: Memberikan laporan lebih detail tentang status pesan.
Meskipun SMPP v5.0 memperkenalkan banyak fitur baru, penggunaannya relatif terbatas karena banyak SMSC dan sistem yang sudah mapan masih mengandalkan SMPP v3.4. Selain itu, beberapa fitur di versi 5.0 tidak sepenuhnya relevan dengan kebutuhan sebagian besar penyedia layanan saat itu.
Apakah SMPP Masih Update?
Jika dilihat dari sejarahnya, SMPP v5.0 adalah versi terakhir yang dirilis pada tahun 2003, dan sejak itu tidak ada pembaruan lebih lanjut. Apakah ini berarti SMPP sudah tidak relevan? Jawabannya, tidak sepenuhnya. Meskipun tidak ada versi baru yang dirilis, protokol ini masih digunakan secara luas hingga sekarang karena:
Stabil dan Andal:
SMPP, khususnya v3.4, telah terbukti andal dan cukup fleksibel untuk memenuhi kebutuhan pengiriman pesan singkat.
Kompatibilitas Universal:
Sebagian besar SMSC di dunia masih mendukung SMPP, sehingga menjadi protokol yang paling umum digunakan oleh aplikasi untuk mengirim dan menerima pesan.
Masih Sesuai untuk Use Case Tertentu:
SMPP tetap relevan untuk pengiriman pesan berbasis teks dan notifikasi seperti OTP, transaksi banking, dan notifikasi massal.
Kenapa Tidak Ada Keberlanjutan?
Meskipun SMPP masih digunakan secara luas, ada beberapa alasan mengapa protokol ini tidak lagi diperbarui:
- Perubahan Tren Komunikasi:
Dunia telah bergeser dari SMS ke aplikasi pesan instan seperti WhatsApp, Telegram, dan lainnya, yang menggunakan protokol berbasis internet seperti REST API atau WebSocket. SMS masih digunakan, tetapi tidak lagi menjadi sarana komunikasi utama bagi banyak pengguna. - Kebutuhan Industri yang Statis:
Sebagian besar fitur yang dibutuhkan oleh penyedia layanan SMS sudah tercakup di SMPP v3.4 atau v5.0. Tidak banyak permintaan untuk fitur baru, sehingga tidak ada dorongan untuk mengembangkan versi baru. - Teknologi Baru yang Lebih Efisien:
Beberapa penyedia layanan mulai beralih ke teknologi berbasis HTTP atau REST API untuk pengiriman pesan karena lebih mudah diintegrasikan dengan aplikasi modern.
Apakah SMPP Masih Dibutuhkan?
Jawabannya adalah ya, untuk kebutuhan tertentu. SMPP tetap menjadi protokol pilihan untuk layanan yang memerlukan pengiriman pesan singkat secara massal, seperti:
- OTP (One-Time Password): Keamanan transaksi dan login.
- Notifikasi Transaksi: Pesan dari bank atau layanan keuangan.
- Marketing: SMS promosi yang dikirimkan ke ribuan atau bahkan jutaan nomor.
- Layanan Darurat: Notifikasi bencana atau peringatan dini.”
SMPP mungkin tidak mendapatkan pembaruan lagi, tetapi ia tetap menjadi tulang punggung komunikasi SMS di seluruh dunia. Untuk industri yang mengandalkan pesan singkat, protokol ini masih relevan, andal, dan sulit tergantikan. Jika kalian bekerja di industri ini, memahami dan menguasai SMPP adalah langkah yang sangat berharga.
Perjalanan Mencari Solusi SMPP
Sebelum akhirnya saya sampai pada pilihan menggunakan Node.js, perjalanan mencari solusi SMPP yang cocok itu seperti naik roller coaster—penuh lika-liku dan bikin pusing! Awalnya, saya hanya ingin sesuatu yang bisa berjalan mulus, gratis, dan tentu saja kompatibel untuk kebutuhan pengiriman dan penerimaan SMS. Tapi ternyata, kenyataan tidak semudah itu, kawan! Mari saya ceritakan pengalaman saya mencoba berbagai solusi SMPP yang ada.
Kannel: Sang Legenda yang Mulai Usang
Langkah pertama saya dimulai dengan mencoba Kannel, salah satu software SMPP server yang sudah melegenda. Banyak tutorial online yang bilang Kannel ini powerful, stabil, dan cocok untuk implementasi skala besar. Tapi begitu saya mulai instalasi, saya langsung sadar kalau Kannel sudah ketinggalan zaman. Banyak dependensi yang tidak lagi kompatibel dengan sistem modern. Bukan cuma itu, dokumentasinya juga seperti artefak sejarah—sulit dipahami untuk kondisi teknologi sekarang. Setelah beberapa hari ‘berantem’ dengan error dan konfigurasi, saya menyerah.
PlaySMS: Harapan yang Masih Bergantung
Kemudian, saya menemukan PlaySMS, sebuah platform yang katanya sudah terintegrasi untuk SMS gateway. Awalnya, saya sempat berharap banyak karena tampilan antarmuka web-nya cukup menarik. Tapi, begitu masuk ke teknis, saya menemukan masalah lain: PlaySMS ternyata masih sangat bergantung pada Kannel! Ya, Kannel yang sebelumnya bikin saya frustrasi itu. Jadi, rasanya seperti déjà vu, kembali lagi ke masalah kompatibilitas dan error yang tak ada habisnya. PlaySMS pun harus saya tinggalkan.
Jasmin SMS: Ekspektasi Tinggi, Realita Pusing
Setelah itu, saya mencoba Jasmin SMS, yang katanya menjadi salah satu solusi modern untuk SMPP server. Dokumentasinya terlihat menjanjikan, dan fitur-fiturnya juga cukup lengkap. Tapi begitu masuk ke proses instalasi, saya seperti dihadapkan pada labirin Linux yang tak berujung. Paket dependensi yang harus diinstal banyak sekali, dan setiap langkah terasa sangat teknis. Belum lagi, saya harus paham Celery, RabbitMQ, dan Python secara mendalam untuk bisa menjalankan Jasmin dengan baik. Setelah berminggu-minggu mencoba, saya merasa ini bukan solusi yang praktis untuk kebutuhan saya.
Akhirnya, Bertemu Node.js
Di tengah frustrasi saya, akhirnya saya menemukan solusi lain: Node.js. Awalnya, saya ragu, apakah Node.js bisa memenuhi kebutuhan SMPP saya? Tapi begitu saya mulai mencoba library seperti smpp, semuanya terasa lebih sederhana dan fleksibel. Tidak ada dependensi yang membingungkan, tidak ada konfigurasi server yang terlalu rumit. Dengan Node.js, saya bisa membangun server SMPP sesuai kebutuhan saya, tanpa perlu berurusan dengan masalah kompatibilitas atau dependensi yang kadaluarsa.
Setelah mencoba berbagai solusi open-source yang ada, saya sadar bahwa untuk mendapatkan hasil yang benar-benar sesuai kebutuhan, saya harus membangun semuanya sendiri. Tapi, membangun protokol SMPP dari awal itu bukan hal yang mudah, apalagi jika kalian seperti saya yang harus belajar sekaligus menerapkannya dalam waktu singkat. Saya mencoba berbagai bahasa pemrograman untuk mencari yang paling cocok. Dan percayalah, perjalanan ini benar-benar penuh perjuangan.
Mencoba PHP: Fleksibel, tapi Tidak Untuk Ini
PHP adalah bahasa yang sudah cukup familiar bagi saya, jadi awalnya saya berpikir: ‘Kenapa nggak coba bangun SMPP pakai PHP?’ Saya mencoba membuat koneksi SMPP client untuk terhubung ke server telco. Awalnya berhasil, tapi makin lama makin terasa bahwa PHP kurang cocok untuk protokol seperti SMPP yang membutuhkan manajemen koneksi persisten dan penanganan event secara real-time. Setiap kali ada event, saya harus mengakali dengan skrip tambahan. Intinya, PHP itu fleksibel, tapi bukan untuk proyek seperti ini.
Python: Tapi Berat di Dependensi
Setelah PHP, saya beralih ke Python. Python punya banyak library, termasuk untuk SMPP, seperti smpp-server dan pysmpp. Saya pikir ini akan menjadi solusi sempurna karena komunitasnya besar dan dokumentasinya banyak. Tapi begitu saya mulai membangun, saya dihadapkan dengan masalah dependensi. Untuk setiap langkah, saya harus mengatur banyak komponen tambahan seperti Celery, RabbitMQ, bahkan Redis. Prosesnya jadi terasa berat, dan akhirnya saya memutuskan untuk mencoba opsi lain.
Go: Ringan, Tapi Butuh Waktu Belajar
Kemudian saya mencoba Go (Golang), yang dikenal dengan performanya yang tinggi. Untuk proyek seperti SMPP yang memerlukan manajemen koneksi cepat dan efisien, Go sebenarnya cukup menjanjikan. Tapi masalahnya, saya harus mempelajari Go dari awal karena saya belum terbiasa dengan sintaksnya. Akhirnya, proses development terasa lebih lambat, dan saya belum mendapatkan hasil yang memuaskan. Go mungkin ringan dan cepat, tapi saya tidak punya cukup waktu untuk benar-benar memanfaatkannya secara optimal.
Node.js: Ini Baru Jodoh!
Di tengah kebingungan saya, saya mencoba Node.js, dan jujur, ini seperti menemukan jawaban atas semua masalah saya. Dengan library seperti node-smpp, saya bisa membangun solusi yang saya butuhkan tanpa banyak hambatan. Node.js sangat fleksibel, dokumentasinya lengkap, dan yang paling penting, ekosistemnya mendukung saya untuk bekerja cepat. Semua fitur seperti binding, submit_sm, hingga handling delivery receipt (DR/DN) bisa saya implementasikan dengan mudah. Akhirnya, saya memutuskan untuk melanjutkan semuanya dengan Node.js, dan ini menjadi titik balik dalam proyek saya.
Membangun Dua Komponen Penting
Dalam membangun solusi SMPP, saya memutuskan untuk fokus pada dua bagian utama:
- Sebagai Client SMPP (Terhubung ke Telco Provider):
Saya membangun client SMPP menggunakan Node.js agar aplikasi saya bisa terhubung ke server telco provider. Client ini bertugas untuk mengirim pesan ke SMSC mereka, menerima Delivery Receipt (DR), dan memantau status pengiriman. Dengan node-smpp, saya bisa mengatur koneksi ini dalam mode transceiver sehingga proses pengiriman dan penerimaan pesan bisa berjalan bersamaan. - Sebagai Server SMPP (Untuk Telco Provider yang Ingin Bind):
Selain sebagai client, saya juga membangun server SMPP agar telco provider dapat bind ke sistem saya. Server ini memungkinkan mereka mengirimkan pesan Mobile Originated (MO) ke aplikasi saya. Prosesnya cukup kompleks, terutama dalam menangani sesi bind_transceiver dan submit_sm, tapi dengan Node.js semuanya terasa lebih mudah untuk diimplementasikan.
Mengujikan dengan Simulator SMPP
Setelah selesai membangun client dan server SMPP, langkah selanjutnya adalah pengujian. Untuk ini, saya menggunakan simulator SMPP dari Melrose Labs. Simulator ini benar-benar membantu saya memahami cara kerja server SMSC dan gateway SMPP dengan lebih baik. Beberapa fitur yang sangat berguna dari simulator ini antara lain:
- Simulasi pengiriman SMS ke berbagai nomor.
- Pengujian dengan protokol SMPP v3.3, v3.4, dan v5.
- Dukungan TLS dan non-TLS untuk koneksi yang lebih aman.
- Simulasi Delivery Receipt (DR) dan Mobile Originated (MO).
Dengan simulator ini, saya bisa memastikan bahwa client saya dapat terhubung dengan baik ke server SMSC, dan server saya mampu menerima binding dari provider. Semua pengujian berjalan lancar, dan saya akhirnya merasa siap untuk membawa solusi ini ke tahap produksi.
Akhirnya, Saya Berhasil Membuat Bridging SMPP!
Setelah semua perjuangan, error yang bikin kepala panas, dan segudang trial-and-error, akhirnya saya berhasil membangun solusi SMPP yang selama ini saya cari. Dengan menggunakan Node.js, saya nggak cuma berhasil menghubungkan aplikasi saya ke protokol SMPP, tapi juga menciptakan sebuah bridging yang bisa bekerja dua arah: sebagai client untuk telco provider dan sebagai server untuk menerima binding dari provider. Bahkan, saya juga membuat simulator sederhana untuk menguji Mobile Originated (MO), Delivery Receipt (DR), dan Mobile Terminated (MT). Semua ini jadi karya kecil yang lahir dari perjalanan panjang saya ngulik teknologi ini.
Tapi, jujur aja, ini belum sepenuhnya selesai. Masih banyak yang perlu saya rapikan, terutama menghilangkan credential yang masih menempel di sana-sini sebelum saya bisa dengan percaya diri mempublishnya secara umum. Makanya, untuk sementara waktu, saya belum berani nge-push proyek ini ke GitHub publik. Tapi kalian nggak perlu khawatir! Kalau ada yang benar-benar butuh solusi SMPP seperti ini, jangan sungkan untuk menghubungi saya.
Saya senang berbagi. Kalau ada yang tertarik, saya akan kasih kode ini dengan gratis—tanpa embel-embel. Karena saya tahu persis gimana sulitnya mencari solusi yang benar-benar pas. Jadi, daripada kalian mengalami kebingungan yang sama seperti saya dulu, mendingan kita diskusi bareng. Siapa tahu solusi yang saya buat ini bisa jadi titik awal buat kebutuhan kalian, atau bahkan bisa kita kembangkan bareng jadi sesuatu yang lebih keren lagi.
Terakhir, saya cuma mau bilang: Jangan pernah takut mencoba. Kadang teknologi terlihat rumit dan bikin kita ingin menyerah, tapi percayalah, kalau kita tetap gigih, hasilnya nggak akan pernah mengecewakan. Perjalanan saya bersama SMPP ini adalah buktinya.