# Événements de watchlist

Un membre qui se connecte peut désigner les membres qu'il souhaite suivre, et la connexion est notifiée lorsque l'un d'eux passe en ligne ou hors ligne. C'est toute la fonctionnalité : pas de canal par relation, pas de polling, une seule liste.

Les événements de watchlist reposent sur la [connexion du membre](/docs/guides/realtime/terminating-member-connections). L'identité que votre backend signe lors de la connexion peut contenir un tableau `watchlist` d'identifiants de membres ; lorsque le paramètre `watchlist_events` de l'application est activé, la connexion reçoit des événements en ligne et hors ligne pour exactement ces identifiants. Un membre est en ligne tant qu'il possède au moins une connexion authentifiée : la première connexion déclenche `online`, la fermeture de la dernière déclenche `offline`, et les onglets intermédiaires ne déclenchent rien, selon le même comptage qu'utilisent les canaux de présence.

## Activer la fonctionnalité

Activez **Watchlist events** dans les paramètres de l'application sur la page [**Realtime → Apps**](https://bird.com/dashboard/w/realtime/apps), ou définissez `watchlist_events` à `true` sur l'application via l'API Realtime. Les connexions récupèrent le paramètre au moment de la connexion : activez-le avant de livrer les clients qui en dépendent.

## Placer la watchlist dans l'identité signée

La watchlist fait partie de `member_data`, la chaîne JSON que votre endpoint d'authentification membre signe. Ajoutez les identifiants à côté de l'identité :

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

Comme la liste se trouve dans l'identité signée, votre endpoint d'authentification décide qui un membre peut suivre : construisez le tableau à partir de vos propres données (ses contacts, son équipe) plutôt que d'accepter celui envoyé par le client, sinon n'importe quel membre peut en suivre un autre. Une watchlist contient jusqu'à 100 identifiants ; une liste plus longue est tronquée aux 100 premiers et la connexion reçoit l'erreur `4302` indiquant les identifiants acceptés.

La liste est capturée à la connexion et reste valable pendant toute la durée de vie de la connexion. Pour la modifier, faites signer la nouvelle liste par votre endpoint : le client se reconnecte automatiquement à chaque reconnexion, donc la connexion suivante suit la liste mise à jour et reçoit ses statuts actuels.

## Écouter dans le navigateur

Bindez sur `bird.member.watchlist`. Le statut actuel de toute la liste arrive juste après la connexion, ce qui vous permet d'afficher qui est en ligne avant tout changement d'état :

```typescript
await bird.signin();

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

Chaque événement contient les identifiants de membres concernés. La livraison initiale après la connexion couvre la liste complète, regroupée par statut ; ensuite, les événements arrivent lorsque des membres passent entre zéro et une connexion.

## Watchlist ou présence ?

Les canaux de présence répondent à "who is in this room with me" : tout le monde s'abonne au même canal et voit la même liste de membres. Une watchlist répond à "are the people I care about online anywhere" : chaque membre suit sa propre liste, et les personnes suivies n'ont rien à faire à part se connecter. Une liste de contacts, un indicateur de disponibilité d'agent ou une notification "your contact just came online" relèvent de la watchlist ; un roster de salon partagé relève de la présence.

## Étapes suivantes

- [Fermer les connexions d'un membre](/docs/guides/realtime/terminating-member-connections) couvre la connexion et le contrat d'identité dans lequel s'inscrit la watchlist.
- [Canaux de présence](/docs/guides/realtime/presence-channels) pour l'appartenance à un salon partagé plutôt que des listes de suivi personnelles.
- [Envoyer des événements à un membre](/docs/guides/realtime/sending-events-to-a-member) est l'autre surface adressée au membre.

## 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)
