Đếm ký tự, số tin SMS API
Đếm số tin SMS (GSM-7 160/153 hoặc UCS-2 70/67), chỉ ra ký tự làm tin chuyển sang Unicode, tạo bản không dấu an toàn GSM và kiểm tra brandname.
Một tin SMS chứa 160 ký tự thuộc bảng chữ GSM 7-bit, nhưng chỉ còn 70 ký tự khi có một ký tự ngoài bảng (UCS-2), và tin dài được chia thành các phần 153 hoặc 67 ký tự. Vì vậy mỗi chữ có dấu tiếng Việt, dấu nháy cong hay emoji có thể làm chi phí tăng gấp đôi, gấp ba. API cho biết kiểu mã hoá, số đơn vị đã dùng (septet hoặc đơn vị UTF-16; ký tự mở rộng ^ { } [ ] ~ | € \ tính hai), số tin và số ký tự còn lại trong tin cuối.
API liệt kê từng ký tự làm tin chuyển sang UCS-2 kèm mã Unicode, vị trí và ký tự thay thế gợi ý, đồng thời trả bản an toàn GSM: bỏ dấu tiếng Việt, thay dấu nháy cong, gạch dài, dấu ba chấm, bỏ emoji, kèm số tin của bản này và số tin tiết kiệm được. segments=true trả thêm nội dung từng phần, brandname kiểm tra tên thương hiệu gửi tin (tối đa 11 ký tự chữ và số).
Cách đếm theo 3GPP TS 23.038 / 23.040; nhà mạng có thể có thêm giới hạn riêng với tin brandname ghép nhiều phần.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
text | query|body | string | có | Nội dung tin nhắn (tối đa 20.000 ký tự). | |
segments | query|body | boolean | không | false | true: trả thêm nội dung từng phần tin. |
brandname | query|body | string | không | Tên brandname cần kiểm tra (≤ 11 ký tự). |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/sms-count" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Mã OTP của bạn là 123456, hiệu lực 5 phút."}'const res = await fetch('https://apibox.io.vn/v1/sms-count', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"text": "Mã OTP của bạn là 123456, hiệu lực 5 phút."
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/sms-count",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"text": "Mã OTP của bạn là 123456, hiệu lực 5 phút."},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/sms-count');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"text":"Mã OTP của bạn là 123456, hiệu lực 5 phút."}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"encoding": "UCS-2",
"characters": 42,
"units": 42,
"unit": "UTF-16 code units",
"segments": 1,
"per_segment": 70,
"remaining_in_segment": 28,
"ucs2_characters": [
{
"char": "ã",
"codepoint": "U+00E3",
"count": 1,
"first_index": 1,
"replacement": "a"
},
{
"char": "ủ",
"codepoint": "U+1EE7",
"count": 1,
"first_index": 8,
"replacement": "u"
},
{
"char": "ạ",
"codepoint": "U+1EA1",
"count": 1,
"first_index": 12,
"replacement": "a"
},
{
"char": "ệ",
"codepoint": "U+1EC7",
"count": 1,
"first_index": 28,
"replacement": "e"
},
{
"char": "ự",
"codepoint": "U+1EF1",
"count": 1,
"first_index": 32,
"replacement": "u"
},
{
"char": "ú",
"codepoint": "U+00FA",
"count": 1,
"first_index": 39,
"replacement": "u"
}
],
"extension_characters": [],
"gsm_version": {
"encoding": "GSM-7",
"characters": 42,
"units": 42,
"unit": "septets",
"segments": 1,
"per_segment": 160,
"remaining_in_segment": 118,
"text": "Ma OTP cua ban la 123456, hieu luc 5 phut.",
"changed_characters": 7,
"saves_segments": 0
},
"note": "Single SMS: 160 GSM-7 characters or 70 UCS-2 characters; concatenated parts carry a 7-byte header (153 / 67 per part). Characters of the GSM extension table (^ { } \\ [ ] ~ | €) count twice. Any Vietnamese accent forces UCS-2."
}
Ứng dụng
- Hiển thị bộ đếm ký tự, số tin trong form gửi SMS
- Giảm chi phí tin OTP, quảng cáo bằng cách bỏ dấu
- Kiểm tra mẫu tin trước khi đăng ký với nhà mạng
- Tìm ký tự ẩn khiến tin bị chuyển sang Unicode
Hỏi đáp
Vì sao chỉ một chữ có dấu đã thay đổi tất cả?
Chữ có dấu tiếng Việt (ă, ơ, ệ…) không có trong bảng GSM, nên cả tin chuyển sang UCS-2: 70 ký tự thay vì 160.
é, è, à có dùng được với GSM không?
Có, một số chữ Latin có dấu (é è ù ì ò à Ä Ö Ñ Ü…) nằm trong bảng GSM nên không làm tin chuyển sang UCS-2; bản an toàn GSM vẫn bỏ hết dấu như thói quen nhắn tin tiếng Việt.
Emoji được tính thế nào?
Theo UCS-2, và đa số emoji chiếm hai đơn vị UTF-16, nên 35 emoji đã đầy một tin.
API liên quan
So sánh văn bản
So sánh hai đoạn văn bản theo dòng, từ, ký tự, câu hoặc JSON; nhận danh sách thay đổi, tỉ lệ giống nhau và bản diff dạng unified.
a-bTạo slug
Chuyển tiêu đề thành slug URL gọn gàng: bỏ dấu tiếng Việt (cả chữ đ), tuỳ chọn ký tự phân cách, giữ chữ hoa và giới hạn độ dài.
123Thống kê văn bản
Đếm số từ, ký tự, câu, đoạn và dòng; ước tính thời gian đọc và thời gian nói; liệt kê các từ xuất hiện nhiều nhất trong văn bản.