Cómo enviar datos de código de barras a un teléfono por SMS (no la imagen)

No puedes enviar una imagen de código de barras por SMS. El SMS es solo texto (160 caracteres GSM-7 / 70 caracteres UCS-2) y no admite imágenes (eso es MMS, que es poco fiable, está comprimido y a menudo es bloqueado por las operadoras).

En su lugar, envía los *datos* del código de barras como texto.** El destinatario escanea el texto usando una aplicación escáner de códigos de barras.

Cómo funciona

  1. Obtén los datos sin procesar: la cadena alfanumérica que codifica el código de barras (por ejemplo, "012345678905" para UPC-A, "https://example.com" para QR).
  2. Codifica para SMS (opcional): para códigos de barras 1D simples, envía el número sin procesar. Para datos complejos, usa una representación de texto de código QR (la carga útil del QR en sí es texto).
  3. Envía a través de una puerta de enlace SMS: usa una API (Twilio, Vonage, Plivo, Bandwidth, Telnyx) o correo electrónico a SMS (número@puertaenlacedelaoperadora.com).
  4. El destinatario escanea: abre una aplicación escáner (Google Lens, Cámara de Apple, Barcode Scanner, QR Code Reader), apunta al mensaje de texto (si es texto plano) o a una imagen de código QR generada a partir del texto (mejor opción).

Enfoque mejor: envía un enlace a una imagen de código de barras generada

  1. Tu servidor genera la imagen del código de barras (usando python-barcode, qrcode, ZXing, bwip-js).
  2. Súbela a almacenamiento temporal (S3, Cloudinary, imgur) con expiración corta (1 hora).
  3. Envía SMS con un enlace corto: Tu código de barras: https://short.ly/abc123 (expira en 1 hr).
  4. El destinatario toca el enlace → la imagen se abre en el navegador → mantiene presionado → "Escanear código QR" (iOS) / Google Lens (Android) → decodifica.

Esto funciona de manera fiable, admite cualquier formato de código de barras y evita los límites de tamaño del SMS.

Ejemplo en Python + Twilio (envío de datos sin procesar)

from twilio.rest import Client
import os
account_sid = os.environ['TWILIO_SID']
auth_token = os.environ['TWILIO_TOKEN']
client = Client(account_sid, auth_token)
barcode_data = "012345678905"  # Tu carga útil de UPC/EAN/QR
to_number = "+15551234567"
from_number = "+15559876543"  # Tu número de Twilio
message = client.messages.create(
    body=f"Código de barras: {barcode_data}",
    from_=from_number,
    to=to_number
)
print(f"Enviado: {message.sid}")

Consideraciones críticas

  • Límite de caracteres: 160 caracteres (GSM-7). Datos largos (vCard, JSON) requieren SMS concatenado (cuesta más, se fragmenta) o el método de enlace anterior.
  • Seguridad: nunca envíes datos sensibles (tokens de autenticación, PII) por SMS: no está cifrado, los operadores lo registran y es vulnerable a ataques SS7 o cambio de SIM.
  • Manejo de errores: valida el formato del número de teléfono (E.164), maneja errores de Twilio (21610, 21614, 30003+).
  • Cumplimiento: TCPA (EE. UU.), GDPR (UE), CASL (Canadá). Obtén consentimiento explícito para mensajes automatizados.

Resumen: no envíes imágenes. Envía los datos como texto (simple) o un enlace a una imagen generada (robusto). Usa una API de SMS. Para producción, el método de enlace es mucho más fiable.