Conference Calls
Connect several callers together in the same audio room with the conference@v1 action: PIN codes, prompts, hold music and automatic leave.
Bring several callers together in the same audio room with a single action — team bridges, customer calls with multiple stakeholders, on-call hotlines, or any flow where people dial in to talk together.
⚙️ How It Works
- A participant reaches a Callr Actions scenario that runs
conference@v1with aroomname. A participant can be:- someone who calls one of your numbers (Inbound Call), or
- someone you call from the scenario (Outbound Call) to make them join the room.
- If the room does not exist yet, it is created and the caller hears the
waitingprompt (if any) until someone else joins. - Every caller of your account who runs
conference@v1with the same room is connected to the others. - The action blocks until the caller leaves the room, then the next action of the scenario runs. The call is not hung up.
A caller leaves the room when they:
- press
*on their keypad, - become the last participant and
autoLeaveis enabled, - fail the PIN code on every attempt (or don't enter it in time),
- hang up.
Rooms
- A room name is 1 to 32 letters or digits, not case-sensitive:
Salesandsalesare the same room.- Rooms are private to your account. They are separate from real-time app rooms: a real-time call and a
conference@v1call never meet.- Quote an all-digit room name in YAML (
room: '1234').
🚀 Basic Conference
Every caller of this number joins the sales room:
description: Conference room for the sales team
branches:
inbound-call:
actions:
- action: conference@v1
params:
room: sales
result: $conference
- action: hangup@v1📞 Call Participants Into the Room
Rooms are not limited to inbound callers: you can also call someone and make them join the room. Inbound and outbound participants who use the same room are connected together.
Start the scenario from the REST API (api-initiated branch), dial the participant with dial@v2, and run conference@v1 in the branch named by answerOnBranch. That branch runs on the called participant's leg once they answer.
description: Call a participant and make them join a conference room
variables:
$participant: "+33639980041" # can be passed when starting the scenario
$room: sales
branches:
api-initiated:
actions:
- action: dial@v2
params:
callerId: "+33199001234" # a number or approved caller ID of your account
targets:
- number: ${{ $participant }}
timeout: 30
answerOnBranch: join-room
result: $dial
join-room:
actions:
- action: conference@v1
params:
room: ${{ $room }}
welcome:
tts:
text: You are joining the conference.
result: $conference
- action: hangup@v1
Start the scenario once per participant to call several people into the same room, and mix them with inbound callers who dial one of your numbers. See Broadcast Calls to trigger a scenario from the API.
🔐 PIN-Protected Room with Prompts
Add a welcome message, hold music while the caller is alone, and a PIN code. The caller types the PIN followed by #.
description: PIN-protected conference room
branches:
inbound-call:
actions:
- action: conference@v1
params:
room: board
welcome:
tts:
text: Welcome to the board conference.
waiting:
audioFile:
sid: fdsanjfd # played in a loop while the caller is alone
pin:
code: '4321' # quote it: 1 to 10 digits, leading zeros are kept
maxTries: 3
timeout: 10
prompt:
tts:
text: Please enter your PIN code, followed by the pound key.
error:
tts:
text: Wrong PIN code.
valid:
tts:
text: Thank you. You are now joining the conference.
userJoin:
tts:
text: A participant has joined.
userLeave:
tts:
text: A participant has left.
result: $conference
- if: '!$conference.ok'
action: play@v3
params:
tts:
text: Sorry, we could not connect you to the conference. Goodbye.
- action: hangup@v1
The call is not hung up after a failed PINWhen the PIN is wrong on every attempt (or not entered in time),
conference@v1ends and the next action runs. Check$conference.okto tell the caller what happened, then hang up.
userJoinanduserLeaveare taken from the caller who opens the room. Use the same values for every caller of a given room.
🚪 Leaving Automatically
With autoLeave, the caller leaves the room automatically when they become the last participant (when someone else leaves — not while waiting for the first participant). An optional announce prompt is played before leaving.
- action: conference@v1
params:
room: support
autoLeave:
enabled: true
announce:
tts:
text: Everyone else has left the conference. Goodbye.
result: $conference
- action: hangup@v1📊 Result
Store the result with result: $conference to know how and when the caller left the room:
result:
ok: true # true when the caller entered the room
status: left # left | lastParticipant | pinError | pinTimeout | hangup | failed
duration: 125 # seconds in the room, after the welcome and the PIN (0 if never entered)| Status | Meaning |
|---|---|
left | The caller pressed *. |
lastParticipant | The caller left automatically (autoLeave). |
pinError | The PIN was wrong on every attempt. |
pinTimeout | No PIN was entered in time. |
hangup | The caller hung up. |
failed | The room could not be joined (for example, it is full) or ended unexpectedly. |
📚 Parameters
| Parameter | Type | Description |
|---|---|---|
room | string | Required. Room name: 1 to 32 letters or digits, not case-sensitive. |
welcome | audio source | Played to the caller before entering the room (and before the PIN prompt). |
waiting | audio source | Played in a loop while the caller is alone in the room. |
pin.code | string | Required if pin is set. PIN code, 1 to 10 digits, followed by #. Quote it in YAML. |
pin.prompt | audio source | Played at each attempt to ask for the PIN code. |
pin.error | audio source | Played after a wrong PIN code. |
pin.valid | audio source | Played after the right PIN code, before entering the room. |
pin.maxTries | integer | Number of attempts, 1 to 10. Default: 3. |
pin.timeout | integer | Seconds to enter the PIN code at each attempt, 1 to 30. Default: 10. |
userJoin | audio source | Played to the room when a participant joins. |
userLeave | audio source | Played to the room when a participant leaves. |
autoLeave.enabled | boolean | Required if autoLeave is set. Leave automatically when the caller becomes the last participant. Default: false. |
autoLeave.announce | audio source | Played to the caller before leaving the room automatically. |
An audio source is either a text-to-speech prompt or an audio file of your library:
# Text-to-speech (optional voice or language)
welcome:
tts:
text: Welcome
language: en-US
# Audio file of your library (8-character SID)
waiting:
audioFile:
sid: fdsanjfdNo prompt is played by default. Text-to-speech prompts are billed every time the action runs, like play@v3; audio file prompts are free. List your audio file SIDs with GET /v2.0/audio-files.
💡 Ideas
- Dynamic rooms: compute the room from a variable or a
fetch@v3response (for example, a meeting ID typed withgather@v4). - Analytics: send
$conferenceto your backend withfetch@v3in thehangupbranch.
Updated about 1 hour ago
