Sign inGet Started

Codificación inteligente de SMS

Las sustituciones tipográficas pueden sacar un SMS de GSM-7. Un procesador de texto convierte ' en ’, el texto pegado contiene una raya, o un campo de formulario incluye un espacio de no separación. Cada uno se parece a un carácter GSM-7, pero un solo carácter fuera de GSM convierte todo el cuerpo a UCS-2, lo que reduce la capacidad de cada segmento.

La codificación inteligente reemplaza esos caracteres por sus equivalentes en GSM-7 antes de que Bird entregue el mensaje al operador, de modo que un cuerpo que solo parecía no GSM permanece en GSM-7 y se factura como menos segmentos.

Cómo activarla

Está desactivada por defecto, porque modifica el texto que lee el destinatario. Establece options.smart_encoding en true en un envío:

await bird.sms.send({
  to: "+31612345678",
  from: "Bird",
  text: "Your order shipped, track it here…",
  category: "transactional",
  options: { smart_encoding: true },
});

Los SDK de Go y PHP la aceptan como campo nullable, así que dejarla sin valor toma el valor por defecto de Bird en lugar de enviar false.

Configura la codificación inteligente por mensaje. Bird no ofrece un ajuste global de cuenta ni por remitente.

Cuándo Bird mantiene UCS-2

El reemplazo se aplica solo cuando convierte todo el cuerpo a GSM-7. Si algún carácter queda fuera de GSM-7, Bird envía el cuerpo exactamente como se proporcionó.

Un solo emoji, carácter CJK o letra acentuada fuera de GSM-7 mantiene todo el mensaje en UCS-2:

Ejemplo de código
{ "text": "Hoe gaat het vandaag? á “" }

“ es reemplazable, pero á no está en GSM-7 y no tiene entrada en la tabla, así que este cuerpo se envía sin cambios como UCS-2. GSM-7 incluye à, ä, å, é, è, ì, ò, ù, ö, ñ, ü pero no á, í ni ú.

Las letras acentuadas están deliberadamente ausentes de la tabla. Reducir á a a cambiaría la palabra en lugar de aproximarla, lo cual es un compromiso incorrecto para quien escribe en español o portugués.

La normalización afecta a los acentos combinantes. En texto NFD, un ê descompuesto almacena el acento como una marca combinante separada, de modo que la codificación inteligente lo convierte a e^. Un ê precompuesto permanece sin cambios y usa UCS-2.

Qué no hace

  • Nunca trunca. Un cuerpo que supere el límite de 12 segmentos se rechaza con un 422, y el límite se mide después del reemplazo, así que activarla puede hacer que un cuerpo demasiado largo quede dentro del límite.
  • No modifica un cuerpo que ya es GSM-7, porque no hay segmentos que ahorrar.
  • No cambia lo que se te factura más allá del número de segmentos: el conteo se calcula a partir del cuerpo tal como se envió.

Consultar lo que ocurrió

El mensaje reporta ambas partes. text es el cuerpo tal como se envió, y options.smart_encoding reporta el ajuste que se aplicó:

Ejemplo de código
{
  "text": "Your order shipped - track it here...",
  "segments": { "count": 1, "encoding": "GSM_7BIT", "characters": 36 },
  "options": { "smart_encoding": true }
}

Un encoding con valor UCS2 en un envío en el que activaste la opción te indica que el cuerpo no pudo llevarse a GSM-7. Para ver qué ocurriría con un mensaje concreto antes de enviarlo, pega el texto en la calculadora de segmentos de SMS.

Tabla completa de reemplazos

La tabla de reemplazos lista cada carácter que se modifica cuando la codificación inteligente está activada. Los demás caracteres, incluidos los que ya pertenecen a GSM-7, permanecen sin cambios.

ReemplazoCaracteres reemplazados
espacioU+00A0, U+2000, U+2001, U+2002, U+2003, U+2004, U+2005, U+2006, U+2007, U+2008, U+2009, U+200A, U+202F, U+205F, U+3000
!ǃ U+01C3, ︕ U+FE15, ﹗ U+FE57, ! U+FF01
!!‼ U+203C
"« U+00AB, » U+00BB, ʺ U+02BA, ˮ U+02EE, “ U+201C, ” U+201D, „ U+201E, ‟ U+201F, ❝ U+275D, ❞ U+275E, 〝 U+301D, 〞 U+301E, " U+FF02
#﹟ U+FE5F, # U+FF03
$﹩ U+FE69, $ U+FF04
%﹪ U+FE6A, % U+FF05
&﹠ U+FE60, & U+FF06
'` U+0060, ´ U+00B4, ʹ U+02B9, ʻ U+02BB, ʼ U+02BC, ʽ U+02BD, ˈ U+02C8, ˊ U+02CA, ˋ U+02CB, U+0313, U+0314, ‘ U+2018, ’ U+2019, ‛ U+201B, ❛ U+275B, ❜ U+275C, ︐ U+FE10, ︑ U+FE11, ' U+FF07
(❨ U+2768, ❪ U+276A, ⟮ U+27EE, ⦅ U+2985, ﹙ U+FE59, ( U+FF08
)❩ U+2769, ❫ U+276B, ⟯ U+27EF, ⦆ U+2986, ﹚ U+FE5A, ) U+FF09
*⁎ U+204E, ∗ U+2217, ⊛ U+229B, ✢ U+2722, ✣ U+2723, ✤ U+2724, ✥ U+2725, ✱ U+2731, ✲ U+2732, ✳ U+2733, ✺ U+273A, ✻ U+273B, ✼ U+273C, ✽ U+273D, ❃ U+2743, ❉ U+2749, ❊ U+274A, ❋ U+274B, ⧆ U+29C6, ﹡ U+FE61, * U+FF0A
+˖ U+02D6, ﹢ U+FE62, + U+FF0B
,U+0326, ‚ U+201A, 、 U+3001, ﹐ U+FE50, ﹑ U+FE51, , U+FF0C, 、 U+FF64
-‐ U+2010, – U+2013, — U+2014, ― U+2015, • U+2022, ⁃ U+2043, ⎼ U+23BC, ⎽ U+23BD, ﹣ U+FE63, - U+FF0D
.。 U+3002, ﹒ U+FE52, . U+FF0E, 。 U+FF61
...… U+2026
/÷ U+00F7, U+0337, U+0338, ⁄ U+2044, ∕ U+2215, ⧸ U+29F8, / U+FF0F
00 U+FF10
11 U+FF11
1/2½ U+00BD
1/4¼ U+00BC
22 U+FF12
33 U+FF13
3/4¾ U+00BE
44 U+FF14
55 U+FF15
66 U+FF16
77 U+FF17
88 U+FF18
99 U+FF19
:ː U+02D0, ˸ U+02F8, ⦂ U+2982, ꞉ U+A789, ︓ U+FE13, : U+FF1A
;⁏ U+204F, ︔ U+FE14, ﹔ U+FE54, ; U+FF1B
<‹ U+2039, ﹤ U+FE64, < U+FF1C
=U+0347, ꞊ U+A78A, ﹦ U+FE66, = U+FF1D
>› U+203A, ﹥ U+FE65, > U+FF1E
?︖ U+FE16, ﹖ U+FE56, ? U+FF1F
@﹫ U+FE6B, @ U+FF20
Aᴀ U+1D00, A U+FF21
Bʙ U+0299, B U+FF22
Cᴄ U+1D04, C U+FF23
Dᴅ U+1D05, D U+FF24
Eᴇ U+1D07, E U+FF25
Fꜰ U+A730, F U+FF26
Gɢ U+0262, G U+FF27
Hʜ U+029C, H U+FF28
Iɪ U+026A, I U+FF29
Jᴊ U+1D0A, J U+FF2A
Kᴋ U+1D0B, K U+FF2B
Lʟ U+029F, L U+FF2C
Mᴍ U+1D0D, M U+FF2D
Nɴ U+0274, N U+FF2E
Oᴏ U+1D0F, O U+FF2F
Pᴘ U+1D18, P U+FF30
QQ U+FF31
Rʀ U+0280, R U+FF32
Sꜱ U+A731, S U+FF33
Tᴛ U+1D1B, T U+FF34
Uᴜ U+1D1C, U U+FF35
Vᴠ U+1D20, V U+FF36
Wᴡ U+1D21, W U+FF37
XX U+FF38
Yʏ U+028F, Y U+FF39
Zᴢ U+1D22, Z U+FF3A
[[ U+FF3B
\U+20E5, ⧵ U+29F5, ⧹ U+29F9, ﹨ U+FE68, \ U+FF3C
]] U+FF3D
^ˆ U+02C6, U+0302, U+1DCD, ^ U+FF3E
_U+0332, ‗ U+2017, _ U+FF3F
{❴ U+2774, ﹛ U+FE5B, { U+FF5B
|U+20D2, U+20D3, ∣ U+2223, ⎜ U+239C, ⎟ U+239F, ⎸ U+23B8, ⎹ U+23B9, ⏐ U+23D0, | U+FF5C
}❵ U+2775, ﹜ U+FE5C, } U+FF5D
~˜ U+02DC, ˷ U+02F7, U+0303, U+0330, U+0334, ∼ U+223C, ~ U+FF5E
eliminadoU+200B, U+2028, U+2029, U+2060, U+FEFF

Las variantes de espacio en blanco se reducen a un único espacio (U+0020). La última fila lista los caracteres de ancho cero y formato que se eliminan en lugar de reemplazarse.

Siguientes pasos