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>