# Smart Home Speaker Guide

`action.devices.types.SPEAKER` - This device is a connected speaker that does not split audio into separate channels (for example, between two left and right devices).

This type indicates that the device gets the Speaker icon and some related
synonyms and aliases.

## Device capabilities

Refer to the corresponding trait documentation for
implementation details, such as attributes and states that your service should support, and how to
build EXECUTE and QUERY responses.

### Required traits

These traits and commands are required, if applicable to your
device. If your device does not support these traits, enter the error code of
`functionNotSupported` in a QUERY or EXECUTE response. See
[Errors and exceptions](https://developers.home.google.com/cloud-to-cloud/intents/errors-exceptions) for more info.

- [`action.devices.traits.MediaState`](https://developers.home.google.com/cloud-to-cloud/traits/mediastate)
- [`action.devices.traits.OnOff`](https://developers.home.google.com/cloud-to-cloud/traits/onoff)
- [`action.devices.traits.TransportControl`](https://developers.home.google.com/cloud-to-cloud/traits/transportcontrol)
- [`action.devices.traits.Volume`](https://developers.home.google.com/cloud-to-cloud/traits/volume)

### Recommended traits

These traits are recommended, if applicable to your device.
However, you are free to mix and match from all available traits to best match your existing
product functionality.

- [`action.devices.traits.AppSelector`](https://developers.home.google.com/cloud-to-cloud/traits/appselector)
- [`action.devices.traits.InputSelector`](https://developers.home.google.com/cloud-to-cloud/traits/inputselector)

> [!NOTE]
> **Note:** Your service must send Google the `activityState` and `playbackState` status for the media device via [Report State](https://developers.home.google.com/cloud-to-cloud/integration/report-state).

## Example device: Simple speaker

This section contains example intent payloads representing a common "Speaker"
based on the device type and traits above. If you add or remove traits in your implementation,
modify your responses accordingly to reflect those changes.

### Sample SYNC response

Request

```
{
  "requestId": "6894439706274654512",
  "inputs": [
    {
      "intent": "action.devices.SYNC"
    }
  ]
}
```
Response

```
{
  "requestId": "6894439706274654512",
  "payload": {
    "agentUserId": "user123",
    "devices": [
      {
        "id": "123",
        "type": "action.devices.types.SPEAKER",
        "traits": [
          "action.devices.traits.MediaState",
          "action.devices.traits.OnOff",
          "action.devices.traits.Volume",
          "action.devices.traits.TransportControl"
        ],
        "name": {
          "name": "Simple speaker"
        },
        "willReportState": true,
        "attributes": {
          "transportControlSupportedCommands": [
            "NEXT",
            "PREVIOUS",
            "PAUSE",
            "STOP",
            "RESUME"
          ],
          "volumeMaxLevel": 11,
          "volumeCanMuteAndUnmute": true,
          "supportActivityState": true,
          "supportPlaybackState": true
        },
        "deviceInfo": {
          "manufacturer": "smart-home-inc",
          "model": "hs1234",
          "hwVersion": "3.2",
          "swVersion": "11.4"
        }
      }
    ]
  }
}
```

### Sample QUERY response

Request

```
{
  "requestId": "6894439706274654514",
  "inputs": [
    {
      "intent": "action.devices.QUERY",
      "payload": {
        "devices": [
          {
            "id": "123"
          }
        ]
      }
    }
  ]
}
```
Response

```
{
  "requestId": "6894439706274654514",
  "payload": {
    "devices": {
      "123": {
        "status": "SUCCESS",
        "online": true,
        "on": true,
        "currentVolume": 10,
        "isMuted": false,
        "activityState": "ACTIVE",
        "playbackState": "PAUSED"
      }
    }
  }
}
```

### Sample EXECUTE commands

#### OnOff

For additional details on the command parameters,
see the [`action.devices.traits.OnOff`](https://developers.home.google.com/cloud-to-cloud/traits/onoff#action.devices.commands.onoff) reference.
Request

```
{
  "requestId": "6894439706274654516",
  "inputs": [
    {
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [
          {
            "devices": [
              {
                "id": "123"
              }
            ],
            "execution": [
              {
                "command": "action.devices.commands.OnOff",
                "params": {
                  "on": true
                }
              }
            ]
          }
        ]
      }
    }
  ]
}
```
Response

```
{
  "requestId": "6894439706274654516",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "on": true
        }
      }
    ]
  }
}
```

#### mute

For additional details on the command parameters,
see the [`action.devices.traits.Volume`](https://developers.home.google.com/cloud-to-cloud/traits/volume#action.devices.commands.mute) reference.
Request

```
{
  "requestId": "6894439706274654534",
  "inputs": [
    {
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [
          {
            "devices": [
              {
                "id": "123"
              }
            ],
            "execution": [
              {
                "command": "action.devices.commands.mute",
                "params": {
                  "mute": true
                }
              }
            ]
          }
        ]
      }
    }
  ]
}
```
Response

```
{
  "requestId": "6894439706274654534",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "currentVolume": 10,
          "isMuted": true
        }
      }
    ]
  }
}
```

#### setVolume

For additional details on the command parameters,
see the [`action.devices.traits.Volume`](https://developers.home.google.com/cloud-to-cloud/traits/volume#action.devices.commands.setvolume) reference.
Request

```
{
  "requestId": "6894439706274654532",
  "inputs": [
    {
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [
          {
            "devices": [
              {
                "id": "123"
              }
            ],
            "execution": [
              {
                "command": "action.devices.commands.setVolume",
                "params": {
                  "volumeLevel": 11
                }
              }
            ]
          }
        ]
      }
    }
  ]
}
```
Response

```
{
  "requestId": "6894439706274654532",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "currentVolume": 11,
          "isMuted": false
        }
      }
    ]
  }
}
```

#### mediaClosedCaptioningOff

For additional details on the command parameters,
see the [`action.devices.traits.TransportControl`](https://developers.home.google.com/cloud-to-cloud/traits/transportcontrol#action.devices.commands.mediaclosedcaptioningoff) reference.
Request

```
{
  "requestId": "6894439706274654518",
  "inputs": [
    {
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [
          {
            "devices": [
              {
                "id": "123"
              }
            ],
            "execution": [
              {
                "command": "action.devices.commands.mediaClosedCaptioningOff"
              }
            ]
          }
        ]
      }
    }
  ]
}
```
Response

```
{
  "requestId": "6894439706274654518",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "playbackState": "PLAYING"
        }
      }
    ]
  }
}
```

#### mediaClosedCaptioningOn

For additional details on the command parameters,
see the [`action.devices.traits.TransportControl`](https://developers.home.google.com/cloud-to-cloud/traits/transportcontrol#action.devices.commands.mediaclosedcaptioningon) reference.
Request

```
{
  "requestId": "6894439706274654520",
  "inputs": [
    {
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [
          {
            "devices": [
              {
                "id": "123"
              }
            ],
            "execution": [
              {
                "command": "action.devices.commands.mediaClosedCaptioningOn",
                "params": {
                  "closedCaptioningLanguage": "en"
                }
              }
            ]
          }
        ]
      }
    }
  ]
}
```
Response

```
{
  "requestId": "6894439706274654520",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "playbackState": "PLAYING"
        }
      }
    ]
  }
}
```

#### mediaNext

For additional details on the command parameters,
see the [`action.devices.traits.TransportControl`](https://developers.home.google.com/cloud-to-cloud/traits/transportcontrol#action.devices.commands.medianext) reference.
Request

```
{
  "requestId": "6894439706274654522",
  "inputs": [
    {
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [
          {
            "devices": [
              {
                "id": "123"
              }
            ],
            "execution": [
              {
                "command": "action.devices.commands.mediaNext"
              }
            ]
          }
        ]
      }
    }
  ]
}
```
Response

```
{
  "requestId": "6894439706274654522",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "playbackState": "FAST_FORWARDING"
        }
      }
    ]
  }
}
```

#### mediaPause

For additional details on the command parameters,
see the [`action.devices.traits.TransportControl`](https://developers.home.google.com/cloud-to-cloud/traits/transportcontrol#action.devices.commands.mediapause) reference.
Request

```
{
  "requestId": "6894439706274654524",
  "inputs": [
    {
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [
          {
            "devices": [
              {
                "id": "123"
              }
            ],
            "execution": [
              {
                "command": "action.devices.commands.mediaPause"
              }
            ]
          }
        ]
      }
    }
  ]
}
```
Response

```
{
  "requestId": "6894439706274654524",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "playbackState": "PAUSED"
        }
      }
    ]
  }
}
```

#### mediaPrevious

For additional details on the command parameters,
see the [`action.devices.traits.TransportControl`](https://developers.home.google.com/cloud-to-cloud/traits/transportcontrol#action.devices.commands.mediaprevious) reference.
Request

```
{
  "requestId": "6894439706274654526",
  "inputs": [
    {
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [
          {
            "devices": [
              {
                "id": "123"
              }
            ],
            "execution": [
              {
                "command": "action.devices.commands.mediaPrevious"
              }
            ]
          }
        ]
      }
    }
  ]
}
```
Response

```
{
  "requestId": "6894439706274654526",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "playbackState": "REWINDING"
        }
      }
    ]
  }
}
```

#### mediaResume

For additional details on the command parameters,
see the [`action.devices.traits.TransportControl`](https://developers.home.google.com/cloud-to-cloud/traits/transportcontrol#action.devices.commands.mediaresume) reference.
Request

```
{
  "requestId": "6894439706274654528",
  "inputs": [
    {
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [
          {
            "devices": [
              {
                "id": "123"
              }
            ],
            "execution": [
              {
                "command": "action.devices.commands.mediaResume"
              }
            ]
          }
        ]
      }
    }
  ]
}
```
Response

```
{
  "requestId": "6894439706274654528",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "playbackState": "PLAYING"
        }
      }
    ]
  }
}
```

#### mediaStop

For additional details on the command parameters,
see the [`action.devices.traits.TransportControl`](https://developers.home.google.com/cloud-to-cloud/traits/transportcontrol#action.devices.commands.mediastop) reference.
Request

```
{
  "requestId": "6894439706274654530",
  "inputs": [
    {
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [
          {
            "devices": [
              {
                "id": "123"
              }
            ],
            "execution": [
              {
                "command": "action.devices.commands.mediaStop"
              }
            ]
          }
        ]
      }
    }
  ]
}
```
Response

```
{
  "requestId": "6894439706274654530",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "playbackState": "STOPPED"
        }
      }
    ]
  }
}
```

## Device ERRORS

See the full list of [errors and exceptions](https://developers.home.google.com/cloud-to-cloud/intents/errors-exceptions).