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 },
});client.sms.send(
to="+31612345678",
from_="Bird",
text="Your order shipped, track it here…",
category="transactional",
smart_encoding=True,
)_, err := client.Sms.Send(context.Background(), bird.SmsSendParams{
To: "+31612345678",
From: "Bird",
Text: "Your order shipped, track it here…",
Category: bird.SMSCategoryTransactional,
SmartEncoding: bird.Bool(true),
})$bird->sms->send(
to: '+31612345678',
from: 'Bird',
text: 'Your order shipped, track it here…',
category: 'transactional',
smartEncoding: true,
);bird sms send \
--category transactional \
--from Bird \
--smart-encoding=true \
--text 'Your order shipped, track it here…' \
--to +31612345678curl -X POST https://eu1.platform.bird.com/v1/sms/messages \
-H "Authorization: Bearer bk_eu1_..." \
-H "Content-Type: application/json" \
-d '{
"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:
{ "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ó:
{
"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.
| Reemplazo | Caracteres reemplazados |
|---|---|
| espacio | U+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 |
0 | 0 U+FF10 |
1 | 1 U+FF11 |
1/2 | ½ U+00BD |
1/4 | ¼ U+00BC |
2 | 2 U+FF12 |
3 | 3 U+FF13 |
3/4 | ¾ U+00BE |
4 | 4 U+FF14 |
5 | 5 U+FF15 |
6 | 6 U+FF16 |
7 | 7 U+FF17 |
8 | 8 U+FF18 |
9 | 9 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 |
Q | Q 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 |
X | X 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 |
| eliminado | U+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
- Límites de caracteres: consulta GSM-7, UCS-2 y los límites de segmentos.
- Enviar SMS: activa la codificación inteligente en un envío.
- Calculadora de segmentos de SMS: comprueba un mensaje antes de enviarlo.
Recursos relacionados
Continúa con la documentación, guías y ejemplos de este tema.