| 
 | 1 | +blueprint:  | 
 | 2 | +  domain: automation  | 
 | 3 | +  name: Music Assistant - Suporte de Voz Local (Exclusivo)  | 
 | 4 | +  source_url: https://github.com/music-assistant/voice-support/blob/main/local-assist-blueprint/mass_assist_blueprint_pt-br.yaml  | 
 | 5 | +  description: "  | 
 | 6 | +      | 
 | 7 | +
  | 
 | 8 | +    # Reproduzir mídia usando comandos de voz  | 
 | 9 | +
  | 
 | 10 | +    ### Configuração do Blueprint  | 
 | 11 | +
  | 
 | 12 | +    #### Obrigatório  | 
 | 13 | +
  | 
 | 14 | +    * Defina um `Player Padrão` para ser usado quando nenhum dispositivo for mencionado no comando  | 
 | 15 | +    e o pedido não vier de uma área com um player do Music Assistant.  | 
 | 16 | +
  | 
 | 17 | +    #### Opcional  | 
 | 18 | +
  | 
 | 19 | +    * Altere as frases de acionamento ou adicione mais comandos. Você pode usar isso para traduzir  | 
 | 20 | +    os comandos para o português.  | 
 | 21 | +
  | 
 | 22 | +    * Altere as respostas ou traduza-as para o português.  | 
 | 23 | +
  | 
 | 24 | +
  | 
 | 25 | +    ### Uso  | 
 | 26 | +
  | 
 | 27 | +    Todos os comandos devem:  | 
 | 28 | +
  | 
 | 29 | +    * Começar com as palavras `Tocar` ou `Ouvir` seguidas do tipo de conteúdo `artista`/`música`/`álbum`/`playlist`/`rádio` e depois o nome do item  | 
 | 30 | +
  | 
 | 31 | +    * Para álbuns e músicas, opcionalmente incluir `do artista` seguido do nome do artista  | 
 | 32 | +
  | 
 | 33 | +    * Opcionalmente especificar uma área ou dispositivo no final do comando  | 
 | 34 | +
  | 
 | 35 | +    * Para artistas, músicas, álbuns ou playlists, opcionalmente incluir `usando modo rádio`  | 
 | 36 | +
  | 
 | 37 | +    #### Variações Aceitas  | 
 | 38 | +
  | 
 | 39 | +    O artigo `o`/`a` é opcional  | 
 | 40 | +
  | 
 | 41 | +    |Tipo de Mídia|Variações Aceitas|  | 
 | 42 | +
  | 
 | 43 | +    |---|---|  | 
 | 44 | +
  | 
 | 45 | +    |`artista`|`banda`, `grupo`|  | 
 | 46 | +
  | 
 | 47 | +    |`música`|`faixa`|  | 
 | 48 | +
  | 
 | 49 | +    |`rádio`|`estação de rádio`, `rádio`|  | 
 | 50 | +      | 
 | 51 | +    |`playlist`||  | 
 | 52 | +      | 
 | 53 | +
  | 
 | 54 | +    #### Exemplos  | 
 | 55 | +
  | 
 | 56 | +    ```  | 
 | 57 | +
  | 
 | 58 | +    Tocar o artista Caetano Veloso na cozinha  | 
 | 59 | +
  | 
 | 60 | +    Ouvir o álbum Elis & Tom no escritório  | 
 | 61 | +
  | 
 | 62 | +    Ouvir o álbum Grandes Sucessos do artista Djavan na cozinha  | 
 | 63 | +
  | 
 | 64 | +    Tocar a música Águas de Março no quarto  | 
 | 65 | +
  | 
 | 66 | +    Tocar a música Águas de Março no quarto usando modo rádio  | 
 | 67 | +
  | 
 | 68 | +    Tocar a música Como Nossos Pais do Milton Nascimento no quarto  | 
 | 69 | +
  | 
 | 70 | +    Ouvir a playlist MPB Clássica no escritório  | 
 | 71 | +
  | 
 | 72 | +    Ouvir a estação de rádio Rádio JBFM no quarto  | 
 | 73 | +
  | 
 | 74 | +    Tocar o álbum Noites Brasileiras no Sonos do Quarto  | 
 | 75 | +
  | 
 | 76 | +    Ouvir o disco Noites Brasileiras no Sonos do Quarto  | 
 | 77 | +
  | 
 | 78 | +    Tocar a banda Os Mutantes  | 
 | 79 | +
  | 
 | 80 | +    ```"  | 
 | 81 | +  input:  | 
 | 82 | +    default_player_entity_id_input:  | 
 | 83 | +      name: Player de Mídia Padrão  | 
 | 84 | +      selector:  | 
 | 85 | +        entity:  | 
 | 86 | +          filter:  | 
 | 87 | +            integration: music_assistant  | 
 | 88 | +            domain: media_player  | 
 | 89 | +    trigger_response_settings:  | 
 | 90 | +      name: Configurações de Acionamento e Resposta  | 
 | 91 | +      icon: mdi:chat  | 
 | 92 | +      description: |  | 
 | 93 | +        Altere os comandos existentes ou adicione novos comandos nestas configurações.  | 
 | 94 | +        Use colchetes [ ] para partes opcionais. Parênteses ( ) com | permitem valores alternativos.  | 
 | 95 | +        { query } é um curinga que captura a mídia solicitada e opcionalmente o local/dispositivo.  | 
 | 96 | +
  | 
 | 97 | +        Defina também as respostas do Assistente usando templates jinja que serão  | 
 | 98 | +        substituídos pelas informações da mídia e nome do player.  | 
 | 99 | +      collapsed: true  | 
 | 100 | +      input:  | 
 | 101 | +        album_trigger:  | 
 | 102 | +          name: Comando para Álbum  | 
 | 103 | +          description: Frases para solicitar um álbum específico  | 
 | 104 | +          selector:  | 
 | 105 | +            text:  | 
 | 106 | +              multiline: false  | 
 | 107 | +              multiple: true  | 
 | 108 | +          default:  | 
 | 109 | +            - "(tocar|ouvir) [o ](álbum|ep|disco|coletânea|single) {media_name} [do [o ](artista|banda|grupo) {artist}] [(na|no|usando) [o ]{area_or_player_name}][ (com|usando) {radio_mode}]"  | 
 | 110 | +        track_trigger:  | 
 | 111 | +          name: Comando para Música  | 
 | 112 | +          description: Frases para solicitar uma música específica  | 
 | 113 | +          selector:  | 
 | 114 | +            text:  | 
 | 115 | +              multiline: false  | 
 | 116 | +              multiple: true  | 
 | 117 | +          default:  | 
 | 118 | +            - "(tocar|ouvir) [a ](música|faixa) {media_name} [(do|da) [(o|a) ](artista|banda|grupo) {artist}] [(na|no|usando) [o ]{area_or_player_name}][ (com|usando) {radio_mode}]"  | 
 | 119 | +        artist_trigger:  | 
 | 120 | +          name: Comando para Artista  | 
 | 121 | +          description: Frases para solicitar um artista específico  | 
 | 122 | +          selector:  | 
 | 123 | +            text:  | 
 | 124 | +              multiline: false  | 
 | 125 | +              multiple: true  | 
 | 126 | +          default:  | 
 | 127 | +            - "(tocar|ouvir) [(o|a) ](artista|banda|grupo) {media_name} [(na|no|usando) [o ]{area_or_player_name}][ (com|usando) {radio_mode}]"  | 
 | 128 | +        radio_trigger:  | 
 | 129 | +          name: Comando para Rádio  | 
 | 130 | +          description: Frases para solicitar uma estação de rádio  | 
 | 131 | +          selector:  | 
 | 132 | +            text:  | 
 | 133 | +              multiline: false  | 
 | 134 | +              multiple: true  | 
 | 135 | +          default:  | 
 | 136 | +            - "(tocar|ouvir) [a ]((estação de rádio)|(rádio)|(estação)) {media_name} [(na|no|usando) [o ]{area_or_player_name}]"  | 
 | 137 | +        playlist_trigger:  | 
 | 138 | +          name: Comando para Playlist  | 
 | 139 | +          description: Frases para solicitar uma playlist  | 
 | 140 | +          selector:  | 
 | 141 | +            text:  | 
 | 142 | +              multiline: false  | 
 | 143 | +              multiple: true  | 
 | 144 | +          default:  | 
 | 145 | +            - "(tocar|ouvir) [a ]playlist {media_name} [(na|no|usando) [o ]{area_or_player_name}][ (com|usando) {radio_mode}]"  | 
 | 146 | +        response_input:  | 
 | 147 | +          name: Resposta do Assistente  | 
 | 148 | +          description: Resposta que será dada pelo Assistente  | 
 | 149 | +          selector:  | 
 | 150 | +            text:  | 
 | 151 | +              multiline: false  | 
 | 152 | +              multiple: false  | 
 | 153 | +          default: "{{ trigger.slots.media_name }} tocando em {{ mass_player_name }}"  | 
 | 154 | + | 
 | 155 | +triggers:  | 
 | 156 | +  - trigger: conversation  | 
 | 157 | +    command: !input album_trigger  | 
 | 158 | +    id: album  | 
 | 159 | +  - trigger: conversation  | 
 | 160 | +    command: !input track_trigger  | 
 | 161 | +    id: track  | 
 | 162 | +  - trigger: conversation  | 
 | 163 | +    command: !input artist_trigger  | 
 | 164 | +    id: artist  | 
 | 165 | +  - trigger: conversation  | 
 | 166 | +    command: !input radio_trigger  | 
 | 167 | +    id: radio  | 
 | 168 | +  - trigger: conversation  | 
 | 169 | +    command: !input playlist_trigger  | 
 | 170 | +    id: playlist  | 
 | 171 | +actions:  | 
 | 172 | +  - alias: Definir variáveis para uso na automação  | 
 | 173 | +    variables:  | 
 | 174 | +      version: 20250128  | 
 | 175 | +      default_player_entity_id: !input default_player_entity_id_input  | 
 | 176 | +      trigger_id: "{{ trigger.id }}"  | 
 | 177 | +      area_or_player_name: "{{ trigger.slots.area_or_player_name | default }}"  | 
 | 178 | +      assist_device_id: "{{ trigger.device_id }}"  | 
 | 179 | +      action_data:  | 
 | 180 | +        media_id: "{{ trigger.slots.media_name }}"  | 
 | 181 | +        media_type: "{{ 'radio' if 'radio' in media_name | lower else trigger_id }}"  | 
 | 182 | +        artist: "{{ trigger.slots.artist | default }}"  | 
 | 183 | +        radio_mode: "{{ 'radio' in trigger.slots.radio_mode | default | lower }}"  | 
 | 184 | +      player_entity_id_by_player_name: >  | 
 | 185 | +        {{ integration_entities('music_assistant') | expand   | 
 | 186 | +          | selectattr('name', 'match', area_or_player_name ~ '$', ignorecase=true)  | 
 | 187 | +          | map(attribute='entity_id') | list }}  | 
 | 188 | +      player_entity_id_by_area_name: >  | 
 | 189 | +        {{ areas() | map('area_name') | select('match', area_or_player_name ~ '$',   | 
 | 190 | +        ignorecase=true) | map('area_entities') | sum(start=[]) | select('in',   | 
 | 191 | +        integration_entities('music_assistant')) | list }}  | 
 | 192 | +      player_entity_id_by_assist_area: >  | 
 | 193 | +        {{ area_entities(area_id(trigger.device_id))  | 
 | 194 | +        | select('in', integration_entities('music_assistant')) | list }}  | 
 | 195 | +      mass_player_entity_id: |  | 
 | 196 | +        {{ player_entity_id_by_player_name or player_entity_id_by_area_name   | 
 | 197 | +        or player_entity_id_by_assist_area or [default_player_entity_id] }}  | 
 | 198 | +      mass_player_name: "{{ mass_player_entity_id | map('state_attr', 'friendly_name') | join(', ') }}"  | 
 | 199 | +  - alias: Enviar mídia para o player selecionado  | 
 | 200 | +    action: music_assistant.play_media  | 
 | 201 | +    data: "{{ dict(action_data.items() | selectattr('1')) }}"  | 
 | 202 | +    target:  | 
 | 203 | +      entity_id: "{{ mass_player_entity_id }}"  | 
 | 204 | +  - alias: Retornar resposta  | 
 | 205 | +    set_conversation_response: !input response_input  | 
 | 206 | +mode: single  | 
0 commit comments