# Microsoft Notification Protocol

Microsoft Notification Protocol (MSNP) es un protocolo de mensajería instantánea creado por Microsoft para su propio servicio Microsoft Menssenger de mensajería y fue usado tanto por Windows Live Messenger (y su antecesor MSN Messenger), MSN Messenger, Windows Messenger y Microsoft Messenger para Mac. A la fecha septiembre de 2023 es usado también por otros clientes de mensajería de terceros tales como el Pidgin, Trillian, Kopete, aMSN y emesene entre otros.
Desde 2014 es usado por Skype.
El protocolo MSNP se utilizó por primera vez en un producto disponible públicamente con el primer lanzamiento de MSN Messenger en 1999.
Desde sus primeras versiones, este protocolo ha sufrido una serie de transformaciones en las que se ha modificado su sintaxis y se han añadido/eliminado comandos. Cada uno de estos cambios se reflejan en una versión del protocolo y se representan por la cadena 'MSNP' seguida del número de la versión.
En un principio, Microsoft pensaba hacer público este protocolo. Incluso publicaron un Internet Draft donde especificaban MSNP2, pero desde entonces no han vuelto a publicar las actualizaciones del protocolo y actualmente es un protocolo cerrado.

## Formato de los mensajes

Los comandos usados en MSNP están codificados como cadenas ASCII y están estructurados de la siguiente forma:
MSG [trID] par1 par2 ... parN [tamPayload] \r\n [payload]
Donde MSG puede ser una cadena de 3 letras en mayúsculas que representan un comando o un número de 3 cifras que representa un código de error. A este cadena le puede seguir un Transaction ID (TrID) que se utiliza para asociar un mensaje enviado por el cliente a su correspondiente respuesta por parte del servidor. Posteriormente se incluyen cada uno de los parámetros requeridos por el comando separados por espacios en blanco y finalizados por un salto de línea al estilo DOS (\r\n, CRLF).
El payload es usado por algunos comandos para enviar datos binarios. Para hacer esto se incluye el tamaño en bytes del payload como el último parámetro del comando y posteriormente se incluye el payload justo después del salto de línea.

## Versiones
### MSNP1

MSNP1 nunca ha sido publicada, se cree que fue utilizada durante las primeras etapas de diseño y desarrollo del MSN Messenger 1.

### MSNP2

Esta es la única versión de MSNP cuyas especificaciones han sido publicadas por los propios desarrolladores de Microsoft en forma de Internet Draft. Actualmente este documento se considera obsoleto.

### MSNP3 hasta MSNP7

Estas versiones nunca se han utilizado en un programa público.

### MSNP8

MSNP8 fue incorporada junto a la salida del MSN Messenger 5.0. En esta versión se incorpora un nuevo método de autenticación llamado Tweener donde la validación se hace a través de una conexión segura (HTTPS) con un servidor de Passport. Esta cambio también hizo posible que los usuarios pudieran conectarse a la red MSN con cualquier dirección de correo siempre que estuviera registrada en Passport.
Debido a este cambio, todas las versiones anteriores han sido declaradas como obsoletas y en la actualidad esta es la versión de MSNP más baja soportada por los servidores.

### MSNP9

MSNP9 fue incorporada con MSN Messenger 6, añadiendo soporte para mensajes "tipo D" (datos), los cuales son usados para transferir imágenes para mostrar (avatares) y emoticonos personalizados entre clientes, entre otras mejoras de manejo de cámaras web, voz y red para transferencias de archivos.

### MSNP10

Empleado en MSN Messenger 6.1, después que Microsoft empezó a bloquear versiones anteriores en octubre de 2003. De todas formas, no fue un gran cambio, el único cambio obvio fue la integración con la libreta de direcciones de Hotmail.

### MSNP11

Empleado por MSN Messenger 7.0

### MSNP12

Empleado por MSN Messenger 7.5

### MSNP13

Esta es versión de MSNP implementada en las betas públicas del Windows Live Messenger. Entre los cambios más significativos está el uso de SOAP para la gestión de listas de contactos y la información de presencia de los usuarios.

### MSNP14

MSNP14 añade interoperabilidad con Yahoo! Messenger.

### MSNP15

Esta versión permite los mensajes personales, hablar en estado invisible y ver que canciones reproducen mis contactos.

### MSNP16

MSNP16 se utiliza en una versión preliminar de Windows Live Messenger 9.0, filtrada en diciembre de 2007. También es compatible con MSNP16 aMSN.
Cuenta con "Varios puntos de presencia" (MPOP), la capacidad de firmar dos lugares al mismo tiempo con la chats replicados en todos los lugares. Los datos UUX se han ampliado para contener datos extremos (también MPOP), así como datos de objeto de MSN de sonido de firma.

### MSNP17

MSNP17 se identifica mediante servidores de Windows Live Messenger en messenger.hotmail.com, pero no utilizado por cualquier cliente oficial publicada por Microsoft.

### MSNP18

MSNP18 se utiliza en Windows Live Messenger 2009 (14.0). Su principal nueva característica son los grupos, como conversaciones agrupadas persistentes. Datos de UUX se han ampliado para incluir datos de objeto de MSN de imagen de escena. MSNP-Sharp soporta MSNP18.

### MSNP19

Utilizado por Windows Live Messenger 2011 (Wave 4).

### MSNP24

MSNP24 se utiliza en Skype desde principios de 2014. También usado por Microsoft Teams.