Eine Session beobachten, ohne Konto
Erzeuge einen anmeldefreien Beobachtungslink für eine laufende Session: standardmäßig nur lesend, bis zu eine Stunde gültig, mit dem Ticket im URL-Fragment.
Zuletzt aktualisiert:
Zwei Links, zwei Zielgruppen
Eine Session lässt sich auf zwei Arten beobachten. GET /v1/sessions/:id/live-view liefert einen Dashboard-Deep-Link: Wer ihn öffnet, meldet sich an, und ein Owner kann die Maus übernehmen. POST /v1/sessions/:id/watch-link liefert einen Beobachtungslink, der kein Konto braucht: eine Viewer-Seite, die die Control Plane ausliefert, gesteuert von einem Ticket im URL-Fragment. Das Fragment wird nie an einen Server gesendet, das Ticket taucht also in keinem Zugriffslog auf, und die Seite tauscht es gegen die sechzig Sekunden gültigen Socket-Tokens, die die Flotte tatsächlich prüft. Darum überlebt der Link eine abgebrochene Verbindung, was ein rohes Socket-Ticket nicht täte.
/v1/sessions/:id/watch-link
Erzeugt einen Beobachtungslink für eine Session, die dir gehört. Braucht eine konfigurierte öffentliche Basis-URL (`watch` in den Features von `GET /v1/me`).
Body
| Name | Typ | Beschreibung |
|---|---|---|
ttlSeconds
|
integer | Wie lange der Link den Viewer öffnet, 60 bis 3600. Standard 3600. |
allowTakeover
|
boolean | Standard `false`: Der Viewer kann zusehen und sonst nichts. `true` erlaubt dem Inhaber, die Schreib-Lease anzufordern, genau wie ein Owner im Dashboard. Das MCP-Tool setzt das nie. |
Antwort
| Name | Typ | Beschreibung |
|---|---|---|
url
|
string | `{base}/watch/{sessionId}#w=<ticket>`. Als Ganzes weitergeben; das Fragment ist der Berechtigungsnachweis. |
expiresAt
|
timestamp | Wann das Ticket den Viewer nicht mehr öffnet. Die Lebensdauer der Session selbst ist davon getrennt. |
readOnly
|
boolean | Was der Link erlaubt. |
Einen Link erzeugen
import { Browserberg } from '@browserberg/sdk';
const bb = new Browserberg({
apiKey: process.env.BROWSERBERG_API_KEY!,
baseUrl: 'https://browserberg.com',
});
await using session = await bb.sessions.create({ ttlSeconds: 600 });
// Read-only by default, valid an hour. The ticket travels in the URL fragment,
// so it never reaches a server log; hand the link to a person.
const link = await bb.sessions.watchLink(session.id, { ttlSeconds: 900 });
console.log('url:', link.url.replace(/#w=.*$/, '#w=<ticket>'));
console.log('readOnly:', link.readOnly);
console.log('expires:', link.expiresAt > new Date().toISOString() ? 'in the future' : 'already');
import os
from browserberg import Browserberg
bb = Browserberg(os.environ["BROWSERBERG_API_KEY"], base_url="https://browserberg.com")
with bb.sessions.create(ttl_seconds=600) as session:
link = bb.sessions.watch_link(session.id, ttl_seconds=900)
print("url:", link.url.split("#")[0] + "#w=<ticket>")
print("read_only:", link.read_only)
url: https://browserberg.com/watch/6jx-s0XFblsf4840RhsATQ#w=<ticket>
readOnly: true
expires: in the future
Achtung · Ein Link ist ein Berechtigungsnachweis
Wer die URL hat, kann die Session bis `expiresAt` beobachten und, wenn du die Übernahme erlaubt hast, steuern. Schick ihn der Person, die ihn braucht, über einen Kanal, dem du vertraust, und halte die Gültigkeit so kurz, wie die Übergabe es braucht.