> ## Documentation Index
> Fetch the complete documentation index at: https://plivo.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Conference

> Connect multiple callers in a shared conference room with moderation and recording

The `<Conference>` element connects a caller to a conference room. Multiple callers joining the same conference name are connected together. Maximum participants per conference: 20.

> [!NOTE]
>
> For role-based multi-party calls with coaching, individual hold/mute, and AI agent support, see [Multi-party Call](https://plivo.com/docs/voice/xml/multiparty-call.md).

### Basic Usage

```xml theme={null}
<Response>
    <Conference>my-conference-room</Conference>
</Response>
```

```python Python theme={null}
from plivo import plivoxml

response = plivoxml.ResponseElement()
response.add(plivoxml.ConferenceElement('my-conference-room'))
print(response.to_string())
```

```javascript Node.js theme={null}
const plivo = require('plivo');

const response = plivo.Response();
response.addConference('my-conference-room');
console.log(response.toXML());
```

```ruby Ruby theme={null}
require 'plivo'

include Plivo::XML

response = Response.new
response.addConference('my-conference-room')
puts PlivoXML.new(response).to_xml
```

```php PHP theme={null}
<?php
require 'vendor/autoload.php';
use Plivo\XML\Response;

$response = new Response();
$response->addConference('my-conference-room');
echo $response->toXML();
```

```java Java theme={null}
import com.plivo.api.xml.*;

Response response = new Response()
    .children(new Conference("my-conference-room"));
System.out.println(response.toXmlString());
```

```csharp .NET theme={null}
using Plivo.XML;

var response = new Response();
response.AddConference("my-conference-room");
Console.WriteLine(response.ToString());
```

```go Go theme={null}
package main

import "github.com/plivo/plivo-go/v7/xml"

func main() {
    response := xml.ResponseElement{
        Contents: []interface{}{
            new(xml.ConferenceElement).SetContents("my-conference-room"),
        },
    }
    print(response.String())
}
```

***

## Conference Attributes

### Basic Settings

| Attribute | Type | Default | Description |
| - | - | - | - |
| `muted` | boolean | `false` | Join muted (can still hear others) |
| `enterSound` | string | `""` | Sound on entry: `beep:1`, `beep:2`, or URL |
| `exitSound` | string | `""` | Sound on exit: `beep:1`, `beep:2`, or URL |
| `maxMembers` | integer | `20` | Maximum participants (1-20) |
| `timeLimit` | integer | `86400` | Max conference duration in seconds |
| `hangupOnStar` | boolean | `false` | Let member exit by pressing \* |
| `stayAlone` | boolean | `true` | End conference if only one member |

### Moderation

| Attribute | Type | Default | Description |
| - | - | - | - |
| `startConferenceOnEnter` | boolean | `true` | Start conference when this member joins |
| `endConferenceOnExit` | boolean | `false` | End conference when this member leaves |
| `waitSound` | URL | - | Audio to play while waiting for conference to start |

### Recording

| Attribute | Type | Default | Description |
| - | - | - | - |
| `record` | boolean | `false` | Record the conference |
| `recordFileFormat` | string | `mp3` | Recording format (`mp3`, `wav`) |
| `transcriptionType` | string | - | Transcription type. Values: `auto`, `hybrid`, `manual` |
| `transcriptionUrl` | URL | - | URL to receive transcription |
| `transcriptionMethod` | string | `POST` | HTTP method for sending transcription results to `transcriptionUrl`. Values: `GET`, `POST` |

### Callbacks

| Attribute | Type | Default | Description |
| - | - | - | - |
| `action` | URL | - | URL called when member leaves |
| `method` | string | `POST` | HTTP method for action |
| `callbackUrl` | URL | - | URL for conference events |
| `callbackMethod` | string | `POST` | HTTP method for callback |
| `redirect` | boolean | `true` | Redirect to action URL |

### DTMF

| Attribute | Type | Default | Description |
| - | - | - | - |
| `digitsMatch` | string | - | DTMF patterns to report |
| `floorEvent` | boolean | `false` | Notify when member becomes floor-holder |
| `relayDTMF` | boolean | `true` | Transmit DTMF to all members |

***

## Examples

### Join Muted

Add participants who can listen but not speak:

```xml theme={null}
<Response>
    <Conference muted="true">my-conference-room</Conference>
</Response>
```

### Entry/Exit Sounds

Play beeps when participants join or leave:

```xml theme={null}
<Response>
    <Conference enterSound="beep:1" exitSound="beep:2">
        my-conference-room
    </Conference>
</Response>
```

Use a URL to play custom audio:

```xml theme={null}
<Response>
    <Conference enterSound="https://example.com/join-sound.xml">
        my-conference-room
    </Conference>
</Response>
```

The URL must return XML with `Play`, `Speak`, or `Wait` elements.

### Moderated Conference

Create a "waiting room" where participants wait for the moderator:

**Participant XML:**

```xml theme={null}
<Response>
    <Conference startConferenceOnEnter="false" waitSound="https://example.com/hold-music.xml">
        moderated-meeting
    </Conference>
</Response>
```

**Moderator XML:**

```xml theme={null}
<Response>
    <Conference startConferenceOnEnter="true" endConferenceOnExit="true">
        moderated-meeting
    </Conference>
</Response>
```

When the moderator joins, the conference starts. When they leave, everyone is disconnected.

### Record Conference

```xml theme={null}
<Response>
    <Conference record="true" recordFileFormat="mp3"
                callbackUrl="https://example.com/recording-ready/">
        recorded-meeting
    </Conference>
</Response>
```

```python Python theme={null}
from plivo import plivoxml

response = plivoxml.ResponseElement()
response.add(plivoxml.ConferenceElement(
    'recorded-meeting',
    record=True,
    record_file_format='mp3',
    callback_url='https://example.com/recording-ready/'
))
print(response.to_string())
```

```javascript Node.js theme={null}
const plivo = require('plivo');

const response = plivo.Response();
response.addConference('recorded-meeting', {
    record: true,
    recordFileFormat: 'mp3',
    callbackUrl: 'https://example.com/recording-ready/'
});
console.log(response.toXML());
```

```ruby Ruby theme={null}
require 'plivo'

response = Plivo::XML::Response.new
response.addConference('recorded-meeting',
    record: true,
    recordFileFormat: 'mp3',
    callbackUrl: 'https://example.com/recording-ready/'
)
puts Plivo::XML::PlivoXML.new(response).to_xml
```

```php PHP theme={null}
<?php
require 'vendor/autoload.php';
use Plivo\XML\Response;

$response = new Response();
$response->addConference('recorded-meeting', [
    'record' => true,
    'recordFileFormat' => 'mp3',
    'callbackUrl' => 'https://example.com/recording-ready/'
]);
echo $response->toXML();
```

### With Transcription

```xml theme={null}
<Response>
    <Conference record="true"
                transcriptionType="auto"
                transcriptionUrl="https://example.com/transcription/">
        transcribed-meeting
    </Conference>
</Response>
```

### Exit with Action URL

```xml theme={null}
<Response>
    <Conference action="https://example.com/conference-ended/"
                hangupOnStar="true">
        my-conference
    </Conference>
</Response>
```

### Bridge Two Callers

Use conferences to connect two incoming callers:

**First Caller:**

```xml theme={null}
<Response>
    <Conference waitSound="https://example.com/hold.xml">
        private-bridge-123
    </Conference>
</Response>
```

**Second Caller:**

```xml theme={null}
<Response>
    <Conference>private-bridge-123</Conference>
</Response>
```

***

## Callback Parameters

### Conference Action URL Parameters

Sent when a member leaves the conference:

| Parameter | Description |
| - | - |
| `ConferenceName` | Name of the conference |
| `ConferenceUUID` | Unique conference identifier |
| `ConferenceMemberID` | Member's ID in the conference |
| `RecordUrl` | Recording URL (if recorded) |
| `RecordingID` | Recording identifier |

### Conference Callback URL Parameters

Sent for conference events:

| Parameter | Description |
| - | - |
| `ConferenceAction` | `enter`, `exit`, `digits`, `floor`, `record` |
| `ConferenceName` | Conference name |
| `ConferenceUUID` | Conference identifier |
| `ConferenceMemberID` | Member ID |
| `CallUUID` | Call identifier |
| `ConferenceDigitsMatch` | Matched digits (when `ConferenceAction=digits`) |
| `RecordUrl` | Recording URL (when `ConferenceAction=record`) |
| `RecordingID` | Recording ID |
| `RecordingDuration` | Duration in seconds |
| `RecordingDurationMs` | Duration in milliseconds |
| `RecordingStartMs` | Start time (epoch ms) |
| `RecordingEndMs` | End time (epoch ms) |

### Transcription URL Parameters

| Parameter | Description |
| - | - |
| `transcription` | Transcribed text |
| `transcription_charge` | Cost of transcription |
| `transcription_rate` | Rate per minute |
| `duration` | Recording duration |
| `call_uuid` | Call identifier |
| `recording_id` | Recording identifier |
| `error` | Error message (if any) |

***

## Related

* [Multi-party Call](https://plivo.com/docs/voice/xml/multiparty-call.md) — Role-based calls with coaching, AI agents, and advanced controls
* [Recording](https://plivo.com/docs/voice/xml/record.md) — Record calls
* [Call Routing](https://plivo.com/docs/voice/xml/routing.md) — Dial, Redirect, Hangup
