---
sourceDocument: Australia API Reference
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/api-reference

 Release :

    - australia

ft:locale :

    - en-US

ft:publication_title :

    - Australia API Reference

ft:clusterId :

    - crapiref

bundleId :

    - crapiref

workflow :

    - Creator


---

# NowVoiceCallbacks interface - Android

# NowVoiceCallbacks interface - Android {#ariaid-title1}

Release version: Australia  
Updated July 21, 2026  
![](https://www.servicenow.com/docs/portal-asset/ico-clock) 1 minute to read  
Provides callback functions for voice session lifecycle and content events.

Implement this interface and pass it when calling [`NowVoiceService.start()`](https://servicenow-prod.fluidtopics.net/tRIQYHQALKmfk9GqAm~2BA#NVoiceServA-start_O_O_O_O_O "Launches the full-screen voice agent Activity. This is a suspend function that returns after the session ends.").

A `NowVoiceError` is delivered as the second parameter of the `onCallEnd()` callback.  
{#NowVoiceCallbacksAndroidInt__table_hr4_4tb_nva2__entry__2}

| Type | Description |
|-|-|
| ConnectionTimeout | The connection to the voice agent timed out. |
| CallInitializationFailed(message) | The voice session could not be initialized. The message field contains additional detail. |
| ConnectionLost | The network connection dropped during an active session. |
| ServerErrorNow(message) | A server error occurred over the data channel. |
| ServerEndedCall | The server terminated the session normally, such as when a session limit is reached. |
| UnexpectedServiceTermination | The system destroyed the voice service unexpectedly. |
[Table 1. NowVoiceError]

{#NowVoiceCallbacksAndroidInt__table_hr4_4tb_nva2}  
{#NowVoiceCallbacksAndroidInt__table_vx2_klw_nva4__entry__2}

| Name | Description |
|-|-|
| `onCallEnd(conversationId: String?, error: NowVoiceError? = null)` | Called once when the voice session ends. conversationId identifies the completed session and may be `null` if a session was never fully established. error is a `NowVoiceError`, or `null` for normal termination. |
| `onMuteStateChanged(isMuted: Boolean)` | Called each time the user mutes or unmutes the microphone. isMuted is `true` when the microphone is muted. |
| `onMessageReceived(message: TranscriptMessage)` | Called each time a new transcript message arrives during the session. For more information, see [`Transcript Message`](https://servicenow-prod.fluidtopics.net/2sUMUx4qD8rKTbPCoO3Nnw "Represents a single message in the voice session transcript."). |
| `onCallMinimized()` | Called when the voice session UI is minimized by the user. |
[Table 2. Functions]

{#NowVoiceCallbacksAndroidInt__table_vx2_klw_nva4}  
The following code example shows how to implement NowVoiceCallbacks. In each callback function, implement the desired functionality for handling the event.

    val callbacks = object : NowVoiceCallbacks {
        override fun onCallEnd(conversationId: String?, error: NowVoiceError?) {
            if (error != null) {
                Log.e("NowVoice", "Session ended with error: $error")
            } else {
                Log.d("NowVoice", "Session complete. ID: $conversationId")
            }
        }

        override fun onMuteStateChanged(isMuted: Boolean) {
            // Update your UI to reflect the current mute state
            Log.d("NowVoice", "Microphone muted: $isMuted")
        }

        override fun onMessageReceived(message: TranscriptMessage) {
            // Receive real-time transcript messages
            Log.d("NowVoice", "${message.role}: ${message.content}")
        }

        override fun onCallMinimized() {
            Log.e("NowVoice", "Voice chat is minimized")
        }
    }


