# Contact Center events
Contact Center voice events provide real-time updates about call lifecycle, transfers, conferences, supervisor monitoring, and IVR streaming during Contact Center engagements.
These events use the `RTMS_ZCC_VOICE_EVENT_TYPE` enum (event codes 8-34) and are sent through the signaling connection as `EVENT_UPDATE` messages.
> To use Contact Center events, you must first establish connections using [Universal events](/docs/rtms/event-reference/universal-events/). These foundational protocol events (handshakes, keep-alive, session state, media data) apply to all RTMS implementations including Contact Center.
## Consumer answered
Sent from the signaling connection
The signaling connection sends a consumer answered event when a customer has already answered at stream start. Subscribe to this event with `event_type: 8`. This message does not require a response from the app.
The `event_ts` timestamp indicates when the customer's channel was answered.
```json
{
"msg_type": 6,
"event": {
"event_type": 8,
"event_ts": 1727384349123,
"participant_info": {
"channel_id": "123abc",
"participant_mode": "caller",
"queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "My Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550101",
"user_id": "customer-contact-id",
"display_name": "Jane Doe"
}
}
}
```
| Field | Type | Description |
| ------------------ | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `msg_type` | int | The signaling connection sends this message when a consumer has answered. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The consumer answered event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the customer channel was answered. |
| `participant_info` | object | Information about the customer participant. |
| `channel_id` | string | The unique identifier of the customer SIP channel. |
| `participant_mode` | string | The participant role. For inbound calls, the customer is `"caller"`. For outbound calls, the customer is `"callee"`. |
| `queue_id` | string | The unique identifier of the queue. |
| `queue_name` | string | The name of the queue. |
| `account_id` | string | The parent Zoom account identifier. |
| `division_id` | string | The division identifier. |
| `phone_number` | string | The customer's phone number. |
| `user_id` | string | The customer contact identifier. |
| `display_name` | string | The customer's display name. |
## User answered
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a user answered event when an agent or supervisor has answered a call. Subscribe to this event with `event_type: 10`. This message does not require a response from the app.
For agents on inbound customer calls, `participant_mode` is `"callee"`. For outbound calls, it is `"caller"`. The `email` field is included when the user can be loaded.
```json
{
"msg_type": 6,
"event": {
"event_type": 10,
"event_ts": 1727384350123,
"participant_info": {
"channel_id": "agent-channel-id",
"participant_mode": "callee",
"queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "My Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550199",
"user_id": "szCyubr_aQhieHNWYbAGMYg",
"display_name": "Jane Doe",
"email": "jane.doe@example.com"
}
}
}
```
| Field | Type | Description |
| ------------------ | --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a user has answered. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The user answered event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the user answered. |
| `participant_info` | object | Information about the user participant. |
| `channel_id` | string | The unique identifier of the user's SIP channel. |
| `participant_mode` | string | The participant role. `"callee"` for inbound, `"caller"` for outbound. |
| `queue_id` | string | The unique identifier of the queue. |
| `queue_name` | string | The name of the queue. |
| `account_id` | string | The parent Zoom account identifier. |
| `division_id` | string | The division identifier. |
| `phone_number` | string | The user's phone number. |
| `user_id` | string | The unique identifier of the user. |
| `display_name` | string | The user's display name. |
| `email` | string | The user's email address. |
## Consumer ended
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a consumer ended event when the customer hangs up. This event is often sent along with stream stop. Subscribe to this event with `event_type: 9`. This message does not require a response from the app.
The structure is the same as consumer answered.
```json
{
"msg_type": 6,
"event": {
"event_type": 9,
"event_ts": 1727384999000,
"participant_info": {
"channel_id": "123abc",
"participant_mode": "caller",
"queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "My Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550101",
"user_id": "customer-contact-id",
"display_name": "Jane Doe"
}
}
}
```
| Field | Type | Description |
| ------------------ | --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a consumer ends a call. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The consumer ended event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the customer hung up. |
| `participant_info` | object | Information about the customer participant. See [Consumer answered](/docs/rtms/event-reference/#consumer-answered) for field descriptions. |
## User ended
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a user ended event when an agent or supervisor hangs up or when their channel is removed. Subscribe to this event with `event_type: 11`. This message does not require a response from the app.
The structure is the same as user answered.
```json
{
"msg_type": 6,
"event": {
"event_type": 11,
"event_ts": 1727384999000,
"participant_info": {
"channel_id": "agent-channel-id",
"participant_mode": "callee",
"queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "My Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550199",
"user_id": "szCyubr_aQhieHNWYbAGMYg",
"display_name": "Jane Doe",
"email": "jane.doe@example.com"
}
}
}
```
| Field | Type | Description |
| ------------------ | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a user ends a call. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The user ended event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the user hung up. |
| `participant_info` | object | Information about the user participant. See [User answered](/docs/rtms/event-reference/#user-answered) for field descriptions. |
## User hold
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a user hold event when an agent places a call on hold. Subscribe to this event with `event_type: 12`. This message does not require a response from the app.
The subject is the agent who toggled hold. The queue comes from the agent's task.
```json
{
"msg_type": 6,
"event": {
"event_type": 12,
"event_ts": 1727384400000,
"participant_info": {
"channel_id": "agent-channel-id",
"participant_mode": "callee",
"queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "My Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550199",
"user_id": "szCyubr_aQhieHNWYbAGMYg",
"display_name": "Jane Doe",
"email": "jane.doe@example.com"
}
}
}
```
| Field | Type | Description |
| ------------------ | --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a user places a call on hold. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The user hold event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the call was placed on hold. |
| `participant_info` | object | Information about the agent who placed the call on hold. See [User answered](/docs/rtms/event-reference/#user-answered) for field descriptions. |
## User unhold
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a user unhold event when an agent resumes a call from hold. Subscribe to this event with `event_type: 13`. This message does not require a response from the app.
The structure is identical to user hold, with `event_type: 13`.
```json
{
"msg_type": 6,
"event": {
"event_type": 13,
"event_ts": 1727384450000,
"participant_info": {
"channel_id": "agent-channel-id",
"participant_mode": "callee",
"queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "My Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550199",
"user_id": "szCyubr_aQhieHNWYbAGMYg",
"display_name": "Jane Doe",
"email": "jane.doe@example.com"
}
}
}
```
| Field | Type | Description |
| ------------------ | --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a user resumes a call from hold. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The user unhold event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the call was resumed from hold. |
| `participant_info` | object | Information about the agent who resumed the call. See [User answered](/docs/rtms/event-reference/#user-answered) for field descriptions. |
## Monitor started
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a monitor started event when a supervisor begins monitoring an agent's call (listen-only mode). Subscribe to this event with `event_type: 14`. This message does not require a response from the app.
The `channel_id` is the supervisor's channel. The `participant_mode` indicates the monitoring mode (`"monitor"`, `"whisper"`, `"barge"`, or `"takeover"`). The `user_id`, `display_name`, and `email` fields identify the monitored agent. The `monitoring_user_*` fields identify the supervisor.
```json
{
"msg_type": 6,
"event": {
"event_type": 14,
"event_ts": 1727384410000,
"participant_info": {
"channel_id": "supervisor-channel-id",
"participant_mode": "monitor",
"queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "My Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550999",
"user_id": "agent-user-id",
"display_name": "Jane Doe",
"email": "jane.doe@example.com",
"monitoring_user_id": "supervisor-user-id",
"monitoring_user_display_name": "Sam Supervisor",
"monitoring_user_email": "sam@example.com",
"consumer_id": "customer-contact-id",
"consumer_number": "+18005550101",
"consumer_display_name": "Jane Customer"
}
}
}
```
| Field | Type | Description |
| ------------------------------ | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `msg_type` | int | The signaling connection sends this message when monitoring starts. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The monitor started event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when monitoring started. |
| `participant_info` | object | Information about the monitoring session. |
| `channel_id` | string | The unique identifier of the supervisor's SIP channel. |
| `participant_mode` | string | The monitoring mode. One of `"monitor"`, `"whisper"`, `"barge"`, or `"takeover"`. |
| `queue_id` | string | The unique identifier of the queue. |
| `queue_name` | string | The name of the queue. |
| `account_id` | string | The parent Zoom account identifier. |
| `division_id` | string | The division identifier. |
| `phone_number` | string | The supervisor's phone number. |
| `user_id` | string | The unique identifier of the monitored agent. |
| `display_name` | string | The display name of the monitored agent. |
| `email` | string | The email address of the monitored agent. |
| `monitoring_user_id` | string | The unique identifier of the supervisor. |
| `monitoring_user_display_name` | string | The display name of the supervisor. |
| `monitoring_user_email` | string | The email address of the supervisor. |
| `consumer_id` | string | The customer contact identifier. |
| `consumer_number` | string | The customer's phone number. |
| `consumer_display_name` | string | The customer's display name. |
## Monitor transitioned
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a monitor transitioned event when a supervisor changes their monitoring mode (for example, from listen to whisper, or whisper to barge). Subscribe to this event with `event_type: 15`. This message does not require a response from the app.
The structure is identical to monitor started, with `participant_mode` showing the new monitoring mode.
```json
{
"msg_type": 6,
"event": {
"event_type": 15,
"event_ts": 1727384420000,
"participant_info": {
"channel_id": "supervisor-channel-id",
"participant_mode": "whisper",
"queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "My Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550999",
"user_id": "agent-user-id",
"display_name": "Jane Doe",
"email": "jane.doe@example.com",
"monitoring_user_id": "supervisor-user-id",
"monitoring_user_display_name": "Sam Supervisor",
"monitoring_user_email": "sam@example.com",
"consumer_id": "customer-contact-id",
"consumer_number": "+18005550101",
"consumer_display_name": "Jane Customer"
}
}
}
```
| Field | Type | Description |
| ------------------ | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `msg_type` | int | The signaling connection sends this message when monitoring mode changes. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The monitor transitioned event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the mode changed. |
| `participant_info` | object | Information about the monitoring session with the new mode. See [Monitor started](/docs/rtms/event-reference/#monitor-started) for field descriptions. |
## Monitor ended
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a monitor ended event when a supervisor stops monitoring an agent's call. Subscribe to this event with `event_type: 16`. This message does not require a response from the app.
The structure is identical to monitor started.
```json
{
"msg_type": 6,
"event": {
"event_type": 16,
"event_ts": 1727384430000,
"participant_info": {
"channel_id": "supervisor-channel-id",
"participant_mode": "monitor",
"queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "My Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550999",
"user_id": "agent-user-id",
"display_name": "Jane Doe",
"email": "jane.doe@example.com",
"monitoring_user_id": "supervisor-user-id",
"monitoring_user_display_name": "Sam Supervisor",
"monitoring_user_email": "sam@example.com",
"consumer_id": "customer-contact-id",
"consumer_number": "+18005550101",
"consumer_display_name": "Jane Customer"
}
}
}
```
| Field | Type | Description |
| ------------------ | --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when monitoring ends. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The monitor ended event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when monitoring ended. |
| `participant_info` | object | Information about the monitoring session that ended. See [Monitor started](/docs/rtms/event-reference/#monitor-started) for field descriptions. |
## Takeover started
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a takeover started event when a supervisor takes over an agent's call. Subscribe to this event with `event_type: 17`. This message does not require a response from the app.
The structure is identical to monitor started, with `participant_mode: "takeover"`.
```json
{
"msg_type": 6,
"event": {
"event_type": 17,
"event_ts": 1727384440000,
"participant_info": {
"channel_id": "supervisor-channel-id",
"participant_mode": "takeover",
"queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "My Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550999",
"user_id": "agent-user-id",
"display_name": "Jane Doe",
"email": "jane.doe@example.com",
"monitoring_user_id": "supervisor-user-id",
"monitoring_user_display_name": "Sam Supervisor",
"monitoring_user_email": "sam@example.com",
"consumer_id": "customer-contact-id",
"consumer_number": "+18005550101",
"consumer_display_name": "Jane Customer"
}
}
}
```
| Field | Type | Description |
| ------------------ | --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when takeover starts. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The takeover started event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when takeover started. |
| `participant_info` | object | Information about the takeover session. See [Monitor started](/docs/rtms/event-reference/#monitor-started) for field descriptions. |
## Transfer initiated
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a transfer initiated event when an agent initiates a call transfer. Subscribe to this event with `event_type: 18`. This message does not require a response from the app.
The subject is the source agent. The `consumer_id` is the customer channel identifier (not the contact ID). The `transfer_to_*` fields identify the transfer target.
```json
{
"msg_type": 6,
"event": {
"event_type": 18,
"event_ts": 1727384500000,
"participant_info": {
"channel_id": "source-agent-channel-id",
"queue_id": "source-queue-id",
"queue_name": "Source Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550199",
"user_id": "source-user-id",
"display_name": "Jane Doe",
"consumer_id": "customer-channel-id",
"consumer_number": "+18005550101",
"consumer_display_name": "Jane Customer",
"transfer_to_queue_id": "target-queue-id",
"transfer_to_queue_name": "Target Queue",
"transfer_to_user_id": "target-user-id",
"transfer_to_user_display_name": "Alex Agent",
"transfer_to_user_channel_id": "target-agent-channel-id"
}
}
}
```
| Field | Type | Description |
| ------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `msg_type` | int | The signaling connection sends this message when a transfer is initiated. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The transfer initiated event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the transfer was initiated. |
| `participant_info` | object | Information about the transfer. |
| `channel_id` | string | The unique identifier of the source agent's SIP channel. |
| `queue_id` | string | The unique identifier of the source queue. |
| `queue_name` | string | The name of the source queue. |
| `account_id` | string | The parent Zoom account identifier. |
| `division_id` | string | The division identifier. |
| `phone_number` | string | The source agent's phone number. |
| `user_id` | string | The unique identifier of the source agent. |
| `display_name` | string | The display name of the source agent. |
| `consumer_id` | string | The unique identifier of the customer's SIP channel. |
| `consumer_number` | string | The customer's phone number. |
| `consumer_display_name` | string | The customer's display name. |
| `transfer_to_queue_id` | string | The unique identifier of the target queue. |
| `transfer_to_queue_name` | string | The name of the target queue. |
| `transfer_to_user_id` | string | The unique identifier of the target agent. |
| `transfer_to_user_display_name` | string | The display name of the target agent. |
| `transfer_to_user_channel_id` | string | The unique identifier of the target agent's SIP channel. |
## Transfer canceled
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a transfer canceled event when a transfer is canceled before completion. Subscribe to this event with `event_type: 19`. This message does not require a response from the app.
The structure is identical to transfer initiated.
```json
{
"msg_type": 6,
"event": {
"event_type": 19,
"event_ts": 1727384510000,
"participant_info": {
"channel_id": "source-agent-channel-id",
"queue_id": "source-queue-id",
"queue_name": "Source Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550199",
"user_id": "source-user-id",
"display_name": "Jane Doe",
"consumer_id": "customer-channel-id",
"consumer_number": "+18005550101",
"consumer_display_name": "Jane Customer",
"transfer_to_queue_id": "target-queue-id",
"transfer_to_queue_name": "Target Queue",
"transfer_to_user_id": "target-user-id",
"transfer_to_user_display_name": "Alex Agent",
"transfer_to_user_channel_id": "target-agent-channel-id"
}
}
}
```
| Field | Type | Description |
| ------------------ | --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a transfer is canceled. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The transfer canceled event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the transfer was canceled. |
| `participant_info` | object | Information about the canceled transfer. See [Transfer initiated](/docs/rtms/event-reference/#transfer-initiated) for field descriptions. |
## Transfer accepted
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a transfer accepted event when the target agent accepts the transfer. Subscribe to this event with `event_type: 20`. This message does not require a response from the app.
The structure is identical to transfer initiated.
```json
{
"msg_type": 6,
"event": {
"event_type": 20,
"event_ts": 1727384520000,
"participant_info": {
"channel_id": "source-agent-channel-id",
"queue_id": "source-queue-id",
"queue_name": "Source Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550199",
"user_id": "source-user-id",
"display_name": "Jane Doe",
"consumer_id": "customer-channel-id",
"consumer_number": "+18005550101",
"consumer_display_name": "Jane Customer",
"transfer_to_queue_id": "target-queue-id",
"transfer_to_queue_name": "Target Queue",
"transfer_to_user_id": "target-user-id",
"transfer_to_user_display_name": "Alex Agent",
"transfer_to_user_channel_id": "target-agent-channel-id"
}
}
}
```
| Field | Type | Description |
| ------------------ | --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a transfer is accepted. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The transfer accepted event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the transfer was accepted. |
| `participant_info` | object | Information about the accepted transfer. See [Transfer initiated](/docs/rtms/event-reference/#transfer-initiated) for field descriptions. |
## Transfer completed
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a transfer completed event when a transfer completes successfully. Subscribe to this event with `event_type: 21`. This message does not require a response from the app.
The structure is identical to transfer initiated.
```json
{
"msg_type": 6,
"event": {
"event_type": 21,
"event_ts": 1727384530000,
"participant_info": {
"channel_id": "source-agent-channel-id",
"queue_id": "source-queue-id",
"queue_name": "Source Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550199",
"user_id": "source-user-id",
"display_name": "Jane Doe",
"consumer_id": "customer-channel-id",
"consumer_number": "+18005550101",
"consumer_display_name": "Jane Customer",
"transfer_to_queue_id": "target-queue-id",
"transfer_to_queue_name": "Target Queue",
"transfer_to_user_id": "target-user-id",
"transfer_to_user_display_name": "Alex Agent",
"transfer_to_user_channel_id": "target-agent-channel-id"
}
}
}
```
| Field | Type | Description |
| ------------------ | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a transfer completes. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The transfer completed event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the transfer completed. |
| `participant_info` | object | Information about the completed transfer. See [Transfer initiated](/docs/rtms/event-reference/#transfer-initiated) for field descriptions. |
## Transfer rejected
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a transfer rejected event when the target agent rejects the transfer. Subscribe to this event with `event_type: 22`. This message does not require a response from the app.
The structure is identical to transfer initiated.
```json
{
"msg_type": 6,
"event": {
"event_type": 22,
"event_ts": 1727384540000,
"participant_info": {
"channel_id": "source-agent-channel-id",
"queue_id": "source-queue-id",
"queue_name": "Source Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550199",
"user_id": "source-user-id",
"display_name": "Jane Doe",
"consumer_id": "customer-channel-id",
"consumer_number": "+18005550101",
"consumer_display_name": "Jane Customer",
"transfer_to_queue_id": "target-queue-id",
"transfer_to_queue_name": "Target Queue",
"transfer_to_user_id": "target-user-id",
"transfer_to_user_display_name": "Alex Agent",
"transfer_to_user_channel_id": "target-agent-channel-id"
}
}
}
```
| Field | Type | Description |
| ------------------ | --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a transfer is rejected. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The transfer rejected event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the transfer was rejected. |
| `participant_info` | object | Information about the rejected transfer. See [Transfer initiated](/docs/rtms/event-reference/#transfer-initiated) for field descriptions. |
## Transfer timeout
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a transfer timeout event when a transfer times out before being accepted or rejected. Subscribe to this event with `event_type: 23`. This message does not require a response from the app.
The structure is identical to transfer initiated.
```json
{
"msg_type": 6,
"event": {
"event_type": 23,
"event_ts": 1727384550000,
"participant_info": {
"channel_id": "source-agent-channel-id",
"queue_id": "source-queue-id",
"queue_name": "Source Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550199",
"user_id": "source-user-id",
"display_name": "Jane Doe",
"consumer_id": "customer-channel-id",
"consumer_number": "+18005550101",
"consumer_display_name": "Jane Customer",
"transfer_to_queue_id": "target-queue-id",
"transfer_to_queue_name": "Target Queue",
"transfer_to_user_id": "target-user-id",
"transfer_to_user_display_name": "Alex Agent",
"transfer_to_user_channel_id": "target-agent-channel-id"
}
}
}
```
| Field | Type | Description |
| ------------------ | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a transfer times out. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The transfer timeout event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the transfer timed out. |
| `participant_info` | object | Information about the timed-out transfer. See [Transfer initiated](/docs/rtms/event-reference/#transfer-initiated) for field descriptions. |
## Conference canceled
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a conference canceled event when a conference is canceled. Subscribe to this event with `event_type: 24`. This message does not require a response from the app.
The host identity is in `participant_info` along with customer information from the engagement.
```json
{
"msg_type": 6,
"event": {
"event_type": 24,
"event_ts": 1727384600000,
"participant_info": {
"channel_id": "host-channel-id",
"queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "My Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550199",
"user_id": "host-user-id",
"display_name": "Jane Doe",
"email": "jane.doe@example.com",
"consumer_id": "customer-channel-id",
"consumer_number": "+18005550101",
"consumer_display_name": "Jane Customer"
}
}
}
```
| Field | Type | Description |
| ----------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a conference is canceled. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The conference canceled event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the conference was canceled. |
| `participant_info` | object | Information about the conference host and customer. |
| `channel_id` | string | The unique identifier of the host's SIP channel. |
| `queue_id` | string | The unique identifier of the queue. |
| `queue_name` | string | The name of the queue. |
| `account_id` | string | The parent Zoom account identifier. |
| `division_id` | string | The division identifier. |
| `phone_number` | string | The host's phone number. |
| `user_id` | string | The unique identifier of the host. |
| `display_name` | string | The display name of the host. |
| `email` | string | The email address of the host. |
| `consumer_id` | string | The unique identifier of the customer's SIP channel. |
| `consumer_number` | string | The customer's phone number. |
| `consumer_display_name` | string | The customer's display name. |
## Conference participant invited
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a conference participant invited event when an agent is invited to join a conference. Subscribe to this event with `event_type: 26`. This message does not require a response from the app.
The event includes `conference_participants` (everyone already in the conference) and `invited_participant` (the agent being invited).
```json
{
"msg_type": 6,
"event": {
"event_type": 26,
"event_ts": 1727384610000,
"participant_info": {
"channel_id": "host-channel-id",
"queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "My Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"phone_number": "+18005550199",
"user_id": "host-user-id",
"display_name": "Jane Doe",
"email": "jane.doe@example.com",
"consumer_id": "customer-channel-id",
"consumer_number": "+18005550101",
"consumer_display_name": "Jane Customer",
"conference_participants": [
{
"participant_channel_id": "customer-channel-id",
"participant_display_name": "Jane Customer",
"participant_role": "customer",
"participant_queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"participant_phone_number": "+18005550101"
},
{
"participant_channel_id": "host-channel-id",
"participant_user_id": "host-user-id",
"participant_display_name": "Jane Doe",
"participant_role": "host",
"participant_queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"participant_phone_number": "+18005550199"
}
],
"invited_participant": {
"participant_channel_id": "invitee-channel-id",
"participant_user_id": "invitee-user-id",
"participant_display_name": "Alex Agent",
"participant_queue_id": "target-queue-id",
"participant_phone_number": "+18005550200"
}
}
}
}
```
| Field | Type | Description |
| -------------------------- | --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a participant is invited to a conference. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The conference participant invited event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the invitation was sent. |
| `participant_info` | object | Information about the conference. See [Conference canceled](/docs/rtms/event-reference/#conference-canceled) for host and customer field descriptions. |
| `conference_participants` | array | Array of participants currently in the conference. |
| `participant_channel_id` | string | The unique identifier of the participant's SIP channel. |
| `participant_user_id` | string | The unique identifier of the participant (for agents and host only). |
| `participant_display_name` | string | The display name of the participant. |
| `participant_role` | string | The role of the participant. One of `"customer"`, `"host"`, or `"invitee"`. |
| `participant_queue_id` | string | The unique identifier of the participant's queue. |
| `participant_phone_number` | string | The participant's phone number. |
| `invited_participant` | object | Information about the invited agent. Uses the same structure as items in `conference_participants`. |
## Conference participant canceled
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a conference participant canceled event when the host cancels an invitation before the invitee responds. Subscribe to this event with `event_type: 25`. This message does not require a response from the app.
The structure is similar to conference participant invited, with the invitee in `canceled_participant`.
```json
{
"msg_type": 6,
"event": {
"event_type": 25,
"event_ts": 1727384615000,
"participant_info": {
"channel_id": "host-channel-id",
"queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "My Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"user_id": "host-user-id",
"display_name": "Jane Doe",
"consumer_id": "customer-channel-id",
"consumer_number": "+18005550101",
"consumer_display_name": "Jane Customer",
"conference_participants": [],
"canceled_participant": {
"participant_channel_id": "invitee-channel-id",
"participant_user_id": "invitee-user-id",
"participant_display_name": "Alex Agent",
"participant_queue_id": "target-queue-id",
"participant_phone_number": "+18005550200"
}
}
}
}
```
| Field | Type | Description |
| ---------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `msg_type` | int | The signaling connection sends this message when a conference invitation is canceled. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The conference participant canceled event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the invitation was canceled. |
| `participant_info` | object | Information about the conference. See [Conference participant invited](/docs/rtms/event-reference/#conference-participant-invited) for field descriptions. |
| `canceled_participant` | object | Information about the canceled invitee. Uses the same structure as `invited_participant`. |
## Conference participant rejected
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a conference participant rejected event when an invitee rejects the conference invitation. Subscribe to this event with `event_type: 27`. This message does not require a response from the app.
The structure is similar to conference participant canceled, with the rejecting invitee in `rejecting_participant`.
```json
{
"msg_type": 6,
"event": {
"event_type": 27,
"event_ts": 1727384617000,
"participant_info": {
"channel_id": "host-channel-id",
"queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "My Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"user_id": "host-user-id",
"display_name": "Jane Doe",
"consumer_id": "customer-channel-id",
"consumer_number": "+18005550101",
"consumer_display_name": "Jane Customer",
"conference_participants": [],
"rejecting_participant": {
"participant_channel_id": "invitee-channel-id",
"participant_user_id": "invitee-user-id",
"participant_display_name": "Alex Agent",
"participant_queue_id": "target-queue-id",
"participant_phone_number": "+18005550200"
}
}
}
}
```
| Field | Type | Description |
| ----------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `msg_type` | int | The signaling connection sends this message when a conference invitation is rejected. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The conference participant rejected event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the invitation was rejected. |
| `participant_info` | object | Information about the conference. See [Conference participant invited](/docs/rtms/event-reference/#conference-participant-invited) for field descriptions. |
| `rejecting_participant` | object | Information about the rejecting invitee. Uses the same structure as `invited_participant`. |
## Conference participant timeout
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a conference participant timeout event when an invitee does not respond to the conference invitation within the allowed time. Subscribe to this event with `event_type: 28`. This message does not require a response from the app.
The structure is similar to conference participant canceled, with the timed-out invitee in `timed_out_participant`.
```json
{
"msg_type": 6,
"event": {
"event_type": 28,
"event_ts": 1727384620000,
"participant_info": {
"channel_id": "host-channel-id",
"queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "My Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"user_id": "host-user-id",
"display_name": "Jane Doe",
"consumer_id": "customer-channel-id",
"consumer_number": "+18005550101",
"consumer_display_name": "Jane Customer",
"conference_participants": [],
"timed_out_participant": {
"participant_channel_id": "invitee-channel-id",
"participant_user_id": "invitee-user-id",
"participant_display_name": "Alex Agent",
"participant_queue_id": "target-queue-id",
"participant_phone_number": "+18005550200"
}
}
}
}
```
| Field | Type | Description |
| ----------------------- | --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a conference invitation times out. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The conference participant timeout event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the invitation timed out. |
| `participant_info` | object | Information about the conference. See [Conference participant invited](/docs/rtms/event-reference/#conference-participant-invited) for field descriptions. |
| `timed_out_participant` | object | Information about the timed-out invitee. Uses the same structure as `invited_participant`. |
## Conference participant left
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a conference participant left event when a conference participant leaves. Subscribe to this event with `event_type: 29`. This message does not require a response from the app.
The `conference_participants` array excludes the leaving participant. The `leaving_participant` object contains information about who left.
```json
{
"msg_type": 6,
"event": {
"event_type": 29,
"event_ts": 1727384630000,
"participant_info": {
"channel_id": "host-channel-id",
"queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "My Queue",
"account_id": "parent-account-id",
"division_id": "division-id",
"user_id": "host-user-id",
"display_name": "Jane Doe",
"consumer_id": "customer-channel-id",
"consumer_number": "+18005550101",
"consumer_display_name": "Jane Customer",
"conference_participants": [],
"leaving_participant": {
"participant_channel_id": "invitee-channel-id",
"participant_user_id": "invitee-user-id",
"participant_display_name": "Alex Agent",
"participant_queue_id": "target-queue-id",
"participant_phone_number": "+18005550200"
}
}
}
}
```
| Field | Type | Description |
| --------------------- | --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a conference participant leaves. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The conference participant left event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the participant left. |
| `participant_info` | object | Information about the conference. See [Conference participant invited](/docs/rtms/event-reference/#conference-participant-invited) for field descriptions. |
| `leaving_participant` | object | Information about the participant who left. Uses the same structure as `invited_participant`. |
## IVR flow entered
Sent from the signaling connection
**Contact Center only**
The signaling connection sends an IVR flow entered event when a call enters an IVR flow that has the same RTMS app assigned. Subscribe to this event with `event_type: 30`. This message does not require a response from the app.
For more information about IVR streaming, see [IVR streaming for Contact Center](/docs/rtms/contact-center/ivr-streaming/).
```json
{
"msg_type": 6,
"event": {
"event_type": 30,
"event_ts": 1727384200000,
"flow_info": {
"engagement_id": "engagement-id",
"session_id": "business-id",
"flow_id": "flow-id",
"flow_name": "Main IVR",
"account_id": "parent-account-id",
"division_id": "division-id"
}
}
}
```
| Field | Type | Description |
| --------------- | --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a call enters an IVR flow. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The flow entered event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the call entered the flow. |
| `flow_info` | object | Information about the flow that was entered. |
| `engagement_id` | string | The unique identifier for the Contact Center engagement. |
| `session_id` | string | The business session identifier. |
| `flow_id` | string | The unique identifier of the IVR flow. |
| `flow_name` | string | The name of the IVR flow. |
| `account_id` | string | The parent Zoom account identifier. |
| `division_id` | string | The division identifier. |
## IVR flow exited
Sent from the signaling connection
**Contact Center only**
The signaling connection sends an IVR flow exited event when a call leaves an IVR flow. Subscribe to this event with `event_type: 31`. This message does not require a response from the app.
The structure is identical to the flow entered event, with `event_type: 31`.
```json
{
"msg_type": 6,
"event": {
"event_type": 31,
"event_ts": 1727384300000,
"flow_info": {
"engagement_id": "engagement-id",
"session_id": "business-id",
"flow_id": "flow-id",
"flow_name": "Main IVR",
"account_id": "parent-account-id",
"division_id": "division-id"
}
}
}
```
| Field | Type | Description |
| ------------ | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a call exits an IVR flow. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The flow exited event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the call exited the flow. |
| `flow_info` | object | Information about the flow that was exited. See [IVR flow entered](/docs/rtms/event-reference/#ivr-flow-entered) for field descriptions. |
## DTMF input started
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a DTMF input started event when a customer presses a key during an IVR flow. DTMF events are only emitted during IVR flows before an agent bridges the call. Subscribe to this event with `event_type: 32`. This message does not require a response from the app.
Each keypress generates a `DTMF_STARTED` event followed by a `DTMF_ENDED` event. The `payload.ts` RTP timestamp is identical for the matching start and end events.
```json
{
"msg_type": 6,
"event": {
"event_type": 32,
"event_ts": 1789681294876,
"channel_id": "3ea506fa-0061-4ca2-894c-e038294e2a0c",
"payload": {
"digit": "1",
"ts": 44320
}
}
}
```
| Field | Type | Description |
| ------------ | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `msg_type` | int | The signaling connection sends this message when DTMF input starts. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The DTMF started event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the keypress started. |
| `channel_id` | string | The unique identifier of the customer SIP channel that pressed the key. |
| `payload` | object | The DTMF payload data. |
| `digit` | string | The key that was pressed. One of `"0"` through `"9"`, `"*"`, or `"#"`. |
| `ts` | int | The RTP timestamp. This value is identical in the matching `DTMF_STARTED` and `DTMF_ENDED` events for the same keypress. |
## DTMF input ended
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a DTMF input ended event when a customer releases a key during an IVR flow. This event pairs with a `DTMF_STARTED` event. Subscribe to this event with `event_type: 33`. This message does not require a response from the app.
The `payload.ts` value matches the corresponding `DTMF_STARTED` event. The `duration` field indicates how long the key was pressed.
```json
{
"msg_type": 6,
"event": {
"event_type": 33,
"event_ts": 1789681295116,
"channel_id": "3ea506fa-0061-4ca2-894c-e038294e2a0c",
"payload": {
"digit": "1",
"ts": 44320,
"duration": 2080
}
}
}
```
| Field | Type | Description |
| ------------ | --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when DTMF input ends. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The DTMF ended event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the keypress ended. |
| `channel_id` | string | The unique identifier of the customer SIP channel that pressed the key. |
| `payload` | object | The DTMF payload data. |
| `digit` | string | The key that was pressed. One of `"0"` through `"9"`, `"*"`, or `"#"`. |
| `ts` | int | The RTP timestamp. This value matches the `ts` from the corresponding `DTMF_STARTED` event. |
| `duration` | int | The duration of the keypress in 8 kHz samples. For example, a value of 2080 represents approximately 260 milliseconds. |
## Queue waiting
Sent from the signaling connection
**Contact Center only**
The signaling connection sends a queue waiting event when a customer enters a queue during an IVR flow. Subscribe to this event with `event_type: 34`. This message does not require a response from the app.
When this event fires, the audio stream is paused until an agent joins the call.
```json
{
"msg_type": 6,
"event": {
"event_type": 34,
"event_ts": 1789681295378,
"participant_info": {
"channel_id": "3ea506fa-0061-4ca2-894c-e038294e2a0c",
"queue_id": "KmI2i3O-SM-99sIqXnQIDA",
"queue_name": "RTMS_test_queue",
"account_id": "7hyzf8fNQlqJ_tuFPi1aSQ",
"flow_streaming": false
}
}
}
```
| Field | Type | Description |
| ------------------ | --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `msg_type` | int | The signaling connection sends this message when a customer enters a queue. For more information, see [RTMS_MESSAGE_TYPE](/docs/rtms/data-types/#rtms_message_type). |
| `event_type` | int | The queue waiting event type. For more information, see [RTMS_ZCC_VOICE_EVENT_TYPE](/docs/rtms/data-types/#rtms_zcc_voice_event_type). |
| `event_ts` | unsigned long | The Unix timestamp (milliseconds) when the customer entered the queue. |
| `participant_info` | object | Information about the customer who entered the queue. |
| `channel_id` | string | The unique identifier of the customer SIP channel. |
| `queue_id` | string | The unique identifier of the queue. |
| `queue_name` | string | The name of the queue. |
| `account_id` | string | The parent Zoom account identifier. |
| `flow_streaming` | bool | Indicates whether flow streaming is active. |