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,
},
});import os
from bird import Bird
client = Bird(
api_key=os.environ["BIRD_API_KEY"],
realtime_key=os.environ["BIRD_REALTIME_KEY"],
realtime_secret=os.environ["BIRD_REALTIME_SECRET"],
)client, err := bird.NewClient(
option.WithAPIKey(os.Getenv("BIRD_API_KEY")),
option.WithRealtimeCredentials(os.Getenv("BIRD_REALTIME_KEY"), os.Getenv("BIRD_REALTIME_SECRET")),
)
if err != nil {
log.Fatal(err)
}use MessageBird\Bird;
use MessageBird\RealtimeOptions;
$bird = new Bird(
getenv('BIRD_API_KEY') ?: '',
realtime: new RealtimeOptions(
key: getenv('BIRD_REALTIME_KEY') ?: '',
secret: getenv('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);
}channels = client.realtime.channels.list(app_id, prefix="presence-")
for channel in channels.data:
print(channel.name)channels, err := client.Realtime.Channels.List(context.Background(), appID, bird.RealtimeChannelListParams{
Prefix: "presence-",
})
if err != nil {
log.Fatal(err)
}
for _, ch := range channels.Data {
fmt.Println(ch.Name)
}$channels = $bird->realtime->channels->list($appId, ['prefix' => 'presence-']);
foreach ($channels->getData() ?? [] as $channel) {
echo $channel->getName(), "\n";
}curl "https://us1.platform.bird.com/v1/realtime/apps/$APP_ID/channels?prefix=presence-" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "X-Realtime-Key: $BIRD_REALTIME_KEY" \
-H "X-Realtime-Secret: $BIRD_REALTIME_SECRET"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 workchannel = client.realtime.channels.get(app_id, "presence-lobby", include=["member_count"])
if not channel.occupied:
return # nobody is listening; skip the workchannel, err := client.Realtime.Channels.Get(context.Background(), appID, "presence-lobby", bird.RealtimeChannelGetParams{
Include: []bird.RealtimeChannelInclude{bird.RealtimeIncludeMemberCount},
})
if err != nil {
log.Fatal(err)
}
if !channel.Occupied {
return // nobody is listening; skip the work
}$channel = $bird->realtime->channels->get($appId, 'presence-lobby', ['include' => ['member_count']]);
if (!$channel->getOccupied()) {
return; // nobody is listening; skip the work
}curl "https://us1.platform.bird.com/v1/realtime/apps/$APP_ID/channels/presence-lobby?include=member_count" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "X-Realtime-Key: $BIRD_REALTIME_KEY" \
-H "X-Realtime-Secret: $BIRD_REALTIME_SECRET"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);
}presence = client.realtime.channels.members(app_id, "presence-lobby")
for member in presence.members:
print(member.member_id)members, err := client.Realtime.Channels.Members(context.Background(), appID, "presence-lobby")
if err != nil {
log.Fatal(err)
}
for _, m := range members.Members {
fmt.Println(m.MemberId)
}$presence = $bird->realtime->channels->members($appId, 'presence-lobby');
foreach ($presence->getMembers() ?? [] as $member) {
echo $member->getMemberId(), "\n";
}curl "https://us1.platform.bird.com/v1/realtime/apps/$APP_ID/channels/presence-lobby/members" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "X-Realtime-Key: $BIRD_REALTIME_KEY" \
-H "X-Realtime-Secret: $BIRD_REALTIME_SECRET"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
- Publikowanie zdarzeń opisuje publikowanie, grupowanie i skrót include.
- Kanały presence wyjaśnia członków, połączenia i member_info.
- Przegląd Realtime wyjaśnia aplikacje, klucze i miejsce wyświetlania zużycia.
Powiązane zasoby
Kontynuuj z dokumentacją, przewodnikami i przykładami dotyczącymi tego tematu. Zasoby są w języku angielskim.
Poznaj możliwościRealtimePodążaj ścieżką naukiBuild your first integrationPrzewodnik wdrożeniowySend your first realtime event
Wypróbuj ćwiczenie i uzyskaj brief wdrożeniowy