Sprache
Zrzur-Sprache läuft auf LiveKit. Die API gibt Tickets aus; der Ton selbst läuft über einen LiveKit-Client.
Was funktioniert
| Fähigkeit | Status |
|---|---|
Ein Ticket für einen Sprachkanal holen (POST /channels/{target}/join_call) | Unterstützt, live mit einem Bot-Token geprüft |
| Mit dem Ticket zu LiveKit verbinden und Ton senden | Unterstützt. Durchgängig mit @livekit/rtc-node geprüft: Ein zweiter Teilnehmer empfing und maß den Ton des Bots |
| Ton anderer Teilnehmer empfangen | Möglich mit einem LiveKit-Client; braucht Listen. Nicht von unseren Tests abgedeckt |
Mitglieder verschieben, stummschalten, taub stellen (PATCH /servers/{server_id}/members/{member_id}) | Unterstützt mit Move Members, Mute Members, Deafen Members |
| Video und Bildschirm von einem Bot | Nicht getestet; Tickets folgen der Berechtigung Video |
force_disconnect beim Beitreten | Nicht für Bots (IsBot) |
Beitreten
Hole ein Ticket mit einfachem HTTP:
curl -X POST "https://api.zrzur.com/channels/CHANNEL_ID/join_call" \
-H "x-bot-token: YOUR_BOT_TOKEN" \
-H "content-type: application/json" \
-d '{}'
# answer: { "token": "LIVEKIT_TOKEN", "url": "wss://voice.zrzur.com" }Verbinde dich dann mit einem LiveKit-Client. Mit dem SDK (noch nicht veröffentlicht) und @livekit/rtc-node:
const ticket = await bot.voice.join(channelId); // { url, token, node }
const room = new Room(); // from @livekit/rtc-node
await room.connect(ticket.url, ticket.token, { autoSubscribe: false });Erstelle dann eine AudioSource mit 48 kHz, packe sie in einen LocalAudioTrack, sende ihn mit room.localParticipant.publishTrack(...) und füttere ihn mit 10-ms-Frames. Andere Mitglieder sehen VoiceChannelJoin, wenn der Bot im Raum ist.
Der Bot braucht Connect zum Beitreten und Speak, um gehört zu werden. GET / listet die Sprachknoten unter features.livekit.nodes.
Das Sprach-Tutorial hat einen vollständigen Befehl /join.
Referenz
PUT /channels/{target}/end_ring/{target_user}
Stop Ring. Stops ringing a specific user in a dm call. You must be in the call to use this endpoint, returns NotConnected otherwise. Only valid in DM/Group channels, will return NoEffect in servers. Returns NotFound if the user is not in the dm/group channel
Ratenlimit: channels, 15 / 10 s
POST /channels/{target}/join_call
Join Call. Asks the voice server for a token to join the call.
Berechtigungen: Channel:Connect, Channel:ManageChannel · Ratenlimit: channels, 15 / 10 s
POST /channels/{target}/soundboard/{sound_id}
Play Sound. Play a sound of this server into the voice channel you are in. Needs Use Soundboard and Speak there, and not being server-muted; on a stage only speakers play sounds. Limited to a few sounds every ten seconds.
Berechtigungen: Channel:UseSoundboard, Channel:Speak · Ratenlimit: channels, 15 / 10 s
DELETE /channels/{target}/stage
End Stage. Closes the stage: everyone leaves the call and the topic, speakers and raised hands are cleared. Needs Mute Members and Move Members.
Berechtigungen: Channel:MuteMembers, Channel:MoveMembers · Ratenlimit: channels, 15 / 10 s
GET /channels/{target}/stage
Fetch Stage. Topic, speakers and raised hands of a stage channel.
Ratenlimit: channels, 15 / 10 s
PATCH /channels/{target}/stage
Edit Stage. Set or clear the topic of a stage (needs Mute Members).
Berechtigungen: Channel:MuteMembers · Ratenlimit: channels, 15 / 10 s
PUT /channels/{target}/stage/hand
Raise Hand. Ask to speak on a stage you are listening to (once every 20 seconds).
Berechtigungen: Channel:Connect · Ratenlimit: channels, 15 / 10 s
DELETE /channels/{target}/stage/hands/{member}
Lower Hand. Lower your own raised hand, or (with Mute Members) someone else's.
Berechtigungen: Channel:MuteMembers · Ratenlimit: channels, 15 / 10 s
DELETE /channels/{target}/stage/speakers/{member}
Move To Audience. Stop speaking yourself, or (with Mute Members and a higher rank) send a speaker back to the listeners. When the voice server can't be told, the speaker is taken out of the call rather than left able to talk.
Berechtigungen: Channel:MuteMembers · Ratenlimit: channels, 15 / 10 s
PUT /channels/{target}/stage/speakers/{member}
Invite To Speak. Give someone in the stage the floor (needs Mute Members, and a higher rank than theirs). Their raised hand goes down.
Berechtigungen: Channel:MuteMembers · Ratenlimit: channels, 15 / 10 s
PUT /channels/{target}/stream_preview
Send Stream Preview. Replace the preview of your screen share in this voice channel (a JPEG or WebP of at most 20 KB, base64). Only while you share your screen there; a new one is taken at most every 25 seconds (NoEffect before that).
Ratenlimit: channels, 15 / 10 s
GET /channels/{target}/stream_preview/{member}
Fetch Stream Preview. The latest still of someone's screen share in a voice channel you can see.
Berechtigungen: Channel:ViewChannel, Channel:Listen · Ratenlimit: channels, 15 / 10 s