> For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

# join_conference

> Join an ad-hoc audio conference with extensive configuration options.

[functionresult]: /docs/server-sdks/reference/python/agents/function-result

Join an ad-hoc audio conference. Conferences support both Relay and CXML calls
with extensive configuration for moderation, recording, and event callbacks.

Raises `ValueError` if `beep` is not one of `"true"`, `"false"`, `"onEnter"`,
`"onExit"`, if `max_participants` is not between 1 and 250, if `record` is invalid,
if `trim` is invalid, or if `name` is empty.

When all parameters are at their defaults (except `name`), a simplified form is
used internally. Passing any non-default parameter triggers the full object form.

## **Parameters**

**`name`** `str` — required

Conference name. All participants joining the same name are in the same
conference.

---

**`muted`** `bool` — default: False

Join the conference muted.

---

**`beep`** `str` — default: true

Beep configuration for join/leave notifications.

* `"true"` -- beep on both enter and exit
* `"false"` -- no beep
* `"onEnter"` -- beep only when a participant joins
* `"onExit"` -- beep only when a participant leaves

---

**`start_on_enter`** `bool` — default: True

Whether the conference starts when this participant enters. When `False`,
the participant waits until another participant with `start_on_enter=True` joins.

---

**`end_on_exit`** `bool` — default: False

Whether the conference ends for all participants when this participant leaves.

---

**`wait_url`** `Optional[str]` — default: None

SWML URL for hold music played while waiting for the conference to start.
When `None`, default hold music is used.

---

**`max_participants`** `int` — default: 250

Maximum number of participants. Must be a positive integer, maximum 250.

---

**`record`** `str` — default: do-not-record

Recording mode.

* `"do-not-record"` -- do not record the conference
* `"record-from-start"` -- begin recording as soon as the conference starts

---

**`region`** `Optional[str]` — default: None

Conference region for geographic optimization.

---

**`trim`** `str` — default: trim-silence

Silence trimming in recordings.

* `"trim-silence"` -- remove leading and trailing silence from the recording
* `"do-not-trim"` -- keep silence in the recording as-is

---

**`coach`** `Optional[str]` — default: None

SWML Call ID or CXML CallSid of a participant who can coach (whisper to)
this participant without other participants hearing.

---

**`status_callback_event`** `Optional[str]` — default: None

Space-separated list of events to report.

* `"start"` -- conference has started
* `"end"` -- conference has ended
* `"join"` -- a participant joined
* `"leave"` -- a participant left
* `"mute"` -- a participant was muted or unmuted
* `"hold"` -- a participant was placed on hold or resumed
* `"modify"` -- conference settings were modified
* `"speaker"` -- active speaker changed
* `"announcement"` -- an announcement was played

---

**`status_callback`** `Optional[str]` — default: None

URL to receive conference status event webhooks.

---

**`status_callback_method`** `str` — default: POST

HTTP method for status callbacks.

* `"GET"` -- send status callbacks as GET requests
* `"POST"` -- send status callbacks as POST requests

---

**`recording_status_callback`** `Optional[str]` — default: None

URL to receive recording status event webhooks.

---

**`recording_status_callback_method`** `str` — default: POST

HTTP method for recording status callbacks.

* `"GET"` -- send recording status callbacks as GET requests
* `"POST"` -- send recording status callbacks as POST requests

---

**`recording_status_callback_event`** `str` — default: completed

Space-separated list of recording events to report.

* `"in-progress"` -- recording is currently in progress
* `"completed"` -- recording has completed
* `"absent"` -- no recording was produced

---

**`result`** `Optional[Any]` — default: None

Result handling configuration. Pass an object `{}` for `return_value`-based
switching, or an array `[]` for conditional switching.

---

## **Returns**

[`FunctionResult`][functionresult] — self, for chaining.

## **Examples**

### Simple Conference

```python {11}
from signalwire import AgentBase
from signalwire import FunctionResult

agent = AgentBase(name="my-agent", route="/agent")
agent.set_prompt_text("You are a helpful assistant.")

@agent.tool(name="join_team_call", description="Join the team standup call")
def join_team_call(args, raw_data):
    return (
        FunctionResult("Joining the team call.")
        .join_conference(name="team-standup")
    )

agent.serve()
```

### Moderated Conference

```python {11}
from signalwire import AgentBase
from signalwire import FunctionResult

agent = AgentBase(name="my-agent", route="/agent")
agent.set_prompt_text("You are a helpful assistant.")

@agent.tool(name="join_moderated_conference", description="Join a moderated conference")
def join_moderated_conference(args, raw_data):
    return (
        FunctionResult("Joining the conference.")
        .join_conference(
            name="quarterly-review",
            muted=True,
            start_on_enter=False,
            record="record-from-start",
            max_participants=50
        )
    )

agent.serve()
```