> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/contributor/contributor-es/comunicaciones/messages.md).

# Mensajes

Los mensajes en comms son paquetes de datos binarios *paquetes*, serializados usando [protocol buffers](https://github.com/protocolbuffers/protobuf). Transportan chat de texto y voz, actualizaciones de posición, cambios de perfil y otras interacciones en tiempo real.

{% hint style="info" %}
Puedes ver el protocolo de comms en acción y experimentarlo usando el código abierto [Comms Station](https://decentraland.github.io/comms-station/).
{% endhint %}

Todas las definiciones de mensajes están disponibles en el [repositorio de protocolos](https://github.com/decentraland/protocol), y cada tipo de mensaje a continuación tiene un enlace a su declaración.

**`Packet`** [**↗ fuente**](https://github.com/decentraland/protocol/blob/c48ea0aa00d8173084571552463a6a05a7f49636/proto/decentraland/kernel/comms/rfc4/comms.proto#L8)

El `Packet` la estructura es el contenedor de todos los mensajes.

| Campo     | Tipo   | Valor                                                                                                                                                                                                |
| --------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `message` | `enum` | <p>Uno de <code>Chat</code>, <code>Voice</code>, <code>Position</code>, <code>AnnounceProfileVersion</code>,<br><code>ProfileRequest</code>, <code>ProfileResponse</code>, o <code>Scene</code>.</p> |

### Chat de texto y voz

Los clientes chatean difundiendo mensajes de texto y clips de audio a todos los pares conectados (normalmente jugadores en la misma isla).

Solo dos `Packet` tipos están involucrados, uno para cada caso de uso. En circunstancias típicas, los clientes difunden estos mensajes a todos los demás clientes en su isla, que es el grupo de jugadores cercanos con los que pueden interactuar.

***

**`Chat`** [**↗ fuente**](https://github.com/decentraland/protocol/blob/c48ea0aa00d8173084571552463a6a05a7f49636/proto/decentraland/kernel/comms/rfc4/comms.proto#L56)

Envía un mensaje de chat de texto a otros clientes.

| Campo             | Tipo     | Valor                             |
| ----------------- | -------- | --------------------------------- |
| `message`         | `string` | Texto del mensaje                 |
| `marca de tiempo` | `double` | Marca de tiempo UTC del remitente |

***

**`Voice`** [**↗ fuente**](https://github.com/decentraland/protocol/blob/c48ea0aa00d8173084571552463a6a05a7f49636/proto/decentraland/kernel/comms/rfc4/comms.proto#L66)

Envía una muestra de voz codificada a otros clientes.

| Campo             | Tipo     | Valor                                                 |
| ----------------- | -------- | ----------------------------------------------------- |
| `encoded_samples` | `bytes`  | Datos de audio codificados                            |
| `codec`           | `enum`   | Solo `VC_OPUS` (por ahora no se admiten otros códecs) |
| `index`           | `uint32` | Un contador incremental establecido por el remitente  |

El `codec` el campo es un `enum` valor. Los códecs personalizados no son compatibles.

### Movimiento

Los clientes que controlan avatars envían y reciben actualizaciones de posición dentro de su isla, para sincronizar el movimiento y la postura entre los jugadores.

***

**`Position`** [**↗ fuente**](https://github.com/decentraland/protocol/blob/c48ea0aa00d8173084571552463a6a05a7f49636/proto/decentraland/kernel/comms/rfc4/comms.proto#L20)

Actualiza a otros clientes sobre la posición y orientación de un avatar.

| Campo                                                                                                               | Tipo     | Valor                                                |
| ------------------------------------------------------------------------------------------------------------------- | -------- | ---------------------------------------------------- |
| <p><code>position\_x</code><br><code>position\_y</code><br><code>position\_z</code></p>                             | `float`  | Posición del avatar en el mapa mundial               |
| <p><code>rotation\_x</code><br><code>rotation\_y</code><br><code>rotation\_z</code><br><code>rotation\_w</code></p> | `float`  | Cuaternión de rotación del avatar                    |
| `index`                                                                                                             | `uint32` | Un contador incremental establecido por el remitente |

Los clientes suelen enviar `Position` actualizaciones con baja frecuencia (por ejemplo, una vez cada 1 o 2 segundos), y pasar a una alta frecuencia (varias veces por segundo) cuando se mueven o interactúan.

{% hint style="info" %}
Al enviar actualizaciones de posición, la velocidad suele ser mejor que la fiabilidad. El rendimiento percibido es mejor cuando la entrega es más rápida, incluso si un `Position` mensaje se descarta u ordena de forma incorrecta ocasionalmente. Algunos transportes (por ejemplo, [LiveKit](https://github.com/decentraland/docs/tree/main/contributor/communications/transport-types/livekit/README.md)) pueden cambiar entre modos rápido y fiable por mensaje.
{% endhint %}

Se recomiendan las difusiones de baja frecuencia como una solución simple para entregar actualizaciones a clientes que perdieron la conectividad momentáneamente o no lograron capturar un mensaje mientras se unían a la isla.

El `index` el campo es un contador incremental, establecido por el remitente para que los receptores puedan ordenar las actualizaciones que llegan fuera de orden.

### Compartir perfil

Los clientes dentro de una isla pueden solicitar la información del avatar de otros jugadores, para renderizar sus avatares, mostrar sus nombres e imágenes, etc.

Dado que los cambios de perfil son poco frecuentes (en comparación con las actualizaciones de posición, por ejemplo), el sistema está diseñado para simplificar la tarea de mantener una caché local de perfiles, y solo obtener perfiles cuando sea necesario.

Hay 3 [`Packet`](#Packet) tipos involucrados: un [`ProfileRequest`](#ProfileRequest)/[`ProfileResponse`](#ProfileResponse) par usado por los clientes para compartir perfiles bajo demanda, y el [`AnnounceProfileVersion`](#AnnounceProfileVersion) mensaje para indicar a los pares cuál es la versión más reciente, para que puedan decidir si solicitarla.

Los clientes suelen difundir `AnnounceProfileVersion` mensajes periódicamente, además de hacerlo inmediatamente cuando su perfil cambia.

```mermaid
sequenceDiagram
    participant Client1 as Client 1
    participant Client2 as Client 2
    participant Client3 as Client 3
    
    Note over Client1: Difundir la versión del perfil
    Client1->>Client1: AnnounceProfileVersion(v1)
    Client1->>Client1: AnnounceProfileVersion(v1)
    
    Note over Client3: Solicitar perfil
    Client3->>Client1: ProfileRequest(@client 1)
    Client1->>Client3: ProfileResponse(v1)
    
    Client1->>Client1: AnnounceProfileVersion(v1)
    
    Note over Client1: Perfil actualizado
    Client1->>Client1: AnnounceProfileVersion(v2)
    
    Note over Client2,Client3: Varios clientes solicitan
    Client2->>Client1: ProfileRequest(@client 1)
    Client3->>Client1: ProfileRequest(@client 1)
    Client1->>Client2: ProfileResponse(v2)
    Client1->>Client3: ProfileResponse(v2)
```

***

**`AnnounceProfileVersion`** [**↗ fuente**](https://github.com/decentraland/protocol/blob/c48ea0aa00d8173084571552463a6a05a7f49636/proto/decentraland/kernel/comms/rfc4/comms.proto#L34)

Indica a otros clientes que hay un [entidad de perfil](https://github.com/decentraland/docs/tree/main/contributor/content/entity-types/profiles/README.md) que pueden solicitar.

| Campo             | Tipo     | Valor                                                    |
| ----------------- | -------- | -------------------------------------------------------- |
| `profile_version` | `uint32` | Un número de versión incrementado con cada modificación. |

Los receptores que almacenan perfiles en caché pueden usar el `profile_version` número para decidir si su copia local está actualizada o si necesitan enviar una [`ProfileRequest`](#ProfileRequest).

***

**`ProfileRequest`** [**↗ fuente**](https://github.com/decentraland/protocol/blob/c48ea0aa00d8173084571552463a6a05a7f49636/proto/decentraland/kernel/comms/rfc4/comms.proto#L41)

Solicita un perfil de una versión especificada a un par concreto.

| Campo             | Tipo     | Valor                                   |
| ----------------- | -------- | --------------------------------------- |
| `address`         | string   | La dirección identificadora del perfil. |
| `profile_version` | `uint32` | La versión de perfil deseada.           |

Los receptores pueden responder con [`ProfileResponse`](#ProfileResponse) mensajes para proporcionar el perfil solicitado.

***

**`ProfileResponse`** [**↗ fuente**](https://github.com/decentraland/protocol/blob/c48ea0aa00d8173084571552463a6a05a7f49636/proto/decentraland/kernel/comms/rfc4/comms.proto#L46)

Envía un perfil en respuesta a una [`ProfileRequest`](#ProfileRequest).

| Campo                | Tipo     | Valor                                                                            |
| -------------------- | -------- | -------------------------------------------------------------------------------- |
| `serialized_profile` | string   | Entidad de perfil serializada en JSON.                                           |
| `base_url`           | `uint32` | URL base para un endpoint del sistema de archivos, recomendada por el remitente. |

El `serialized_profile` el campo contiene la serialización JSON de una [entidad de perfil](https://github.com/decentraland/docs/tree/main/contributor/content/entity-types/profiles/README.md).

Si el remitente desea recomendar un servidor de contenido para descargar entidades referenciadas en su perfil (como wearables), puede establecer el `base_url` campo como una sugerencia. Los clientes son libres de usar o ignorar esta URL.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.decentraland.org/contributor/contributor-es/comunicaciones/messages.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
