# Eventos de watchlist

Un miembro que inicia sesión puede indicar a qué miembros quiere seguir, y la conexión recibe aviso cuando cualquiera de ellos se conecta o se desconecta. Esa es toda la funcionalidad: sin un canal por relación, sin polling, una sola lista.

Los eventos de watchlist se apoyan en el [inicio de sesión de miembros](/docs/guides/realtime/terminating-member-connections). La identidad que tu backend firma en el inicio de sesión puede incluir un array `watchlist` de ids de miembros; cuando el ajuste `watchlist_events` de la app está activado, la conexión recibe eventos de conexión y desconexión exactamente para esos ids. Un miembro está en línea mientras tenga al menos una conexión autenticada: la primera conexión dispara `online`, cerrar la última dispara `offline`, y las pestañas intermedias no disparan nada, el mismo conteo que usan los canales de presencia.

## Actívalos

Activa **Watchlist events** en los ajustes de la app en la página [**Realtime → Apps**](https://bird.com/dashboard/w/realtime/apps), o establece `watchlist_events` a `true` en la app a través de la API de Realtime. Las conexiones toman el ajuste cuando se conectan, así que actívalo antes de publicar los clientes que dependen de él.

## Incluye la watchlist en la identidad firmada

La watchlist forma parte de `member_data`, la cadena JSON que tu endpoint de autenticación de miembros firma. Añade los ids junto a la identidad:

```json
{
  "member_id": "u_1",
  "member_info": { "name": "Ada" },
  "watchlist": ["u_2", "u_3"]
}
```

Como la lista está dentro de la identidad firmada, tu endpoint de autenticación decide a quién puede seguir un miembro: construye el array a partir de tus propios datos (sus contactos, su equipo) en lugar de aceptar uno que el cliente envíe, o cualquier miembro podrá seguir a cualquier otro. Una watchlist admite hasta 100 ids; una lista más larga se trunca a los primeros 100 y la conexión recibe el error `4302` indicando los ids que se aceptaron.

La lista se captura en el inicio de sesión y se mantiene durante toda la vida de la conexión. Para cambiarla, haz que tu endpoint firme la nueva lista: el cliente inicia sesión de nuevo automáticamente en cada reconexión, así que la siguiente conexión sigue la lista actualizada y recibe sus estados actuales.

## Escucha en el navegador

Bindea en `bird.member.watchlist`. El estado actual de toda la lista llega justo después del inicio de sesión, así que puedes pintar quién está en línea antes de que alguien cambie de estado:

```typescript
await bird.signin();

bird.member.watchlist.bind("online", (memberIds) => {
  console.log("online:", memberIds);
});
bird.member.watchlist.bind("offline", (memberIds) => {
  console.log("offline:", memberIds);
});
```

Cada evento incluye los ids de miembros a los que aplica. La entrega inicial tras el inicio de sesión cubre la lista completa, agrupada por estado; después, los eventos llegan cuando los miembros pasan entre cero y una conexión.

## ¿Watchlist o presencia?

Los canales de presencia responden a "who is in this room with me": todos se suscriben al mismo canal y ven la misma lista de miembros. Una watchlist responde a "are the people I care about online anywhere": cada miembro sigue su propia lista, y las personas observadas no necesitan hacer nada más allá de iniciar sesión. Una lista de contactos, un indicador de disponibilidad de agentes o un aviso de "your contact just came online" son trabajo de watchlist; un roster de sala compartida es presencia.

## Próximos pasos

- [Conexiones de miembros con terminación](/docs/guides/realtime/terminating-member-connections) cubre el inicio de sesión y el contrato de identidad en el que viaja la watchlist.
- [Canales de presencia](/docs/guides/realtime/presence-channels) para membresía de sala compartida en lugar de listas de seguimiento personales.
- [Enviar eventos a un miembro](/docs/guides/realtime/sending-events-to-a-member) es la otra superficie dirigida a miembros.

## Related resources

- [Realtime](/products/realtime) (product)
- [Build your first integration](/learn/paths/integration) (course)
- [Send your first realtime event](/docs/get-started/send-your-first-realtime-event) (docs)

[Get an implementation brief](/learn/workspace?topic=realtime)
