Wrap the services you want to be conditional in the choose action:
sonos_say:
alias: Sonos TTS script
sequence:
- choose:
- conditions:
- condition: state
entity_id: media_player.sonos_one
state: playing
- data_template:
entity_id: '{{ sonos_entity }}'
service: sonos.snapshot
- data_template:
entity_id: '{{ sonos_entity }}'
volume_level: '{{ volume }}'
service: media_player.volume_set
- data_template:
entity_id: '{{ sonos_entity }}'
message: '{{ message }}'
service: tts.google_translate_say
- delay: '{{ delay|default(''00:00:00'') }}'
- choose:
- conditions:
- condition: state
entity_id: media_player.sonos_one
state: playing
- data_template:
entity_id: '{{ sonos_entity }}'
service: sonos.restore
Now, this does what you asked for (actions 1 and 4 only if playing) but action 4 will never happen because the media player won’t be playing by then. The TTS message will have finished.
One way around this would be to create an input boolean and set it if the Sonos snapshot occurs, then use that as the test if you should restore the Sonos.
sonos_say:
alias: Sonos TTS script
sequence:
- choose:
- conditions:
- condition: state
entity_id: media_player.sonos_one
state: playing
- data_template:
entity_id: '{{ sonos_entity }}'
service: sonos.snapshot
- service: input_boolean.turn_on
entity_id: input_boolean.sonos_was_saved
- data_template:
entity_id: '{{ sonos_entity }}'
volume_level: '{{ volume }}'
service: media_player.volume_set
- data_template:
entity_id: '{{ sonos_entity }}'
message: '{{ message }}'
service: tts.google_translate_say
- delay: '{{ delay|default(''00:00:00'') }}'
- choose:
- conditions:
- condition: state
entity_id: input_boolean.sonos_was_saved
state: 'on'
- data_template:
entity_id: '{{ sonos_entity }}'
service: sonos.restore
- service: input_boolean.turn_off
entity_id: input_boolean.sonos_was_saved # reset ready for next time