Meeting rooms and SIP terminals: the MCU and Poly Trio
Applies to: SimpleTwo 0.9.271, MCU 0.7.0 · Checked: 24.09.2026
The mcu role brings meeting-room hardware that speaks SIP into SimpleTwo meetings: Poly Trio,
Poly and Cisco conference phones and video terminals. To a meeting a room is a participant like a
person: it has a name, it has a tile, it is heard in the recording.
1. How it works
- A meeting room is an account with a calendar and an internal number (2001, say). Numbers come from SimpleTwo's numbering plan; see section 3.
- A booking is the room taking part in a meeting. While a room is booked into a meeting with a conference, its number leads into that meeting.
- The device dials a room's number — its own or another's — at the MCU's address:
2001@<MCU address>. The MCU recognises the device by the address the call came from and decides the door:
| Who dials | What happens |
|---|---|
| the room itself, or another room booked into the same meeting | straight in |
| any other registered room | the lobby: connected, hearing nothing and heard by nobody until a host admits it |
| the room behind the number has no meeting now | refused, 404 No meeting in this room now |
| a person's number | refused, 404 Calling people is not available yet — calling people from a terminal comes later |
The meeting and the door are decided by messaging against a snapshot of numbers and bookings the
coordinator sends every minute. While the coordinator is down, rooms keep joining on the last
snapshot. The room credential is signed by messaging too: the MCU holds no media-server key.
2. What has to be ready
- The
mcurole is installed on a host (Servers & deploys → Add a host, rolemcu). It needs the sameredisbus as the SFU pool and a deployedmessaging. Ports are in the port reference: 5060 UDP and TCP, 10000–20000 UDP and TCP, 5061 TCP when a certificate exists. - The host's public address is set on the role's card if the host is behind NAT. It goes into the SDP; a private one there gives a call that connects and carries audio one way.
- The room exists — Users → Rooms & devices → New room. It gets its number by itself.
- Meetings are booked with the room and with a conference. Without a booking the room's number is refused, and rightly: a terminal cannot open a meeting that does not exist.
3. Internal numbers
Every person and every meeting room has an internal number: the lowest free one in 2000–7999, given when the account is created. Guests and bots get none.
- The number is in the Number column of the users and rooms tables and on the contact card in the clients; the address book finds people by it.
- An administrator may change it in the user dialog. The server checks it has 3–6 digits, does not start with 8 (service numbers), 9 (outside line) or 0 (operator), and is nobody else's. It cannot be cleared: a person without a number cannot be dialled.
- The number is ours alone. It will become an address in federation, so it belongs to SimpleTwo's numbering plan and not to a field in somebody else's directory: nothing reads it from AD. Numbers that already live in AD are copied once, by the migration utility into identity.
4. The device registry: who may call
By default the MCU admits nobody. A device not in the registry gets
403 Not a registered meeting room. Devices are added where the room is:
Users → Rooms & devices → ⋯ on the room → SIP endpoints
| Field | What to enter |
|---|---|
| Label | which device it is, e.g. "Trio by the window" |
| Id | a short identifier; per-device settings are keyed by it (section 6) |
| Addresses | the IP address the device calls from. Reserve it in DHCP: a changed address is a device that stops getting in |
| SIP user | only when several devices call through one SBC and arrive from one address; they are then told apart by the user in From |
A device joins under its room's account: the tile, the recording and the transcript say "Room Ladoga", not the model name. A disabled device stays in the registry and its calls are refused.
5. The keypad and spoken prompts
Keys travel as RFC 2833 telephone-events — the default on Poly and Cisco.
| Key | Action | What the room hears |
|---|---|---|
*1 | its own microphone off/on | "Microphone off" / "Microphone on" |
*2 | raise/lower its hand — clients draw it like a person's | "Hand raised" / "Hand lowered" |
*3 | pin whoever is on screen, or unpin | "Picture pinned" / "Following the speaker" |
*0 | help: the keys actually bound on this device are read out | the key list |
## | leave the meeting | — |
At the lobby door the room hears "Please wait…" every 20 seconds, and "You are now in the meeting"
once admitted. The language is the prompts setting: en or off. Russian prompts arrive with a
voice of our own: the ready Russian synthesiser voices rest on research-licensed data.
A room governs only itself — its microphone, its hand, its picture. Muting somebody else from a wall-mounted device is not possible.
6. Picture, sound and keys: the MCU settings
Telephony → MCU: mixing & keypad (SIP endpoints) — a form the MCU builds from its own description of its settings. Set a default for every device and an override for one (by its Id from the registry). An empty field inherits the level above; the inherited value is shown.
| Setting | What it sets |
|---|---|
| Picture | the speaker or a grid (the grid arrives with transcoding) |
| Hold the picture at least, ms | how long the speaker keeps the screen — so a cough does not take it mid-sentence |
| Stay on the last speaker, ms | how long the picture stays once everybody is quiet |
| Voices mixed | how many voices to mix (one — the loudest — is forwarded today) |
| Picture height, frames per second | a ceiling for the device |
| Presentation channel | whether to offer the second stream (BFCP) |
| May pin a participant / switch layout | what the device may do from its own keypad |
| Spoken prompts | en or off |
| Keypad | rebind or remove keys |
A value out of range is not refused but moved to the nearest one allowed, and the MCU says so. Further down the same tab, Calls right now shows every device on a call, the number it dialled, how it came in ("straight in", "waiting in the lobby", "admitted from the lobby"), whom it shows, who holds the presentation floor, and what the call does differently from the settings.
7. Setting up a Poly Trio 8800, step by step
The Trio 8800 is a conference phone. With a Poly Trio Visual+ (or VisualPro) it becomes a video terminal: camera and screen in the room, presentation from a laptop. Without the Visual+ the room takes part by voice.
Configure it in the device's web interface (administrator sign-in) or with a configuration file from a provisioning server. The parameter names below are from the Poly Trio administrator guide (UC Software 5.9 and the Parameter Reference 9.x); if your firmware names something differently, check its guide.
Step 1. Address and line
- Give the device a fixed IP address (a DHCP reservation) — it is how the MCU recognises the room.
- Set up a line without registration: the MCU does not accept
REGISTER, it accepts calls from devices in the registry.
| Parameter | Value |
|---|---|
reg.1.address | the room's login, e.g. ladoga |
reg.1.displayName | the room's name, e.g. Ladoga |
reg.1.server.1.address | the MCU host's address |
reg.1.server.1.register | 0 — do not register (how Poly describes an unregistered line) |
In the device's web interface these are the settings of the first line: address, display name, server = the MCU address, registration off.
Step 2. Codecs — the main thing
The MCU forwards media without transcoding today, so the device has to speak the meeting's
codecs: Opus for audio and H.264 for video. G.711 without Opus is refused with 488 and the
reason in the text. Transcoding is the next stage.
In the Trio's codec priority table Opus is 0, meaning it is not offered. Turn it on and put it
first — in the codec priority table of the web interface's audio settings, or when provisioning,
with the Opus priority parameter in the voice.codecPref.* group. Check the exact parameter name
in your firmware's configuration export: the Poly reference does not list it. Poly warns that Opus
is incompatible with G.729 and iLBC — with those first, Opus is not published.
| Parameter | Value |
|---|---|
the Opus priority (voice.codecPref.*) | 1 |
voice.codecPref.G729_AB | 0 — so it does not suppress Opus |
video.enable | 1 (the default) — with a Visual+ |
video.codecPref.H264 | on (the default) |
Step 3. Keys and presentation
Poly's defaults are right; nothing needs changing. Only check they have not been overridden:
| Parameter | Value | Why |
|---|---|---|
tone.dtmf.rfc2833Control | 1 (the default) | keys go as telephone-events |
tone.dtmf.viaRtp | 1 (the default) | in the media stream, not in signalling |
reg.1.content.bfcp.enabled | 1 (the default) | BFCP presentation on this line |
content.bfcp.transport | UDP (the default) | either works; TCP needs agent 0.5.76+ on the MCU host — before it the TCP presentation port was closed by the host firewall |
Step 4. A "Join the meeting" button
Add a favourite (Contacts/Favorites) with the room's own number. Joining is then one press: the device dials its own number and lands in the meeting the room is booked into now.
Step 5. Registering it in SimpleTwo
In the console: Users → Rooms & devices → ⋯ → SIP endpoints — label, Id, the device's IP address from step 1.
Checking
- Book the room into a meeting with a conference in the next half hour.
- Dial the room's number on the Trio.
- In the console, Telephony → Calls right now shows a row: the number dialled, "straight in", whom it shows.
- Press
*1— the room hears "Microphone off", and the clients draw its microphone crossed out.
8. When it does not work
The MCU writes the reason on the response's status line — it is on the device's screen and in its call log.
| Response | Cause | What to do |
|---|---|---|
403 Not a registered meeting room | the address the device calls from is not in the registry | check the IP in the registry (section 4); behind NAT or an SBC — the address the MCU sees |
404 No meeting in this room now | the room behind the number has no meeting right now | book the room into a meeting with a conference |
404 Unknown number | the number is nobody's | check it in the Number column |
488 … | codecs did not match; the text says what was missing | put Opus first (step 2); H.264 for video |
503 Numbering plan not received yet | messaging has not received the number snapshot yet | wait a minute; if it persists, the coordinator cannot reach messaging |
503 MCU not authorised by messaging | the bridge key did not match | the host gets the right key with the agent's next desired state; if it persists, check the agent version |
| connected, but silence | the device is in the lobby | a host admits the room; Calls right now shows it "waiting in the lobby" |
| audio one way | a private address went into the SDP | set the host's public address on the role's card |
| not everybody is shown | the participant publishes VP8 and forwarding carries only H.264 | transcoding comes at the next stage; Calls right now lists whom it cannot show |
Next
- Calls and conferences — the media server, the lobby, recording
- Telephony: numbering and routing — the dial plan
- Ports — what to open on the
mcuhost