Este pequeno tutorial serve somente para conseguirmos colocar as nossas alexa a falar o que escrevemos no nosso bot do telegram, e na verdade no Home Assistant é super fácil fazê-lo.
Está só à distância de uma automação.
Se estão interessados no assunto acredito que já tenham todos os requisitos necessários, na verdade basta ter:
-
Telegram bot instalado no vosso HA, se ainda não tiverem é só seguir este tutorial- tutorial telegram
-
O custom_component alexa media_player instalado que o deverão instalar através do HACS preferencialmente Alexa media_player
Depois disso, basta usar esta automação:
- alias: 'alexa telegram'
trigger:
platform: event
event_type: telegram_text
action:
- service: notify.alexa_media
data_template:
target: 'media_player.echo_dot_de_ricardo'
data:
type: announce
message: "{{ trigger.event.data.text }}"
Agora é só escrever a mensagem no bot e testar
No type onde uso “announce” podem também utilizar “tts” .
Se o método announce não funcionar no vosso echo, confirmem na app que em / dispositivos/echo&alexa/vosso echo/communications está no modo enable/activo
Pessoalmente só costumo usar “announce” pois gosto mais por dar aquele toque de alerta de que vai fazer um anuncio, ao contrário do “tts” em que começa logo a falar e por vezes se não estamos à espera não percebemos as primeiras palavras.
Bem nem é só por isso gosto mais do “announce” , pois só com este type
é que podemos usar “SSML references”, e com isto podemos, por exemplo, usar vozes da amazon polly ( sim pt/PT ) e também vários efeitos que podemos dar às vozes para tentarmos que soe o mais natural possível ( para os vários efeitos disponiveis consultem esta página. )
É provável que não funcione com o echo dot versão 2 , se puderem confirmem e postem aqui no tópico
E não é preciso ter nada mais instalado basta colocar os devidos efeitos na automação:
- alias: 'Alexa Telegram'
trigger:
platform: event
event_type: telegram_text
action:
- service: media_player.volume_set
entity_id: media_player.echo_dot_de_ricardo
data:
volume_level: '0.5'
- delay: '5'
- service: notify.alexa_media
data_template:
target: 'media_player.echo_dot_de_ricardo'
data:
type: announce
message: "<voice name='Cristiano'><lang xml:lang='pt-PT'><amazon:auto-breaths frequency='high' volume='soft' duration='x-short'>{{ trigger.event.data.text }} </amazon:auto-breaths></lang></voice>"
Ainda ando a testar a melhor combinação de efeitos para o discurso parecer o mais real possível, mas acho que já não está mal.
Ah, para a vozes portuguesas podemos usar “Ines” ou “Cristiano”
Edit:
Para quem já usava, ou quer usar, o “platform” telegram_text para activar alguma outra automação , estas automações atrás poderão “atrapalhar” um pouco, já que tudo o que escrevermos no bot a Alexa vai dizer, e poderá nem sempre ser essa a nossa vontade.
Por exemplo na automacão seguinte eu quero ligar a luz da dispensa, mas não quero que a alexa fale:
- alias: 'Telegram liga luz'
trigger:
platform: event
event_type: telegram_text
event_data:
text: 'acende'
action:
- service: telegram_bot.send_message
data_template:
target: '{{ trigger.event.data.chat_id }}'
message: 'Ok {{ trigger.event.data["from_first"] }}, acendi a luz!'
- service: light.turn_on
entity_id: light.luz_dispensa
Então para isso eu terei de colocar uma condição nas automações em quero que a alexa fale, por exemplo:
- alias: 'Tesrert'
trigger:
platform: event
event_type: telegram_text
condition:
- condition: template
value_template: >
{{'!' in trigger.event.data.text }}
action:
- service: media_player.volume_set
entity_id: 'media_player.echo_dot_de_ricardo'
data:
volume_level: '0.5'
- delay: '5'
- service: notify.alexa_media
data_template:
target: 'media_player.echo_dot_de_ricardo'
data:
type: announce
message: "<voice name='Cristiano'><lang xml:lang='pt-PT'><amazon:auto-breaths frequency='high' volume='soft' duration='x-short'>{{ trigger.event.data.text }} </amazon:auto-breaths></lang></voice>"
Com esta condição a Alexa só vai falar se existir no texto o ponto de exclamação “!” , mas atenção que a Alexa também vai ler isso, por isso o melhor será colocá-lo no principio do texto, ou então colocar qualquer outro caractere ou palavra como condition
.