# Common Issues

Quick diagnostics for Zoom CoBrowse SDK issues.

- Ensure SDK script/package is loaded.
- Verify role-specific JWT generation on server.
- Validate token expiry and clock skew.
- Confirm session PIN flow between customer and agent.

## Docs Links / 404s

**Symptom**: Official doc links you found are stale or return 404.

**Fix**:
- Prefer the curated references under `references/` (these are meant to stay stable even if external URLs drift).
- If you need working code, start from official sample repos referenced by the skill, then adapt to your stack.

## Confusing "Who Creates the Session?"

**Symptom**: You built an "agent creates session" endpoint, but the customer flow seems to actually start the share / generate the PIN.

**Fix**:
- Treat **customer start/share** as the action that creates the shareable context (PIN/session), then the **agent joins** using that PIN/session info.
- Keep your server responsibilities narrow: token minting, optional auditing, and routing; avoid inventing "session creation" semantics that the SDK already owns.

## Two PIN Values (Most Common Integration Mistake)

**Symptom**: UI shows one PIN from backend/session record and another PIN from SDK event, agent gets `Pin not found` or `Cobrowse code not found`.

**Fix**:
- Treat `session.on("pincode_updated")` as the **authoritative support PIN** for agent entry.
- Display exactly one primary PIN in UI (label it clearly as "Support PIN").
- Do not surface provisional/debug PINs to users.
- When opening agent page with `?pin=...`, prefer freshly generated links and avoid stale bookmarks.

## Agent Desk Error `30308` (Pincode is not found)

**Symptom**: Zoom-hosted agent desk shows:
- `Cobrowse code not found`
- error code `30308`

**Fix**:
- Ensure customer session is active and not expired before agent joins.
- Use the latest PIN emitted by `pincode_updated`.
- If your app restarts or uses in-memory state, persist session/PIN mapping or avoid strict local PIN gating for desk launch.
- Have agent re-enter a fresh PIN from a newly started customer session.

## Plain HTML / Express Integration Friction

**Symptom**: Quickstarts assume Vite/modern build pipeline; your plain HTML/Express adaptation breaks.

**Fix**:
- Load the SDK exactly as the official snippet expects (script order matters).
- Avoid bundler-only patterns in plain HTML (ESM imports, `import.meta`, etc.) unless you add a bundler.

See:
- [Get Started](../get-started.md)
- [Get Started (official)](../references/get-started-official.md)
