Batas karakter dan penghitungan segmen SMS
Setiap SMS dikirim dalam unit berukuran tetap yang disebut segmen. Setiap segmen adalah satu unit penagihan, sehingga panjang pesan langsung memengaruhi biaya. Jumlah karakter yang muat dalam satu segmen bergantung pada encoding yang dipilih Bird untuk isi pesan Anda, dan satu karakter di luar alfabet default dapat memotong kapasitas menjadi setengahnya.
Cara encoding dipilih
Bird memeriksa setiap karakter dalam isi pesan Anda sebelum mengirim:
- Jika semua karakter termasuk dalam alfabet GSM-7 (set karakter 7-bit standar yang didefinisikan oleh GSM 03.38), pesan menggunakan encoding GSM-7.
- Jika satu karakter saja berada di luar GSM-7, seluruh pesan beralih ke UCS-2 (encoding Unicode 16-bit).
Bird tidak mencampur encoding dalam satu pesan. Satu emoji, karakter CJK, atau tanda kutip lengkung mengubah seluruh isi pesan menjadi UCS-2.
Batas segmen
| Encoding | Segmen tunggal | Per segmen (multipart) |
|---|---|---|
| GSM-7 | 160 septet | 153 septet |
| UCS-2 | 70 code unit UTF-16 | 67 code unit UTF-16 |
Ketika pesan lebih panjang dari satu segmen, pesan dipecah menjadi beberapa segmen. Setiap segmen multipart menyisihkan beberapa byte untuk header penyusunan ulang yang disebut User Data Header. Ini mengurangi kapasitas dari 160 menjadi 153 untuk GSM-7, dan dari 70 menjadi 67 untuk UCS-2.
Pesan GSM-7 yang berukuran 161 septet membutuhkan 2 segmen (ceil(161 / 153) = 2). Pemisahan membagi isi pesan yang sudah di-encode ke kedua segmen, dengan 153 septet tersedia di masing-masing segmen.
Panjang pesan maksimum
Bird menerima hingga 12 segmen per pesan. Ini berarti:
- GSM-7: 1.836 septet (12 x 153)
- UCS-2: 804 code unit UTF-16 (12 x 67)
Isi pesan yang melebihi 12 segmen ditolak dengan error 422. Bird tidak pernah memotong pesan secara diam-diam.
Set karakter GSM-7
GSM-7 mencakup karakter yang dibutuhkan sebagian besar pesan beraksara Latin:
- Huruf A-Z, a-z
- Digit 0-9
- Tanda baca umum: @, £, $, !, ", #, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, spasi, baris baru
- Beberapa karakter beraksen dari bahasa Eropa Barat, termasuk é dalam café
Karakter tabel ekstensi
Sejumlah kecil karakter termasuk dalam GSM-7 tetapi berada di tabel ekstensi. Masing-masing menggunakan 2 septet alih-alih 1, sehingga dihitung ganda terhadap batas segmen:
€, [, ], {, }, \, ~, ^, |
Ini penting di batas segmen. Jika Anda menulis 159 karakter biasa diikuti satu tanda euro, ukuran hasil encode adalah 161 septet (159 + 2), yang mendorong pesan menjadi 2 segmen meskipun terlihat seperti 160 karakter.
Karakter yang memicu UCS-2
Karakter apa pun di luar GSM 03.38 memaksa seluruh pesan menggunakan UCS-2. Pemicu paling umum:
- Emoji: banyak emoji di luar Basic Multilingual Plane menggunakan dua code unit UTF-16. Deretan 35 emoji seperti itu muat dalam satu segmen; emoji ke-36 mendorongnya menjadi dua segmen. Sebuah emoji yang terlihat juga bisa menggabungkan beberapa code point, jadi hitung isi pesan yang sudah di-encode, bukan simbol yang terlihat.
- Karakter CJK (Tionghoa, Jepang, Korea)
- Arab, Thai, Hindi, dan aksara lain di luar alfabet GSM-7
- Tanda kutip lengkung (smart): “ ” ‘ ’ (versi lurus " dan ' termasuk GSM-7). Smart encoding dapat mengganti ini sebelum mengirim.
Beberapa karakter Latin beraksen, termasuk é dalam café dan ü, termasuk dalam set GSM-7 dan tidak memicu UCS-2. Yang lain, termasuk á, í, dan ú, memicu UCS-2.
Smart encoding
Beberapa pemicu UCS-2 bukan karakter yang Anda pilih: pengolah kata mengubah ' menjadi ’, em dash masuk saat paste, kolom formulir membawa non-breaking space. Atur options.smart_encoding ke true pada pengiriman dan Bird menggantikan karakter tersebut dengan padanan GSM-7 sebelum pesan dikirim, yang menjaga isi pesan tetap dalam GSM-7 dan dapat memotong jumlah segmen menjadi setengahnya.
Smart encoding dinonaktifkan secara default dan hanya berlaku jika setiap karakter yang tersisa dapat menggunakan GSM-7. Jika isi pesan masih mengandung karakter di luar GSM-7 setelah penggantian, seperti emoji atau huruf beraksen yang tidak didukung, Bird mengirimnya persis seperti yang diberikan. Smart encoding membahas tabel penggantian dan cara membaca hasilnya.
Membaca jumlah segmen dari API
Setiap respons SMS menyertakan objek segments yang melaporkan hasil perhitungan Bird:
Contoh kode
{
"segments": {
"count": 1,
"encoding": "GSM_7BIT",
"characters": 64
}
}- count: jumlah segmen yang ditagihkan
- encoding: GSM_7BIT atau UCS2
- characters: jumlah karakter (Unicode code point) dalam isi pesan
count adalah angka yang ditagihkan kepada Anda. Periksa nilainya di respons atau di log SMS untuk memverifikasi pesan Anda sesuai harapan.
Menjaga pesan tetap satu segmen
Beberapa kebiasaan yang mencegah pengiriman multi-segmen yang tidak disengaja:
- Ganti tanda kutip lengkung dengan tanda kutip lurus. Pengolah kata dan beberapa ponsel otomatis mengganti " dengan “ ”, yang memaksa UCS-2 dan memotong kapasitas Anda menjadi setengahnya. Smart encoding melakukan ini untuk Anda pada pengiriman yang Anda aktifkan.
- Hindari emoji dalam pesan transaksional atau autentikasi yang mengutamakan jumlah segmen.
- Perhatikan karakter tabel ekstensi (€, {, }, [, ], \, ~, ^, |). Masing-masing menggunakan dua slot karakter.
- Jika Anda menulis dalam aksara non-Latin (CJK, Arab, Thai), rencanakan batas UCS-2 sejak awal: 70 karakter untuk segmen tunggal, 67 per segmen saat dipecah.
- Gunakan tautan yang mudah dikenali dan periksa panjangnya. Tautan pendek bermerek dapat menghemat ruang; periksa persyaratan tautan tujuan sebelum memilih layanan pemendek URL.
Langkah selanjutnya
Gunakan kalkulator segmen SMS sebelum mengirim, dan tinjau personalisasi yang sudah di-render di konten kampanye Anda.
- Smart encoding: tinjau setiap penggantian dan aktifkan per pesan.
- Mengirim SMS: kirim pesan dan periksa jumlah segmennya.
- Log SMS: periksa encoding dan segmen yang ditagihkan untuk pesan yang sudah terkirim.
- Segmen SMS: mengapa satu emoji menggandakan biaya: video yang mengirim dua pesan dan membandingkan biaya masing-masing
Sumber daya terkait
Lanjutkan dengan dokumentasi, panduan, dan contoh untuk topik ini. Sumber daya tersedia dalam bahasa Inggris.
Pahami konsepnyaWhat is an SMS segment, and why did one message cost three?Jelajahi kemampuannyaSMS encodingIkuti jalur pembelajaranBuild your first integration
Coba praktiknya dan dapatkan ringkasan implementasi