SMPP
SMPP (Short Message Peer-to-Peer) là một giao thức viễn thông cấp độ application layer dùng để gửi tin nhắn SMS giữa các hệ thống máy tính và các hệ thống nhắn tin SMS như SMSC (Short Message Service Center), hoặc các aggregator SMS.
✅ 1. SMPP là gì?
SMPP (Short Message Peer-to-Peer) là một giao thức chuẩn do SMPP Forum định nghĩa, chủ yếu được sử dụng bởi các nhà mạng, aggregator hoặc hệ thống backend để gửi và nhận SMS, MMS, hoặc USSD một cách real-time.
🔹 Một số khái niệm chính:
SMSC
Short Message Service Center – máy chủ xử lý và phân phối tin nhắn của nhà mạng.
ESME
External Short Messaging Entity – ứng dụng phía client (ví dụ: backend app hoặc hệ thống CRM) kết nối đến SMSC qua SMPP.
PDU
Protocol Data Unit – định dạng gói tin SMPP.
Bind
Quá trình kết nối xác thực đến SMSC (bind_transmitter, bind_receiver, bind_transceiver).
Submit_SM
Lệnh gửi một SMS từ backend đến SMSC.
Deliver_SM
Lệnh gửi SMS từ SMSC đến backend.
✅ 2. Proxy SMPP trong Backend là gì?
🔹 Định nghĩa:
Proxy SMPP là một lớp trung gian giữa ứng dụng backend của bạn và một hoặc nhiều SMSC/Aggregator. Nó đóng vai trò giống như một reverse proxy hoặc gateway, quản lý toàn bộ kết nối SMPP đến nhà mạng, giúp backend không phải quản lý trực tiếp giao thức SMPP.
🔹 Mục đích sử dụng:
Giảm tải cho hệ thống backend.
Cho phép scale dễ dàng (load balancing, failover).
Tích hợp với nhiều nhà mạng qua một gateway duy nhất.
Thêm các logic như: retry, rate-limit, route theo nhà mạng, kiểm tra số điện thoại hợp lệ, logging, billing,…
✅ 3. Sơ đồ hoạt động:
[ Backend App ] <-- HTTP / gRPC / Kafka --> [ SMPP Proxy Layer ] <-- SMPP --> [ SMSC / Aggregator ]
✅ 4. Khi nào nên dùng SMPP Proxy?
Hệ thống đơn giản, gửi ít SMS
❌ Không cần, kết nối trực tiếp là đủ
Gửi SMS với nhiều provider, high TPS
✅ Nên có Proxy SMPP
Muốn tách biệt nghiệp vụ và giao thức truyền tải
✅ Rất nên tách
Muốn monitor, retry, queue, billing SMS
✅ Proxy giúp dễ làm hơn
✅ 5. Công nghệ & thư viện SMPP phổ biến:
Java
jsmpp, Cloudhopper
Node.js
smpp
Python
python-smpp
, smpp.twisted
Proxy
Kannel, Jasmin SMS Gateway (Python), SMPPBox
✅ 6. Ví dụ ứng dụng Proxy SMPP
Giả sử bạn có hệ thống gửi SMS OTP:
Backend service gọi:
POST /send-otp {phone: "0981234567"}
Proxy SMPP nhận request này và dùng
submit_sm
để gửi SMS đến SMSC (Mobifone, Viettel, etc.)Proxy sẽ nhận phản hồi
submit_sm_resp
và đẩy trạng thái về backend hoặc lưu DB.Nếu có
delivery report
, proxy cũng nhận quadeliver_sm
và đẩy về backend hoặc Kafka.
Last updated