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

# Distribution/Voice

> Voice response signals and payload schemas for the Aion Distribution extension.

**Metadata**

| Field              | Value                                                                                    |
| ------------------ | ---------------------------------------------------------------------------------------- |
| Canonical URI      | `https://docs.aion.to/a2a/extensions/aion/distribution/voice/1.0.0`                      |
| Issuer             | `aion`                                                                                   |
| Version            | `1.0.0`                                                                                  |
| Activation         | This extension is declarative. It will always be active and does not require activation. |
| Related Extensions | [Distribution][distribution], [Middleware][middleware]                                   |

[distribution]: /a2a/extensions/aion/distribution/1.0.0

[middleware]: /a2a/extensions/aion/middleware/1.0.0

## Overview

The Voice extension defines provider-neutral signals used while an Aion
[Distribution](/a2a/extensions/aion/distribution/1.0.0) is conducting a live voice session.

The current version defines one signal: a short backchannel utterance that may be spoken while the
canonical response is still being produced. A backchannel does not replace the canonical response,
complete the task, or change the task status.

Key aliases used below:

* `VoiceURI`: `https://docs.aion.to/a2a/extensions/aion/distribution/voice/1.0.0`
* `BackchannelArtifactId`: `aion:voice-backchannel`

## Agent Card Declaration

Agents that may emit Voice extension artifacts declare the extension in their Agent Card:

```json theme={null}
{
  "capabilities": {
    "extensions": [
      {
        "uri": "https://docs.aion.to/a2a/extensions/aion/distribution/voice/1.0.0",
        "description": "Emits optional voice backchannel artifact updates.",
        "required": false
      }
    ]
  }
}
```

The declaration advertises possible output. It does not mean that every response contains a
backchannel artifact.

## Artifacts

### Backchannel

A backchannel is a brief, non-canonical utterance such as "One moment while I check that." It is
delivered as a `TaskArtifactUpdateEvent` so it can be synthesized without being mistaken for the
agent's final answer.

| Field                         | Requirement                                |
| ----------------------------- | ------------------------------------------ |
| `artifact.artifactId`         | Must equal `aion:voice-backchannel`.       |
| `artifact.extensions`         | Must include `VoiceURI`.                   |
| `artifact.metadata[VoiceURI]` | Must contain a valid `BackchannelPayload`. |
| `eventType`                   | Must equal `backchannel`.                  |

## Payloads

### BackchannelPayload

Schema URI:
`https://docs.aion.to/a2a/extensions/aion/distribution/voice/1.0.0#BackchannelPayload`

The payload is attached at `artifact.metadata[VoiceURI]`.

| Field       | Type     | Required   | Description                                                                      |
| ----------- | -------- | ---------- | -------------------------------------------------------------------------------- |
| `eventType` | `String` | `required` | Event discriminator. The only supported value is `backchannel`.                  |
| `kind`      | `String` | `optional` | Producer-defined category, such as `working` or `still-working`.                 |
| `text`      | `String` | `optional` | Explicit text to synthesize. A non-empty value takes precedence over text parts. |

The event must provide speakable text either in `text` or in one or more non-empty artifact
`TextPart` values. When `text` is absent or blank, consumers join trimmed, non-empty text parts in
their original order using newline boundaries.

## Example

This example shows the complete streaming envelope emitted by the current Aion backchannel
producer:

```json theme={null}
{
  "artifactUpdate": {
    "taskId": "task-42",
    "contextId": "ctx-42",
    "append": false,
    "lastChunk": true,
    "metadata": {
      "https://docs.aion.to/a2a/extensions/aion/distribution/voice/1.0.0": {
        "eventType": "backchannel",
        "kind": "working",
        "text": "One moment while I check that."
      }
    },
    "artifact": {
      "artifactId": "aion:voice-backchannel",
      "parts": [
        {
          "text": "One moment while I check that."
        }
      ],
      "metadata": {
        "https://docs.aion.to/a2a/extensions/aion/distribution/voice/1.0.0": {
          "eventType": "backchannel",
          "kind": "working",
          "text": "One moment while I check that."
        }
      },
      "extensions": [
        "https://docs.aion.to/a2a/extensions/aion/distribution/voice/1.0.0"
      ]
    }
  }
}
```

The current producer emits each backchannel as a complete, non-appending artifact update with
`append` set to `false` and `lastChunk` set to `true`.

## Processing Rules

### Producers

Producers must include both the extension URI marker and its typed metadata on the artifact. The
update may duplicate the payload in update-level metadata for envelope-level routing, as Aion's
current producer does. The payload in `artifact.metadata[VoiceURI]` remains canonical.

### Consumers

Consumers recognize a backchannel only when the reserved artifact ID and a valid payload are both
present. They ignore Voice metadata attached to any other artifact ID.

A Voice distribution handles a recognized backchannel independently from canonical response text:

1. Resolve the text from the payload or artifact text parts.
2. Submit the backchannel for immediate speech synthesis.
3. Preserve its position relative to canonical utterances already observed, without merging it
   with canonical response text.
4. Continue processing the canonical A2A response normally.

Backchannel artifacts do not alter the task lifecycle. Producers must still return the canonical
response through the ordinary A2A response stream.
