Saltar al contenido principal

Centro MMS (MMSc)

← Volver al Índice de Documentación | Referencia de Configuración | Referencia de API

Descripción General

OmniMessage incluye un Centro MMS (MMSc) que maneja la recepción, almacenamiento y notificación de entrega de mensajes multimedia. El MMSc soporta las dos interfaces principales de interconexión MMS definidas por 3GPP TS 23.140: MM1 para comunicación directa con el dispositivo y MM4 para retransmisión entre operadores.

Cuando un suscriptor envía o recibe un MMS, el MMSc almacena el contenido del mensaje localmente e inyecta un SMS de notificación MMS en la cola de mensajes de OmniMessage a través de la API REST estándar. El dispositivo receptor recupera el MMS haciendo un HTTP GET directamente al MMSc.

Especificaciones Relevantes

EspecificaciónTítulo
3GPP TS 23.140Servicio de Mensajería Multimedia (MMS) — descripción funcional
3GPP TS 26.140MMS — formatos de medios y códecs
Protocolo de Encapsulación MMS de OMAEspecificación de codificación binaria WAP MM1

Arquitectura

El MMSc se sitúa junto a OmniMessage y se comunica exclusivamente a través de la API REST. No hay acceso directo a la base de datos del almacenamiento de mensajes.

Flujo de Entrega de MMS

Entrega En Red (MM1)

Un suscriptor envía un MMS a otro suscriptor en la misma red.

Entrega Fuera de Red (MM4)

Un suscriptor envía un MMS a un suscriptor en un operador diferente.

MM4 Entrante (desde el Operador Peer)

Un suscriptor en otra red envía un MMS a un suscriptor en red.

SMS de Notificación MMS

El SMS de Notificación MMS es un SMS binario (DCS 0x44, datos de 8 bits) que contiene un PDU m-notification-ind codificado en WSP. Se divide en segmentos de 64 bytes, cada uno envuelto con un UDH de SMS concatenado, y se envía a OmniMessage como mensajes individuales a través de POST /api/messages.

La carga útil de notificación codifica la ubicación del contenido MMS como una URL HTTP que apunta al MMSc:

http://<mmsc.mms_domain>/<mms_message_id>.00

El dispositivo receptor utiliza esta URL para recuperar el MMS directamente del MMSc a través de MM1.

Determinación de En/Fuera de Red

El MMSc utiliza DNS ENUM (búsquedas NAPTR) para determinar si un suscriptor de destino está en red o fuera de red antes de decidir si enviar un SMS de Notificación MMS o retransmitir a través de MM4.

ResultadoAcción
El registro NAPTR coincide con una entrada enum_routing configurada con on_net: trueMMS almacenado localmente; SMS de notificación inyectado en la cola de OmniMessage
El registro NAPTR coincide con una entrada con on_net: falseMMS almacenado localmente; reenviado a peer a través de retransmisión SMTP MM4
No hay registro NAPTR o tiempo de espera de ENUMTratado como fuera de red; se intenta la retransmisión MM4

Configuración

El MMSc se configura a través de MMSc/config.yaml.

Ejemplo de Configuración

log_prefix: 'MMSc'

smsc_api:
url: 'https://10.4.10.215:8443'

mmsc:
host: 0.0.0.0
port: 8080
location: 'mmsc01.mnc001.mcc001.3gppnetwork.org'
mms_domain: "mms.example.com"
remote_mmsc_ip:
- 10.101.2.150
mm4_peers:
sinch:
- mm4_destination_host: mm4.sinch.com
mm4_destination_port: 25
mms_domain: mms1.mmsnni.carrier.net

database:
mysql:
server: 127.0.0.1
username: mmsc
password: changeme
database: mmsc
ping_before_query: true

prometheus:
listen_port: 8083

number_routing:
enum_domain: e164.arpa
enum_timeout_seconds: 1
enum_servers:
- 10.4.10.80
enum_routing:
- domain: 'mobile.example.local'
operator: 'ExampleMNO'
on_net: true
next_hop: 'internal'
destination_rewriting:
- regex_match: "^1(\d{10}$)"
regex_replace: "\1"
description: Eliminar el 1 inicial de un número NANP de 11 dígitos
default_route_mm4: 'sinch'

Parámetros de smsc_api

ParámetroTipoRequeridoPredeterminadoDescripción
urlCadenaURL base de la API REST de OmniMessage. Se utiliza para enviar mensajes SMS de Notificación MMS.
api_keyCadenaNoToken Bearer para autenticación de API, si es necesario. Omitir si la API no tiene autenticación configurada.
hss_urlCadenaNoURL base de una API HSS/PCRF para resolver direcciones IP de clientes a MSISDN en la interfaz MM1. Cuando se omite, la resolución de IP a MSISDN no está disponible y las solicitudes de IPs no locales serán rechazadas.

Parámetros de mmsc

ParámetroTipoRequeridoPredeterminadoDescripción
hostCadenaNo0.0.0.0Dirección de interfaz para vincular el servidor HTTP MM1.
portEnteroNo8080Puerto TCP para el servidor HTTP MM1.
locationCadenaCadena de identidad del nodo para este MMSc, utilizada como source_mmsc registrado contra los mensajes entregados.
mms_domainCadenaNombre de dominio de este MMSc. Codificado en la URL de ubicación del contenido MMS enviada en los mensajes de Notificación SMS (por ejemplo, mms.example.com).
remote_mmsc_ipListaNo[]Direcciones IP de MMScs pares. Las solicitudes de estas IPs en el punto de recuperación no se reenvían recursivamente, evitando bucles. También se utilizan como fuentes de respaldo en un fallo de caché local.
mm4_peersMapaNoGrupos nombrados de destinos de retransmisión MM4. Cada clave es un nombre de grupo par; cada entrada es una lista de definiciones de puntos finales SMTP. Ver Parámetros de Peer MM4 a continuación.

Parámetros de Peer MM4

Cada entrada bajo mmsc.mm4_peers.<nombre> es una lista. Cuando hay múltiples entradas presentes, se selecciona una al azar por intento de retransmisión.

ParámetroTipoRequeridoDescripción
mm4_destination_hostCadenaNombre de host o IP del servidor SMTP MM4 del operador par.
mm4_destination_portEnteroPuerto SMTP en el MMSc par. Típicamente 25.
mms_domainCadenaDominio MMS del operador par. Utilizado en encabezados To de SMTP y direccionamiento de mensajes.

Parámetros de database.mysql

ParámetroTipoRequeridoPredeterminadoDescripción
serverCadenaNombre de host o IP del servidor MySQL.
usernameCadenaNombre de usuario de la base de datos.
passwordCadenaContraseña de la base de datos.
databaseCadenaNombre de la base de datos. Debe coincidir con el esquema creado desde MMSc/schema.sql.
ping_before_queryBooleanoNofalseReconectar a MySQL antes de cada consulta. Recomendado para procesos de larga duración para recuperarse de tiempos de espera de conexión del lado del servidor.

Parámetros de number_routing

ParámetroTipoRequeridoPredeterminadoDescripción
enum_domainCadenaZona raíz DNS para búsquedas NAPTR ENUM (por ejemplo, e164.arpa).
enum_timeout_secondsEnteroNo1Tiempo de espera de consulta DNS en segundos. Establecer en 0 para deshabilitar ENUM y tratar todos los destinos como fuera de red.
enum_serversListaNoDNS del sistemaDirecciones de resolutores DNS a utilizar para consultas ENUM.
enum_routingListaNoLista ordenada de asignaciones de dominio a ruta NAPTR. Ver Parámetros de Enrutamiento ENUM a continuación.
destination_rewritingListaNoLista ordenada de reglas de reescritura regex aplicadas a MSISDNs de destino antes de la búsqueda ENUM y la retransmisión MM4. La primera regla que coincida gana.
default_route_mm4CadenaClave del grupo par MM4 (de mmsc.mm4_peers) a utilizar cuando no se aplica ninguna otra ruta.

Parámetros de Enrutamiento ENUM

ParámetroTipoDescripción
domainCadenaCadena de dominio de reemplazo NAPTR para coincidir (coincidencia de subcadena).
operatorCadenaNombre del operador legible por humanos para registro.
on_netBooleanotrue — el suscriptor está en red; inyectar SMS de notificación. false — retransmitir a través de MM4.
next_hopCadenaOpcional. Etiqueta informativa registrada en los registros; no utilizada para el enrutamiento.

Parámetros de prometheus

ParámetroTipoRequeridoPredeterminadoDescripción
listen_portEnteroNo8083Puerto en el que se exponen las métricas de Prometheus. Elegir un puerto que no entre en conflicto con el puerto de métricas del núcleo de OmniMessage (predeterminado 9568).

Esquema de Base de Datos

El MMSc mantiene su propia base de datos MySQL para metadatos de MMS y estado de entrega. El esquema está definido en MMSc/schema.sql y consiste en una sola tabla.

cola_mms_message

ColumnaTipoDescripción
idINT UNSIGNEDClave primaria autoincremental.
unique_idVARCHAR(64)Identificador de mensaje asignado por el MMSc. También se utiliza como segmento de ruta de URL de recuperación.
send_timeDATETIMEMarca de tiempo cuando el MMS fue recibido por este MMSc.
expiresDATETIMETiempo de expiración del mensaje, después del cual no será entregado.
source_msisdnVARCHAR(32)MSISDN del suscriptor que envía.
destination_msisdn_uniqueVARCHAR(32)MSISDN del destinatario principal.
mms_destinatination_msisdn_listTEXTLista separada por comas de todos los MSISDNs de destinatarios (para MMS grupales).
mms_subjectVARCHAR(255)Línea de asunto del MMS.
mms_file_pathVARCHAR(512)Ruta al archivo de contenido MMS almacenado (stored_mms/<id>.mms).
source_mmscVARCHAR(128)Identidad del MMSc o par MM4 que originó el mensaje.
dest_mmscVARCHAR(128)Establecido en MM4_<peer> después de la retransmisión MM4 saliente, o a la ubicación del MMSc de recuperación después de la entrega local.
mms_notify_timeDATETIMEMarca de tiempo cuando el SMS de Notificación MMS fue enviado a OmniMessage.
mms_retrive_timeDATETIMEMarca de tiempo cuando el suscriptor recuperó el MMS.

Procesos

El MMSc se ejecuta como dos procesos independientes.

Frontend HTTP MM1

Maneja las presentaciones de MMS WAP (m-send-req) y recuperaciones (GET /<id>) desde los dispositivos. Ejecutar a través de gunicorn:

gunicorn --bind 0.0.0.0:8080 MMSc:app

El frontend MM1 debe estar detrás de un proxy inverso (nginx, HAProxy) para la terminación TLS. Los dispositivos típicamente se conectan al APN del MMSc utilizando la configuración de proxy MMS del operador.

Servidor SMTP MM4

Escucha mensajes entrantes MM4_forward.REQ de MMScs de operadores pares. Ejecutar directamente:

python smtp_server.py

El puerto 25 requiere privilegios de root o CAP_NET_BIND_SERVICE. La retransmisión MM4 saliente utiliza smtplib integrado de Python y no requiere un MTA separado.

Métricas

El MMSc expone métricas de Prometheus en el puerto configurado bajo prometheus.listen_port.

Operaciones de MMS

Métrica: prom_mms_operations_count_total Tipo: Contador Descripción: Conteo de operaciones MMS procesadas. Etiquetas:

  • method — Tipo de operación: HTTP_POST, m-send-req, m-notifyresp-ind, m-acknowledge-ind, InsertMMS, GetMMS, UpdateMMS, MMS_Get, MMS_Get_Fail, SMTP_Start, SMTP_Complete

Consultas de ejemplo:

# Tasa de envío de MMS
rate(prom_mms_operations_count_total{method="m-send-req"}[5m])

# Tasa de finalización de MM4 entrante
rate(prom_mms_operations_count_total{method="SMTP_Complete"}[5m])

Tiempos de Respuesta de API

Métrica: prom_mms_api_response_time Tipo: Histograma Descripción: Latencia del manejador HTTP MM1 en segundos. Etiquetas:

  • result — Código de estado HTTP: 200, 404, 500
  • function — Manejador: m-send-req, m-notifyresp-ind, m-acknowledge-ind, GET MMS, GET MMS Remoto, desconocido

Consultas de ejemplo:

# Latencia de recuperación en el percentil 95
histogram_quantile(0.95,
rate(prom_mms_api_response_time_bucket{function="GET MMS"}[5m]))

Tiempos de Retransmisión MM4

Métrica: prom_mm4_response_time Tipo: Histograma Descripción: Latencia de retransmisión SMTP MM4 en segundos. Etiquetas:

  • result200 (éxito) o 000 (fallo)
  • directionin (entrante desde el par) o out (saliente hacia el par)
  • peer — Nombre del grupo par MM4

Consultas de ejemplo:

# Tasa de error saliente de MM4
sum(rate(prom_mm4_response_time_count{direction="out",result="000"}[5m]))
/ sum(rate(prom_mm4_response_time_count{direction="out"}[5m]))

Tiempos de Respuesta DNS

Métrica: prom_dns_response_time Tipo: Histograma Descripción: Latencia de consulta DNS ENUM en segundos. Un pico aquí retrasará las decisiones de entrega de MMS.