> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.jambonz.org/guides/features/conferencing-coach-mode/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.jambonz.org/_mcp/server. # Conferencing "coach" mode > Use coach mode in jambonz conferences to whisper to one participant without other callers hearing. Setup and configuration. The conferencing feature supports a coaching feature whereby designated participants can hear the full conference audio but their own audio is only heard by a subset of the conference participants. The classic example of this is a manager listening in on a call between an agent and a customer and being able to "whisper" to the agent without the customer hearing. This feature is not limited to a single participant receiving the audio, it could be any subset of the conference participants. ## Enabling coach mode To enable coach mode, you must assign a **member tag** to the participants that you may want to selectively send the audio to. For instance, when an agent joins the conference you might assign them a memberTag of `agent`: ```js app.conference({ name: 'support-conference-23', startConferenceOnEnter: true, endConferenceOnExit: true, memberTag: 'agent' }) ``` Later, when the manager joins, you could use the `speakOnlyTo` tag to indicate their audio input should only be heard by agents: ```js app.conference({ name: 'support-conference-23', speakOnlyTo: 'agent' }) ``` ## Dynamically modifying flows During the conference, you can dynamically change these settings, and the conference audio flows will be immediately updated accordingly. This can be done using the REST API as show below: ```bash maxLines=35 # change a participant's member tag value curl --location -g --request PUT '{{base_url}}/v1/Accounts/{{account_sid}}/Calls/{{call_sid}}' \ --data '{ "conferenceParticipantAction": { "action": "tag", "tag": "customer" } }' # remove a participant's member tag curl --location -g --request PUT '{{base_url}}/v1/Accounts/{{account_sid}}/Calls/{{call_sid}}' \ --data '{ "conferenceParticipantAction": { "action": "untag" } }' # make manager's audio heard by everyone curl --location -g --request PUT '{{base_url}}/v1/Accounts/{{account_sid}}/Calls/{{call_sid}}' \ --data '{ "conferenceParticipantAction": { "action": "uncoach" } }' # put a participant into coach mode curl --location -g --request PUT '{{base_url}}/v1/Accounts/{{account_sid}}/Calls/{{call_sid}}' \ --data '{ "conferenceParticipantAction": { "action": "coach", "tag": "agent" } }' ``` The same can be accomplished via the websocket api: ```js // change a participant's member tag session.injectCommand('conf:participant-action', { action: 'tag', tag: 'customer' }); // remove a particpant's member tag session.injectCommand('conf:participant-action', { action: 'untag' }); // make manager's audio heard by everyone session.injectCommand('conf:participant-action', { action: 'uncoach' }); // put a participant into coach mode session.injectCommand('conf:participant-action', { action: 'coach', tag: 'agent' }); ``` > Support for selectively sending audio to a subset of conference participants