# Quickstart — guest [#quickstart--guest] > Pergunta: "eu sou o guest, como escaneio e entro?" **Pré-requisito no topo, em destaque: sessão autenticada.** Não existe entrada sem login — não há auto-autenticação por QR. `joinRoom` exige `credential`, exatamente como `createHost` exige do lado do host. Nenhum snippet desta página aparece sem `credential` preenchida — copiar um trecho sem isso é copiar um caminho que não existe. ## Passo a passo [#passo-a-passo] ```ts import { joinRoom, parseJoinTarget } from '@sofya-sdk/event-room'; // O alvo vem do QR escaneado (uma URL completa) ou de um código digitado à mão. // Variante 1 — QR escaneado: a URL inteira já carrega o alvo. const scannedUrl = 'https://guest.example.com/join?v=1&roomId=abc123&accessMode=approval_and_code&joinCode=XYZ9'; const targetFromQr = parseJoinTarget(scannedUrl); // Variante 2 — código digitado: monte o mesmo formato à mão. const targetFromTypedCode = { roomId: 'abc123', accessMode: 'approval_and_code' as const, joinCode: 'XYZ9', }; const guest = await joinRoom({ url: 'ws://localhost:8080/ws', credential: 'dev-guest-credential', // sessão autenticada do guest — nunca vazio target: targetFromQr, // ou targetFromTypedCode displayName: 'Guest do celular', // obrigatório quando accessMode exige aprovação role: 'mic', }); guest.sendEvent('ping', { at: Date.now() }); // exemplo — troque por um evento do seu contrato (ver eventos.md) guest.getStatus(); // RoomSessionStatus — ver maquina-de-estados.md // Ao sair: guest.close(); ``` ## Próximo passo [#próximo-passo] [receita-microfone.md](/pt/docs/event-room/latest/markdown/receita-microfone) — o fluxo completo, incluindo o passo de login antes de escanear.