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

# Messaging events

> Events for in-call app messages and shared meeting session state.

***

## app-message

Fires when a participant broadcasts a message via [`sendAppMessage()`](/reference/react-native/instance-methods/send-app-message). Messages are not stored and not delivered to the sender. Participants who join after a message is sent will not receive it.

<ResponseField name="action" type="string">
  Always `"app-message"`.
</ResponseField>

<ResponseField name="callClientId" type="string">
  The ID of the call client instance that emitted this event.
</ResponseField>

<ResponseField name="data" type="any">
  The message payload. Must be JSON-serializable.
</ResponseField>

<ResponseField name="fromId" type="string">
  The `session_id` of the participant who sent the message.
</ResponseField>

```json theme={null}
// Example event object
{
  "action": "app-message",
  "callClientId": "15943200481050.884650320964697",
  "data": {
    "message": "Your message here!"
  },
  "fromId": "fc30e773-c71f-4eea-a456-4e7e2449a68a"
}
```

```javascript theme={null}
call.on('app-message', ({ data, fromId }) => {
  displayChatMessage(fromId, data.message);
});
```

***

## meeting-session-state-updated

Fires when anything in [`meetingSessionState()`](/reference/react-native/instance-methods/meeting-session-state) changes — including data set via [`setMeetingSessionData()`](/reference/react-native/instance-methods/set-meeting-session-data) and session metadata like network topology.

<ResponseField name="action" type="string">
  Always `"meeting-session-state-updated"`.
</ResponseField>

<ResponseField name="callClientId" type="string">
  The ID of the call client instance that emitted this event.
</ResponseField>

<ResponseField name="meetingSessionState" type="DailyMeetingSessionState">
  The current meeting session state. Contains `data` (the shared data payload, type `unknown`) and `topology` (the current network topology: `'sfu'`, `'peer'`, or `'none'`).
</ResponseField>

```json theme={null}
// Example event object
{
  "action": "meeting-session-state-updated",
  "callClientId": "17225364729060.9442072768918943",
  "meetingSessionState": {
    "data": {},
    "topology": "sfu"
  }
}
```

***

## meeting-session-summary-updated

Fires when the meeting session summary changes. Prefer this over the deprecated [`meeting-session-updated`](#meeting-session-updated) event.

<ResponseField name="action" type="string">
  Always `"meeting-session-summary-updated"`.
</ResponseField>

<ResponseField name="callClientId" type="string">
  The ID of the call client instance that emitted this event.
</ResponseField>

<ResponseField name="meetingSession" type="DailyMeetingSessionSummary">
  The current meeting session summary. Contains an `id` string.
</ResponseField>

```json theme={null}
// Example event object
{
  "action": "meeting-session-summary-updated",
  "callClientId": "17225364729060.9442072768918943",
  "meetingSession": {
    "id": "meeting-session-abc123"
  }
}
```

***

## meeting-session-updated

<Warning>
  `meeting-session-updated` is deprecated. Use [`meeting-session-summary-updated`](#meeting-session-summary-updated) instead.
</Warning>

Fires when the meeting session changes — for example, when you've been alone in a room long enough that a new session begins.

<ResponseField name="action" type="string">
  Always `"meeting-session-updated"`.
</ResponseField>

<ResponseField name="callClientId" type="string">
  The ID of the call client instance that emitted this event.
</ResponseField>

<ResponseField name="meetingSession" type="DailyMeetingSession" deprecated>
  Deprecated. The meeting session object. Contains an `id` string.
</ResponseField>

```json theme={null}
// Example event object
{
  "action": "meeting-session-updated",
  "callClientId": "17225364729060.9442072768918943",
  "meetingSession": {
    "id": "meeting-session-abc123"
  }
}
```

***

## See also

<CardGroup>
  <Card title="Methods" icon="code" iconType="solid">
    * [sendAppMessage()](/reference/react-native/instance-methods/send-app-message)
    * [meetingSessionState()](/reference/react-native/instance-methods/meeting-session-state)
    * [setMeetingSessionData()](/reference/react-native/instance-methods/set-meeting-session-data)
    * [meetingSessionSummary()](/reference/react-native/instance-methods/meeting-session-summary)
  </Card>

  <Card title="Guides" icon="book-open" iconType="solid">
    * [Events](/docs/daily-js/concepts/events)
  </Card>
</CardGroup>
