Channel-Status abfragen
Drei serverseitige Abfragen listen belegte Channels auf, prüfen einen einzelnen Channel und listen die Mitglieder eines Presence-Channels. Authentifizieren Sie jede Anfrage mit Ihrem Bird-API-Key sowie dem Key und Secret der Realtime-App.
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') ?: '',
),
);Welche Channels sind belegt
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"Ein Channel erscheint in der Liste, solange mindestens eine Verbindung ihn abonniert hat. Channels werden nicht separat erstellt oder registriert, daher erscheinen leere Channels nicht. Verwenden Sie prefix, um das Ergebnis auf eine Familie wie presence- oder orders- einzuschränken.
Die Antwort ist nicht paginiert und gibt jeden belegten Channel in einem Live-Snapshot zurück. Siehe Realtime-Channels auflisten.
Einen einzelnen Channel prüfen
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"Ein unbekannter oder ungenutzter Name gibt 200 OK mit occupied: false zurück. Nutzen Sie dieses Ergebnis, um Arbeit zu überspringen, wenn keine Verbindung sie empfangen kann. Siehe Einen Realtime-Channel abrufen.
Zähler über include
include ist wiederholbar und akzeptiert genau zwei Werte:
- member_count ist die Anzahl der eindeutigen Mitglieder und funktioniert nur auf Presence-Channels.
- connection_count ist die Anzahl der Verbindungen, die den Channel abonniert haben, und erfordert die Verbindungszählung-Einstellung der App.
Jeder andere Wert gibt 400 Bad Request zurück. Die API gibt außerdem 400 Bad Request für member_count auf einem Nicht-Presence-Channel, eine Listenanfrage ohne Presence-Präfix oder connection_count zurück, wenn die Verbindungszählung deaktiviert ist.
Das Abfragen von Attributen zählt als eine zusätzliche Nachricht für die Nutzung. Lassen Sie sie weg, wenn occupied Ihre Frage beantwortet.
Ein Mitglied kann mehrere Verbindungen halten. Ein Raum mit drei Personen, die jeweils zwei Tabs geöffnet haben, meldet einen member_count von 3 und einen connection_count von 6. Presence-Channels erklärt den Unterschied.
Wer ist anwesend
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"Die Antwort enthält nur Mitglieder-IDs. member_info wird an abonnierte Clients geliefert und ist über diese REST-Operation nicht verfügbar. Verknüpfen Sie die IDs mit Ihren eigenen Datensätzen, um Namen oder Avatare darzustellen. Siehe Channel-Mitglieder auflisten.
Status lesen während Sie publizieren
Verwenden Sie beim Publizieren include, um die gleichen Zähler für jeden Ziel-Channel zum Zeitpunkt der Veröffentlichung zurückzugeben. Siehe Channel-Status beim Publizieren lesen.
Zeitpunktbezogenes Verhalten
Jede Antwort ist ein Zeitpunkt-Snapshot und kann sofort veralten. Verwenden Sie sie für einmalige Entscheidungen statt für Polling bei kontinuierlichem Status.
Für kontinuierlichen Status abonnieren Sie einen Endpoint bei den Realtime-Webhook-Gruppen. realtime.channel_existence meldet belegte und freigegebene Channels, realtime.presence meldet Mitgliederänderungen und realtime.connection_count meldet Änderungen der Verbindungsanzahl. Verwenden Sie Channel-Status-Abfragen, um Ihre gespeicherte Ansicht zu initialisieren oder abzugleichen.
Nächste Schritte
- Events publizieren behandelt das Publizieren, Batching und den include-Shortcut.
- Presence-Channels erklärt Mitglieder, Verbindungen und member_info.
- Realtime-Übersicht erklärt Apps, Keys und wo die Nutzung angezeigt wird.
Related resources
Continue with the documentation, guides and examples for this topic. Resources are in English.
Explore the capabilityRealtimeFollow the learning pathBuild your first integrationImplementation guideSend your first realtime event
Try the practice and get an implementation brief