Como colocar o Google Home/Mini a falar as mensagens enviadas a partir do telegram (aws polly)

No seguimento de uma conversa no Discord, alguns membros do Staff disseram que era possível Google Home/mini falarem o que nós escrevessemos no telegram.
Neste Pequeno guia vou indicar que nodes precisam para efectuar o flow.

Neste caso, o meu TTS é a Polly da Amazon mas podem usar o que preferirem.

Palett´s necessárias:


Após as palletes instaladas

Nodes necessários:

1x - command node
2x - string node
1x - change node
1x - service node

Flow

Iremos começar pelo command node

Primeiro ir a configurações do node

Colocar o nomde do vosso bot e o vosso token

Retornar às propriedades do node no command escolher .regular expression e escrever [gG]hm.

De seguida configurar UM dos string node , fazer exactamente o que está na imagem seguinte:


Posteriormente configurar o change node, fazer exactamente o que está também na imagem seguinte:

De seguida configurar o último string node, conforme esta na imagem.

No prepend escrevem: <speak><amazon:auto-breaths frequency='medium'>
No append escrevem: </amazon:auto-breaths></speak>

Mais abaixo onde aparece isto:

Colocar : payload.data.message

Por fim configurar o configurar o call service node com os vossos dados:


Domain colocam TTS
Service colocam amazon_polly_say
Entity_iD colocam o nome que deram ao vosso media player

Como funciona?

No telegram dentro do teu bot escreves uma mensagem que queiras que o google fale…
A mensagem têm que começar neste caso SEMPRE pela palavra ghm ou Ghm

Exemplo: ghm olá aprendi este node na comunidade portuguesa de home assistant

O Google irá falar exactamente o que escreverem no bot do telegram.

:warning: PS: Este flow está mais direccionado para quem usa Polly da amazon.

Créditos: @ricain

3 Likes

Isso era fixe se funcionasse sem ser por node e polly. Para mandar recados para casa … Hihihihihi

E dá, basta usares esse node depois do node string:
imagem

Com node-red a unica limitação é a imaginação de cada um.

1 Like

@RodolfoVieira, Dizes que no ultimo strind node para fazer conforme imagem. Podias colocar novamente imagem? Outra questão, Nesse “preprend” e “append” quais as configurações para quem tem Google Home/Mini?

@RodolfoVieira Também gostava de saber como usar no Google Home mini…

As configurações são as mesmas para o google home/mini, basta seguir o tutorial está lá tudo para funcionar.
@fsilva80 é so seguir o tutorial.

@RodolfoVieira, esta parte se assim for para o Google Home não funciona. Deve ser diferente não?
Faz uploud da foto também que te deves ter esquecido dela :wink:

Não estou a entender o que falas…
Isto dá tanto para o google home/mini etc…
Já configuraste a polly?

Eu penso já ter feito tudo.
Configurei o Polly…

   - platform: amazon_polly
     aws_access_key_id: !secret aws_access_key_id
     aws_secret_access_key: !secret aws_secret_access_key
    #  text_type: ssml
     voice: Cristiano

Comentei o text_type por causa de erros no log

- alias: teste de horas
  trigger:
    platform: time
    at: '16:44:00'
  action:
    - service: tts.amazon_polly_say
      data_template:
        entity_id: media_player.cozinha_speaker
        message: >
                 <speak><amazon:auto-breaths frequency='medium'>OLÁ TUDO BEM? É AGORA MEIO DIA.</amazon:auto-breaths></speak>

Meti o home mini e ao despoletar a automação faz o barulho como se fosse falar, mas não diz a mensagem…

Não estou a ver o que fiz mal…

@karma ja fiz upload da foto.

@fsilva80 não sei se percebi bem o que queres fazer.
Mas este tutorial é para mandar mensagens para o google através do telegram.
Não precisas dessa automação.

eu sei.
A automação era para ter a certeza de que estava a funcionar…

Não percebo o que está a acontecer.
Parece estar tudo a funcionar, no entanto não diz a mensagem.
Já testei no google home mini e também na mibox s, começa a fazer cast mas nada de mensagens…

Tenho uma função só para teste:

msg.payload = {};
msg.payload.data = {};
msg.payload.data.entity_id = {};
msg.payload.data.message ={};

var myArray = [
 "teste um",
 "teste dois",
 "teste três",
 "teste quatro",
 "teste cinco" 
];

//Google
//var randomItem = myArray[Math.floor(Math.random()*myArray.length)];

//Amazon Poly
var randomItem = "<speak><amazon:auto-breaths frequency='medium'>" + myArray[Math.floor(Math.random()*myArray.length)] + "</amazon:auto-breaths></speak>";

msg.payload.data.entity_id = "media_player.mibox4";
msg.payload.data.message = randomItem;


return msg;

Call service:

EDIT:
Já detectei o erro, era no command node…
Agora dá-me isto:

"Call-service API error. Error Message: An error occurred (InvalidSsmlException) when calling the SynthesizeSpeech operation: Invalid SSML request"

vou desactivar a linha “text_type: ssml”

Agora já não dá erro, no entanto aparece-me isto e nada de mensagem:

msg.payload : Object
object
data: object
entity_id: "media_player.cozinha_speaker"
message: "<amazon:auto-breaths frequency=‘medium’>[object Object]</amazon:auto-breaths>"

Flow:

[{"id":"41a2b96d.855b48","type":"telegrambot-command","z":"fb9c64cd.76c5d8","name":"","bot":"d3570a42.29e278","command":"[gG]hm.*","commandType":"re","commandCase":false,"x":212.41869354248047,"y":960.6560192108154,"wires":[["ec3db3b0.697f4"]]},{"id":"ec3db3b0.697f4","type":"string","z":"fb9c64cd.76c5d8","name":"","methods":[{"name":"replaceAll","params":[{"type":"str","value":"ghm"},{"type":"str","value":""}]},{"name":"replaceAll","params":[{"type":"str","value":"Ghm"},{"type":"str","value":""}]}],"prop":"payload","propout":"payload","object":"msg","objectout":"msg","x":442.4186477661133,"y":971.6934795379639,"wires":[["b9d26f5.ff62d9"]]},{"id":"b9d26f5.ff62d9","type":"change","z":"fb9c64cd.76c5d8","name":"","rules":[{"t":"delete","p":"payload","pt":"msg"},{"t":"set","p":"payload.data.entity_id","pt":"msg","to":"media_player.cozinha_speaker","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":698.4124221801758,"y":970.2622299194336,"wires":[["febce92a.217be8"]]},{"id":"febce92a.217be8","type":"string","z":"fb9c64cd.76c5d8","name":"","methods":[{"name":"prepend","params":[{"type":"str","value":"<amazon:auto-breaths frequency=‘medium’>"}]},{"name":"append","params":[{"type":"str","value":"</amazon:auto-breaths>"}]}],"prop":"payload","propout":"payload.data.message","object":"msg","objectout":"msg","x":899.0186996459961,"y":974.62473487854,"wires":[["e43fe839.aa9188"]]},{"id":"e43fe839.aa9188","type":"api-call-service","z":"fb9c64cd.76c5d8","name":"Polly","server":"dc51bcd2.9cacd","version":1,"debugenabled":false,"service_domain":"tts","service":"amazon_polly_say","entityId":"media_player.cozinha_speaker","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1081.0187301635742,"y":976.0247192382812,"wires":[["541a08ed.2c74f8"]]},{"id":"d3570a42.29e278","type":"telegrambot-config","z":"","botname":"node_red_2_bot","usernames":"","chatIds":"","pollInterval":"300"},{"id":"dc51bcd2.9cacd","type":"server","z":"","name":"Home Assistant","legacy":false,"hassio":false,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true}]

Sim, tenho o polly.
Dá-me erro em API “call service”.
Segue foto:
https://gyazo.com/7389b6166f43520c3b150918693f4fe9

E o meu fow:

[{"id":"44ddeb7.8cc0014","type":"api-call-service","z":"5b2e57be.c6e928","name":"polly","server":"","version":1,"debugenabled":false,"service_domain":"tts","service":"amazon_polly_say","entityId":"media_player.sala_de_estar","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":790,"y":940,"wires":[["ca4bd518.74dbb8"]]},{"id":"7e732236.6bfcfc","type":"string","z":"5b2e57be.c6e928","name":"","methods":[{"name":"prepend","params":[{"type":"str","value":"<speak><amazon:auto-breaths frequency=‘medium’>"}]},{"name":"append","params":[{"type":"str","value":"</amazon:auto-breaths>"}]}],"prop":"payload","propout":"payload","object":"msg","objectout":"msg","x":630,"y":940,"wires":[["44ddeb7.8cc0014"]]},{"id":"b98dc1bc.d7bc8","type":"change","z":"5b2e57be.c6e928","name":"","rules":[{"t":"delete","p":"payload","pt":"msg"},{"t":"set","p":"payload.data.entity_id","pt":"msg","to":"media_player.sala_de_estar","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":460,"y":940,"wires":[["ca4bd518.74dbb8","7e732236.6bfcfc"]]},{"id":"c42fdbae.2b4568","type":"string","z":"5b2e57be.c6e928","name":"","methods":[{"name":"replaceAll","params":[{"type":"str","value":"ghm"},{"type":"str","value":""}]},{"name":"replaceAll","params":[{"type":"str","value":"Ghm"},{"type":"str","value":""}]}],"prop":"payload","propout":"payload","object":"msg","objectout":"msg","x":290,"y":940,"wires":[["b98dc1bc.d7bc8"]]},{"id":"371f9f72.621bc","type":"telegrambot-command","z":"5b2e57be.c6e928","name":"","bot":"","command":"[gG]hm.*","commandType":"re","commandCase":false,"x":110,"y":940,"wires":[["c42fdbae.2b4568"]]}]

Está lá escrito o motivo do erro, falta a message dentro de data.

@karma na verdade o que o @j_assuncao disse está correcto e foi um erro meu no tutorial esqueci-me de referir esse passo.
Já está actualizado.
Tens que no 2º String node , mesmo cá em baixo do node adicionar:
payload.data.message

Podes ver no tutorial como fazer que está actualizado.

1 Like

Mas não deveria ficar em branco? como a mensagem é escrita aleatoriamente no telegram

Não sei ao que te estás a referir do “não deveria ficar em branco” podes mostrar o que te referes?

Já fiz essa alteração no 2º String node.
https://gyazo.com/abd6e709c6badba5cf1dcc12b0d4a32c

Mas fiquei sem perceber bem, no call service devo escrever alguma coisa no “data”?

Não, não tens que escrever nada no data…coloca de novo aqui o flow

[{"id":"c42fdbae.2b4568","type":"string","z":"5b2e57be.c6e928","name":"","methods":[{"name":"replaceAll","params":[{"type":"str","value":"ghm"},{"type":"str","value":""}]},{"name":"replaceAll","params":[{"type":"str","value":"Ghm"},{"type":"str","value":""}]}],"prop":"payload","propout":"payload","object":"msg","objectout":"msg","x":290,"y":940,"wires":[["b98dc1bc.d7bc8"]]},{"id":"b98dc1bc.d7bc8","type":"change","z":"5b2e57be.c6e928","name":"","rules":[{"t":"delete","p":"payload","pt":"msg"},{"t":"set","p":"payload.data.entity_id","pt":"msg","to":"media_player.sala_de_estar","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":460,"y":940,"wires":[["ca4bd518.74dbb8","7e732236.6bfcfc"]]},{"id":"7e732236.6bfcfc","type":"string","z":"5b2e57be.c6e928","name":"","methods":[{"name":"prepend","params":[{"type":"str","value":"<amazon:auto-breaths frequency=‘medium’>"}]},{"name":"append","params":[{"type":"str","value":"</amazon:auto-breaths>"}]}],"prop":"payload","propout":"payload.data.message","object":"msg","objectout":"msg","x":630,"y":940,"wires":[["44ddeb7.8cc0014"]]},{"id":"44ddeb7.8cc0014","type":"api-call-service","z":"5b2e57be.c6e928","name":"polly","server":"","version":1,"debugenabled":false,"service_domain":"tts","service":"amazon_polly_say","entityId":"media_player.sala_de_estar","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":790,"y":940,"wires":[["ca4bd518.74dbb8"]]}]

Copyright © 2017-2020. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade