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

# Meeting Presence

> Control how the bot appears and behaves in the meeting: bot presence, digital avatars, speaking, and chat.

The bot is a participant, not just a recorder. While the meeting is `active`, drive it through the session actions: speak, stop speaking, and post to chat. All three return `202 Accepted` and complete asynchronously.

The bot has two presence modes. **Bot presence** is the default plain roster entry, covered on this page. [**Digital avatars**](/docs/meeting/digital-avatars) give the bot a rendered avatar on camera.

## Bot Presence

The bot joins as a visible participant with its own entry in the meeting roster. By default it appears as **Meeting Bot**; set `bot_name` (1-100 characters) when you create the session to control the name other attendees see:

```bash theme={null}
curl -X POST https://api.telnyx.com/v2/meeting_sessions \
  -H "Authorization: Bearer $TELNYX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "meeting_url": "https://meet.google.com/abc-defg-hij",
    "bot_name": "Q3 Decisions Scribe"
  }'
```

You can also rename the bot before it joins with `PATCH /v2/meeting_sessions/{id}` while the session is `scheduled`.

There is no API for a custom profile picture. The bot uses the meeting platform's default profile for its account, so its roster entry is the name above plus the platform's standard bot appearance.

## Digital Avatars

Instead of a plain roster entry, give the bot a rendered digital avatar as its in-meeting presence. The digital avatar replaces the bot's camera: attendees see it on screen, and everything the bot says through [speak](#speak) is lip-synced by the digital avatar. See [Digital avatars](/docs/meeting/digital-avatars) for the `avatar` parameter, provider requirements, and `avatar_state`.

## Speak

`POST /v2/meeting_sessions/{id}/actions/speak` makes the bot speak text into the meeting. The session's `voice` is the default; override it per request.

```bash theme={null}
curl -X POST https://api.telnyx.com/v2/meeting_sessions/mtgsess_9b2f.../actions/speak \
  -H "Authorization: Bearer $TELNYX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Here are the three decisions from this call.",
    "interrupt": false
  }'
```

The full request schema is on [Speak in a meeting session](/api-reference/meeting-session-actions/speak-in-a-meeting-session).

Speech is queued, so a long utterance is never cut short by the next `speak` call. If `barge_in` was enabled on the session, participants can interrupt the bot with their own speech.

To have the bot speak as soon as it is admitted without a `speak` call, set `config.speak_on_enter` to the text it should say when creating the session. It sits alongside `voice` and `barge_in` and applies to every session, independent of any assistant.

## Stop Speaking

`POST /v2/meeting_sessions/{id}/actions/stop_speaking` stops the current utterance and flushes the queue.

```bash theme={null}
curl -X POST https://api.telnyx.com/v2/meeting_sessions/mtgsess_9b2f.../actions/stop_speaking \
  -H "Authorization: Bearer $TELNYX_API_KEY"
```

## Send a Chat Message

`POST /v2/meeting_sessions/{id}/actions/send_chat` posts a message to the meeting's native chat as the bot.

```bash theme={null}
curl -X POST https://api.telnyx.com/v2/meeting_sessions/mtgsess_9b2f.../actions/send_chat \
  -H "Authorization: Bearer $TELNYX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "text": "I will send the summary after this call." }'
```

Native chat is supported on Google Meet, Zoom, and Teams. Webex does not support native chat, although joining and audio/video output remain supported.

Chat is two-way: messages other participants post are delivered as `chat.message` events, while the bot's own posts echo back as `chat.sent`. Subscribe on the WebSocket stream or a webhook to read inbound chat. The full request schema is on [Send chat in a meeting session](/api-reference/meeting-session-actions/send-chat-in-a-meeting-session).

## Same Commands over WebSocket

The same three actions can be sent as frames on the [live transcript stream](/docs/meeting/live-transcript) instead of over REST. The stream is convenient for low-latency bots but provides no per-command acknowledgement and caps queued commands at 8. Prefer REST actions when you need a durable, acknowledged response.

## Errors

Action requests fail with a non-2xx status and an error envelope, for example when the session is not `active`:

```json theme={null}
{
  "error": {
    "code": "invalid_state",
    "message": "session must be active to perform this action (current status: ended)"
  }
}
```

## Related

* [Digital avatars](/docs/meeting/digital-avatars) -- render the bot as a speaking avatar on camera
* [Join a Meeting](/docs/meeting/join-meeting) -- create a meeting session and send the bot
* [Live Transcript](/docs/meeting/live-transcript) -- follow the transcript stream in real time
* [Collect Results](/docs/meeting/collect-results) -- read the finalized transcript and summary
