Sign inGet started

Odpytywanie stanu kanałów

Trzy odczyty po stronie serwera pozwalają wylistować zajęte kanały, sprawdzić jeden kanał i wyświetlić członków kanału presence. Uwierzytelniaj każde żądanie kluczem Bird API oraz kluczem i sekretem aplikacji Realtime.
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({
  apiKey: process.env.BIRD_API_KEY,
  realtime: {
    key: process.env.BIRD_REALTIME_KEY,
    secret: process.env.BIRD_REALTIME_SECRET,
  },
});

Które kanały są zajęte

const { data } = await bird.realtime.channels.list(appId, { prefix: "presence-" });

for (const channel of data) {
  console.log(channel.name);
}
Kanał pojawia się na liście, dopóki co najmniej jedno połączenie jest subskrybowane. Kanały nie są tworzone ani rejestrowane osobno, więc puste kanały nie pojawiają się na liście. Użyj prefix, aby ograniczyć wynik do rodziny, takiej jak presence- lub orders-.
Odpowiedź nie jest paginowana i zwraca wszystkie zajęte kanały w jednej migawce na żywo. Zobacz Listowanie kanałów Realtime.

Sprawdzanie jednego kanału

const channel = await bird.realtime.channels.get(appId, "presence-lobby", {
  include: ["member_count"],
});

if (!channel.occupied) return; // nobody is listening; skip the work
Nieznana lub nieużywana nazwa zwraca 200 OK z occupied: false. Wykorzystaj ten wynik, aby pominąć pracę, gdy żadne połączenie nie może go odebrać. Zobacz Pobieranie kanału Realtime.

Liczniki, przez include

include jest powtarzalny i przyjmuje dokładnie dwie wartości:
  • member_count to liczba unikalnych członków i działa tylko na kanałach presence.
  • connection_count to liczba połączeń subskrybujących kanał i wymaga włączonego ustawienia zliczania połączeń w aplikacji.
Każda inna wartość zwraca 400 Bad Request. API zwraca również 400 Bad Request dla member_count na kanale innym niż presence, żądania listowania bez prefiksu presence lub connection_count, gdy zliczanie połączeń jest wyłączone.
Żądanie atrybutów liczy się jako jedna dodatkowa wiadomość w ramach zużycia. Pomiń je, gdy occupied odpowiada na Twoje pytanie.
Jeden członek może mieć kilka połączeń. Pokój z trzema osobami, z których każda ma otwarte dwie karty, raportuje member_count równe 3 i connection_count równe 6. Kanały presence wyjaśnia tę różnicę.

Kto jest obecny

const { members } = await bird.realtime.channels.members(appId, "presence-lobby");

for (const member of members) {
  console.log(member.member_id);
}
Odpowiedź zawiera wyłącznie identyfikatory członków. member_info jest dostarczany do subskrybujących klientów i nie jest dostępny przez tę operację REST. Połącz identyfikatory z własnymi rekordami, aby wyświetlić imiona lub awatary. Zobacz Listowanie członków kanału.

Odczyt stanu podczas publikowania

Podczas publikowania użyj include, aby zwrócić te same liczniki dla każdego docelowego kanału w momencie publikacji. Zobacz Odczyt stanu kanału podczas publikowania.

Zachowanie migawkowe

Każda odpowiedź jest migawką z danej chwili i może natychmiast stać się nieaktualna. Używaj jej do jednorazowych decyzji, a nie do odpytywania w celu śledzenia ciągłego stanu.
Aby śledzić ciągły stan, zasubskrybuj endpoint do grup webhooków Realtime. realtime.channel_existence raportuje zajęcie i opuszczenie kanałów, realtime.presence raportuje zmiany członków, a realtime.connection_count raportuje zmiany liczby połączeń. Używaj odczytów stanu kanałów do inicjalizacji lub uzgadniania przechowywanego widoku.

Następne kroki

Powiązane zasoby

Kontynuuj z dokumentacją, przewodnikami i przykładami dotyczącymi tego tematu. Zasoby są w języku angielskim.

Wypróbuj ćwiczenie i uzyskaj brief wdrożeniowy