Custom TwiML Attributes
Overview
Hotline uses FreeSWITCH to process TwiML. While it supports most standard Twilio TwiML verbs and attributes, the system also uses several custom attributes that extend the standard spec. These attributes enable features like conference moderator controls, mute detection, and interactive audio playback controls.
This document lists all TwiML attributes that are not part of the standard Twilio TwiML specification.
It is a reference for people writing their own TwiML through a Custom code extension. The Conference form in the admin panel does not offer most of these.
What the platform itself emits
When a caller reaches a Conference you built in the admin panel, the TwiML the platform generates only ever contains these attributes:
pin, moderatorPin, muted, beep, startConferenceOnEnter, endConferenceOnExit, maxParticipants, maxMembers, record, recordingStatusCallback, recordingStatusCallbackEvent, waitUrl, isModerator, statusCallback and statusCallbackEvent="start end".
Everything else on this page is accepted by the engine but has to come from TwiML you write yourself. In particular, custom key maps (callerControls, moderatorControls), the custom sound files, muteDetect, announceCount, terminateOnSilence and endconfGraceTime are not settable from the Conference form.
Conference Custom Attributes
These attributes are used on the <Conference> element inside <Dial>:
Access Control
| Attribute | Type | Description |
|---|---|---|
moderatorPin |
string | A separate PIN for moderators. Callers entering this PIN join with moderator privileges (lock/unlock, end conference, etc.). Standard Twilio only supports a single pin. |
isModerator |
"true" |
Join this participant as a moderator without asking for a PIN. The platform emits it for callers matched by the Conference's Moderator Labels. |
Participant Controls
| Attribute | Type | Description |
|---|---|---|
callerControls |
string | Custom DTMF key mappings for regular participants. Format: "digit:action,digit:action". |
moderatorControls |
string | Custom DTMF key mappings for moderators. Same format as callerControls. |
unmute |
string | Controls whether participants can unmute themselves. "allow" (default) lets them toggle mute. "notAllow" removes the mute key. |
Detection & Monitoring
| Attribute | Type | Description |
|---|---|---|
muteDetect |
"true" |
Plays an alert sound when a muted participant tries to talk. |
announceCount |
number | Announce participant count when this many members are present. |
terminateOnSilence |
number | Auto-end conference after this many seconds of silence. |
endconfGraceTime |
number | Seconds to wait before ending after the last moderator leaves. |
Custom Sound Files
These attributes accept a URL to an audio file. If not set, FreeSWITCH uses default sounds or TTS fallback.
| Attribute | When Played |
|---|---|
pinSound |
Prompts the caller to enter PIN |
badPinSound |
After entering wrong PIN |
mutedSound |
When participant is muted |
unmutedSound |
When participant is unmuted |
aloneSound |
When participant is the only one in the conference |
lockedSound |
When conference is locked |
maxMembersSound |
When conference is full |
kickedSound |
When participant is kicked |
muteDetectSound |
When muted participant talks (requires muteDetect="true") |
Available DTMF Actions
When defining callerControls or moderatorControls, these actions are available:
| Action | Description |
|---|---|
mute |
Toggle mute |
mute on |
Mute (one-way) |
mute off |
Unmute (one-way) |
deaf mute |
Toggle deaf + mute |
hangup |
Leave conference |
lock |
Lock/unlock conference (moderator only) |
vol talk up |
Increase microphone volume |
vol talk dn |
Decrease microphone volume |
vol talk zero |
Reset microphone volume |
vol listen up |
Increase speaker volume |
vol listen dn |
Decrease speaker volume |
vol listen zero |
Reset speaker volume |
energy up |
Raise noise gate threshold |
energy dn |
Lower noise gate threshold |
energy equ |
Reset noise gate |
floor |
Toggle floor holder status |
event |
Send DTMF event |
transfer |
Transfer out of conference |
Example:
callerControls="0:mute,*:deaf mute,#:hangup,1:vol talk dn,2:vol talk zero,3:vol talk up"
moderatorControls="0:mute,*:deaf mute,9:lock,#:hangup,1:vol talk dn,2:vol talk zero,3:vol talk up"
Gather Custom Attributes
These attributes are used on the <Gather> element for interactive audio playback:
| Attribute | Type | Description |
|---|---|---|
playControls |
"true" |
Enables keypad-based playback controls during audio (seek, pause, speed, volume). |
seek |
string | Resume playback from a specific position (in milliseconds). |
webhookUrl |
URL | Callback URL for playback events (position updates, control actions). |
bookmarkUrl |
URL | Callback URL for bookmark events during playback. |
When playControls is enabled, digit keys are mapped to playback actions (seek, pause, next, bookmark, etc.) using digit-name attributes like one, two, star, pound.
Conference TwiML Example
<Response>
<Dial>
<Conference
muted="true"
pin="1234"
moderatorPin="5678"
maxParticipants="10"
beep="onEnter"
startConferenceOnEnter="false"
endConferenceOnExit="true"
record="record-from-start"
waitUrl="https://example.com/hold-music.mp3"
unmute="allow"
announceCount="5"
muteDetect="true"
terminateOnSilence="300"
endconfGraceTime="30"
callerControls="0:mute,*:deaf mute,#:hangup"
moderatorControls="0:mute,*:deaf mute,9:lock,#:hangup"
pinSound="https://example.com/sounds/enter-pin.mp3"
badPinSound="https://example.com/sounds/wrong-pin.mp3"
mutedSound="https://example.com/sounds/you-are-muted.mp3"
unmutedSound="https://example.com/sounds/you-are-unmuted.mp3"
>room5</Conference>
</Dial>
</Response>