Zeichenlimits und Segmentzählung bei SMS
Jede SMS wird in Einheiten fester Größe transportiert, den sogenannten Segmenten. Jedes Segment ist eine Abrechnungseinheit, daher wirkt sich die Nachrichtenlänge direkt auf die Kosten aus. Wie viele Zeichen in ein Segment passen, hängt von der Kodierung ab, die Bird für Ihren Nachrichtentext wählt, und ein einzelnes Zeichen außerhalb des Standardalphabets kann die Kapazität halbieren.
Wie die Kodierung bestimmt wird
Bird prüft vor dem Senden jedes Zeichen in Ihrem Nachrichtentext:
- Wenn jedes Zeichen zum GSM-7-Alphabet gehört (dem standardmäßigen 7-Bit-Zeichensatz gemäß GSM 03.38), verwendet die Nachricht die GSM-7-Kodierung.
- Wenn auch nur ein einzelnes Zeichen außerhalb von GSM-7 liegt, wechselt die gesamte Nachricht zu UCS-2 (16-Bit-Unicode-Kodierung).
Bird mischt keine Kodierungen innerhalb einer Nachricht. Ein einziges Emoji, CJK-Zeichen oder typografisches Anführungszeichen wandelt den gesamten Text in UCS-2 um.
Segmentlimits
| Kodierung | Einzelsegment | Pro Segment (mehrteilig) |
|---|---|---|
| GSM-7 | 160 Septette | 153 Septette |
| UCS-2 | 70 UTF-16-Codeeinheiten | 67 UTF-16-Codeeinheiten |
Wenn eine Nachricht länger als ein Segment ist, wird sie in mehrere Segmente aufgeteilt. Jedes mehrteilige Segment reserviert einige Bytes für einen Zusammenbau-Header, den sogenannten User Data Header. Das reduziert die Kapazität von 160 auf 153 für GSM-7 und von 70 auf 67 für UCS-2.
Eine GSM-7-Nachricht mit 161 Septetten belegt 2 Segmente (ceil(161 / 153) = 2). Die Aufteilung verteilt den kodierten Text auf beide Segmente, wobei in jedem 153 Septette zur Verfügung stehen.
Maximale Nachrichtenlänge
Bird akzeptiert bis zu 12 Segmente pro Nachricht. Das entspricht:
- GSM-7: 1.836 Septetts (12 x 153)
- UCS-2: 804 UTF-16-Code-Units (12 x 67)
Ein Nachrichtentext, der 12 Segmente überschreitet, wird mit einem 422-Fehler abgelehnt. Bird kürzt eine Nachricht niemals stillschweigend.
Der GSM-7-Zeichensatz
GSM-7 deckt die Zeichen ab, die die meisten Nachrichten in lateinischer Schrift benötigen:
- Buchstaben A–Z, a–z
- Ziffern 0–9
- Gängige Satzzeichen: @, £, $, !, ", #, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, Leerzeichen, Zeilenumbruch
- Einige akzentuierte Zeichen westeuropäischer Sprachen, darunter é in café
Erweiterungstabellen-Zeichen
Eine Handvoll Zeichen gehört zu GSM-7, liegt aber in einer Erweiterungstabelle. Jedes kostet 2 Septetts statt 1 und zählt daher doppelt gegen das Segmentlimit:
€, [, ], {, }, \, ~, ^, |
Das wird an der Grenze relevant. Wenn Sie 159 normale Zeichen gefolgt von einem Euro-Zeichen schreiben, beträgt die kodierte Größe 161 Septetts (159 + 2). Das schiebt die Nachricht in 2 Segmente, obwohl sie wie 160 Zeichen aussieht.
Zeichen, die UCS-2 auslösen
Jedes Zeichen außerhalb von GSM 03.38 erzwingt für die gesamte Nachricht UCS-2. Die häufigsten Auslöser:
- Emoji: Viele Emoji außerhalb der Basic Multilingual Plane belegen zwei UTF-16-Code-Units. Eine Folge von 35 solchen Emoji passt in ein Segment; das 36. schiebt die Nachricht in zwei. Ein sichtbares Emoji kann auch mehrere Code Points kombinieren – zählen Sie daher den kodierten Text statt der sichtbaren Symbole.
- CJK-Zeichen (Chinesisch, Japanisch, Koreanisch)
- Arabisch, Thai, Hindi und andere Schriften außerhalb des GSM-7-Alphabets
- Typografische Anführungszeichen: “ ” ‘ ’ (die geraden Varianten " und ' sind GSM-7). Intelligente Zeichenkodierung kann diese vor dem Versand ersetzen.
Einige akzentuierte lateinische Zeichen, darunter é in café und ü, gehören zum GSM-7-Satz und lösen UCS-2 nicht aus. Andere, darunter á, í und ú, lösen UCS-2 aus.
Intelligente Zeichenkodierung
Manche UCS-2-Auslöser sind keine Zeichen, die Sie bewusst gewählt haben: Ein Textverarbeitungsprogramm wandelt ' in ’ um, ein Geviertstrich kommt beim Einfügen mit, ein Formularfeld enthält ein geschütztes Leerzeichen. Setzen Sie options.smart_encoding beim Senden auf true, und Bird ersetzt diese durch ihre GSM-7-Entsprechungen, bevor die Nachricht verschickt wird. Das hält den Text in GSM-7 und kann die Segmentzahl halbieren.
Intelligente Zeichenkodierung ist standardmäßig deaktiviert und greift nur, wenn jedes verbleibende Zeichen mit GSM-7 darstellbar ist. Enthält der Text nach der Ersetzung noch ein Zeichen außerhalb von GSM-7, etwa ein Emoji oder einen nicht unterstützten Akzentbuchstaben, sendet Bird ihn genau wie übergeben. Intelligente Zeichenkodierung beschreibt die Ersetzungstabelle und wie Sie das Ergebnis auslesen.
Segmentanzahl aus der API auslesen
Jede SMS-Antwort enthält ein segments-Objekt, das angibt, was Bird berechnet hat:
Codebeispiel
{
"segments": {
"count": 1,
"encoding": "GSM_7BIT",
"characters": 64
}
}- count: die Anzahl der abrechenbaren Segmente
- encoding: GSM_7BIT oder UCS2
- characters: die Anzahl der Zeichen (Unicode-Code-Points) im Nachrichtentext
Der count-Wert ist die Zahl, die Ihnen berechnet wird. Prüfen Sie ihn in der Antwort oder im SMS-Log, um sicherzustellen, dass Ihre Nachrichten wie erwartet ankommen.
Nachrichten auf ein Segment beschränken
Ein paar Gewohnheiten, die versehentliche Mehrsegment-Sendungen verhindern:
- Ersetzen Sie typografische Anführungszeichen durch gerade Anführungszeichen. Textverarbeitungsprogramme und manche Telefone ersetzen " automatisch durch “ ”, was UCS-2 erzwingt und Ihre Kapazität halbiert. Intelligente Zeichenkodierung übernimmt das für Sie bei den Sendungen, für die Sie sie aktivieren.
- Verzichten Sie auf Emoji in transaktionalen oder Authentifizierungsnachrichten, bei denen die Segmentzahl eine Rolle spielt.
- Achten Sie auf Erweiterungstabellen-Zeichen (€, {, }, [, ], \, ~, ^, |). Jedes belegt zwei Zeichenplätze.
- Wenn Sie in einer nichtlateinischen Schrift schreiben (CJK, Arabisch, Thai), planen Sie von Anfang an mit den UCS-2-Limits: 70 Zeichen bei einem Segment, 67 pro Segment bei Aufteilung.
- Verwenden Sie erkennbare Links und prüfen Sie deren Länge. Ein gebrandeter Kurzlink kann Platz sparen; prüfen Sie die Link-Anforderungen des Ziels, bevor Sie einen Kürzungsdienst wählen.
Nächste Schritte
Verwenden Sie den SMS-Segmentrechner vor einem Versand, und überprüfen Sie gerenderte Personalisierungen in Ihrem Kampagneninhalt.
- Intelligente Zeichenkodierung: Alle Ersetzungen prüfen und pro Nachricht aktivieren.
- SMS senden: Eine Nachricht senden und ihre Segmentzahl prüfen.
- SMS-Log: Kodierung und abrechenbare Segmente einer gesendeten Nachricht prüfen.
- SMS-Segmente: Warum ein Emoji die Kosten verdoppelt: Ein Video, das zwei Nachrichten sendet und vergleicht, was jede kostet
Verwandte Ressourcen
Weiter mit der Dokumentation, Anleitungen und Beispielen zu diesem Thema. Die Ressourcen sind auf Englisch.
Das Konzept verstehenWhat is an SMS segment, and why did one message cost three?Die Funktion erkundenSMS encodingDem Lernpfad folgenBuild your first integration
Übung ausprobieren und ein Implementierungs-Briefing erhalten