Sign inGet started

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

KodierungEinzelsegmentPro Segment (mehrteilig)
GSM-7160 Septette153 Septette
UCS-270 UTF-16-Codeeinheiten67 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 Septette (12 x 153)
  • UCS-2: 804 UTF-16-Codeeinheiten (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 Akzentbuchstaben westeuropäischer Sprachen, darunter é in café

Zeichen der Erweiterungstabelle

Einige Zeichen gehören zu GSM-7, stehen aber in einer Erweiterungstabelle. Jedes belegt 2 Septette statt 1 und zählt beim Segmentlimit daher doppelt:
, [, ], {, }, \, ~, ^, |
Dieser Unterschied wird nahe am Segmentlimit wichtig. Auf 159 normale Zeichen folgt ein Eurozeichen: Die kodierte Größe beträgt dann 161 Septette (159 + 2). Dadurch benötigt die Nachricht 2 Segmente, obwohl sie nur 160 sichtbare Zeichen enthält.

Zeichen, die UCS-2 auslösen

Jedes Zeichen außerhalb von GSM 03.38 erzwingt UCS-2 für die gesamte Nachricht. Die häufigsten Auslöser:
  • Emoji: Viele Emoji außerhalb der Basic Multilingual Plane belegen zwei UTF-16-Codeeinheiten. Eine Folge von 35 solcher Emoji passt in ein Segment; mit dem 36. werden zwei Segmente benötigt. Ein sichtbares Emoji kann außerdem mehrere Codepunkte kombinieren, daher zählt der kodierte Text und nicht die Zahl sichtbarer Symbole.
  • CJK-Zeichen (Chinesisch, Japanisch, Koreanisch)
  • Arabisch, Thai, Hindi und andere Schriftsysteme außerhalb des GSM-7-Alphabets
  • Typografische Anführungszeichen: (die geraden Varianten " und ' sind GSM-7). Intelligente Kodierung kann diese vor dem Senden 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 Kodierung

Manche UCS-2-Auslöser sind keine Zeichen, die Sie bewusst gewählt haben: Eine Textverarbeitung wandelt ' in um, ein Geviertstrich gelangt per Einfügen in den Text, 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 versendet wird. Das hält den Text in GSM-7 und kann die Segmentzahl halbieren.
Intelligente Kodierung ist standardmäßig deaktiviert und greift nur, wenn jedes verbleibende Zeichen GSM-7 verwenden kann. 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 exakt wie übermittelt. Intelligente Kodierung beschreibt die Ersetzungstabelle und wie Sie das Ergebnis lesen.

Segmentzahlen aus der API lesen

Jede SMS-Antwort enthält ein segments-Objekt, das die Berechnung von Bird ausweist:
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. Textverarbeitungen und manche Telefone ersetzen " automatisch durch , was UCS-2 erzwingt und Ihre Kapazität halbiert. Intelligente Kodierung übernimmt das für Sie bei den Sendungen, für die Sie sie aktivieren.
  • Verzichten Sie in Transaktions- oder Authentifizierungsnachrichten, bei denen die Segmentzahl zählt, auf Emoji.
  • Achten Sie auf Zeichen der Erweiterungstabelle (, {, }, [, ], \, ~, ^, |). Jedes davon belegt zwei Zeichenplätze.
  • Wenn Sie in einer nicht-lateinischen Schrift schreiben (CJK, Arabisch, Thai), planen Sie von Anfang an mit den UCS-2-Limits: 70 Zeichen im Einzelsegment, 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

Nutzen Sie den SMS-Segmentrechner vor dem Senden und überprüfen Sie gerenderte Personalisierungen in Ihrem Kampagneninhalt.