URL reference

Click-to-call room URLs

Build a link to room.html that joins a meeting, pre-fills a phone number to dial, pins a specific outbound SIP trunk, sets the display name, or starts with the camera off — without writing any code. Paste it into an email, an intranet button, a CRM record, an email signature, or a QR code.

The full parameter list

ParameterTypeExampleWhat it does
room string stefan-test Meeting room name / slug. Any visitor with the same room= value lands in the same meeting. Use a guessable slug for an open meeting; use an unguessable random slug (e.g. r-7a3f9c2e) for a private one-off call where the URL is the access token.
name string Stefan Display name shown to other participants. Skipping it makes the page ask for a name on join.
dial E.164 / ext %2B4915157610183 Phone number or PBX extension the bridge dials when the first browser participant arrives. URL-encode the leading + as %2B. Internal extensions like 610 work too.
trunk trunk Id tr_4194b9eab3de Optional. Pins the outbound dial to a specific SIP trunk. Without it the bridge picks the lowest-Priority trunk that can carry the call. Useful when one trunk has the right caller-ID, the right rate, or a regulatory pin for that destination.
cam off off Start with the camera disabled. Audio-only feel. Equivalent: nocam=1.
nocam 1 1 Synonym for cam=off.

The page always sits at /room.html. A URL pointing at the host root (/?room=…) is served by the marketing landing page and the parameters are silently ignored — always include /room.html in the path.

Common patterns

1) Two people in a meeting room

Both visit the same URL, no dialling.

https://phone.codeb.io/room.html?room=team-standup

2) Click-to-call a number

You join the room, the bridge phones the number, the phone joins as a participant on answer.

https://phone.codeb.io/room.html?room=callme-7a3f&dial=%2B35621223531

3) Click-to-call via a specific trunk

Same as above, but pin the dial to one outbound trunk by Id.

https://phone.codeb.io/room.html?room=stefan-test&dial=%2B4915157610183&trunk=tr_4194b9eab3de

4) Audio-only, name pre-set

Useful for phone-like buttons embedded in CRMs and mobile signatures.

https://phone.codeb.io/room.html?room=support&name=Customer&cam=off

5) Internal PBX extension

The bridge dials a registered SIP user instead of a PSTN number.

https://phone.codeb.io/room.html?room=reception&dial=610

6) Full one-shot link

Random room (URL is the access token), audio-only, name pre-set, dial through a pinned trunk.

https://phone.codeb.io/room.html?room=r-c0ff331e&name=Stefan&dial=%2B4915157610183&trunk=tr_4194b9eab3de&cam=off

Encoding notes

URL parameters follow standard application/x-www-form-urlencoded escaping rules. The two characters you have to watch for in click-to-call URLs:

LiteralEncodedWhy
+%2BIn query strings + means “space”. The dial number’s leading + must be %2B.
space%20 or +If name has a space (e.g. “John Doe”), use John%20Doe or John+Doe.

How the dial flows

When the page loads with a dial= parameter, the browser joins the room over WebSocket, then sends a single {type:"dial", number:…, trunk:…} message to the server. The server runs the dial through the FraudGuard layer (allowlist, blocklist, per-day caps, per-IP caps), hands it to the SIP bridge over an HMAC-signed local POST, and the bridge places the SIP call to your configured trunk. The phone answers, joins the room as a regular audio-only participant, and the audio mixer fans you in.

The dial is fired once per browser load. A reload or a second visitor joining the same room does not re-trigger it. If you need to call back, close the tab and click the link again.

Related

Related pages: API overview · signal.ashx REST · REST API reference · Virtual numbers.