Node-RED - Enviando mensagens com o Telegram

Fala Moçada!

A quem interessar, segue passo a passo de como configurar e enviar mensagens com o TELEGRAM pelo Node-RED.

Para configurar o TELEGRAM no Home Assistant, veja esse post do nosso amigo Douglas: https://forum.homeassistantbrasil.com.br/t/como-configurar-o-telegram/33

Uma vez configurado o TELEGRAM no HOME ASSISTANT, vamos para o Fluxo no Node-RED…

Desenhei um Fluxo bem simples de exemplo porém entendo que será bastante instrutivo.

Pulando a parte do TIMESTAMP (que não tem segredo…ele serve somente para iniciarmos manualmente esse fluxo de teste), vamos para o node MENSAGEM. Na propriedade “chatId” você deve colocar o “chat_id” que o Douglas ensinou a pegar no Tópico que ele criou (link do Tópico dele lá em cima).
image

image

No campo “content” é a mensagem que você quer transmitir!

Lógica:
msg.payload = {}
msg.payload.chatId = seuchatid
msg.payload.type = ‘message’
msg.payload.content = ‘VIVA!’
return msg;

Esse node é o CORAÇÃO da coisa toda e é necessário instalar um PALETTE para que ele funcione. Vamos lá…
image

Clique nessa opção…
image

Na tela que abrir, clique na aba INSTALL e digite “Telegram”. Instale os dois itens destacados.

Feito isso, adicione o Node “Sender Node” do Telegram e clique no LÁPIS para poder configurar o BOT.

Configure essas opções…que também foram criadas quando você configurou o TELEGRAM no HOME ASSISTANT (novamente o post do Douglas)…

Ao voltar para essa janela, clique em DONE.

Pronto! Agora fazer o DEPLOY e testar, clicando no INJECT e verificando se a mensagem chegou no seu TELEGRAM.
image

Cuidado com os hackers! :sweat_smile:

Abraços,
José Henrique.

3 Curtidas

Oi José, ainda não usa Node-Red eu escrevo todas as automações por código, mas estou achando bem legal aprender Node-Red. Você sabe se com o Node-Red tem como usar fazer como fiz: envia /nome_comando e ele abre uma opção para eu escolher?


Eu gostaria de ler este retorno e tratar dependendo da resposta.
Valeuuu!

Fala Leonardo, na paz?

Demorei para te responder pois tive que estudar um pouco sobre o que você propôs aí…

Imagino ter conseguido chegar na imagem que você mandou:

Sugiro você importar o Fluxo e verificar:

[{"id":"c0a9bd20.b0288","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"f2180fcb.01927","type":"telegram command","z":"c0a9bd20.b0288","name":"","command":"/start","bot":"d64a0e3f.abf5e","strict":false,"x":70,"y":60,"wires":[["9a6745da.0cba88"],[]]},{"id":"9a6745da.0cba88","type":"function","z":"c0a9bd20.b0288","name":"TEXTO 1","func":"var Message = 'Start bot!';\nmsg.payload.content = Message;\nreturn msg;","outputs":1,"noerr":0,"x":220,"y":60,"wires":[["cf4a6fc2.4db92"]]},{"id":"cf4a6fc2.4db92","type":"telegram sender","z":"c0a9bd20.b0288","name":"","bot":"d64a0e3f.abf5e","x":410,"y":60,"wires":[["9adea112.517fb"]]},{"id":"9adea112.517fb","type":"function","z":"c0a9bd20.b0288","name":"OPÇÕES","func":"var opts = {\n//    reply_to_message_id: msg.payload.messageId,\n    reply_markup: JSON.stringify({\n        keyboard: [\n            ['/leo'],\n            ['/jana']],\n            'resize_keyboard': true,\n            'one_time_keyboard': true\n    })\n};\nmsg.payload.content = \"Como está?\";\nmsg.payload.options = opts;  \ncontext.set(\"keyboard\",true);\nreturn msg;","outputs":1,"noerr":0,"x":600,"y":60,"wires":[["c6f475cf.48d5f8"]]},{"id":"c6f475cf.48d5f8","type":"telegram sender","z":"c0a9bd20.b0288","name":"","bot":"d64a0e3f.abf5e","x":790,"y":60,"wires":[[]]},{"id":"53be2ec2.2752c","type":"telegram command","z":"c0a9bd20.b0288","name":"/leo","command":"/leo","bot":"d64a0e3f.abf5e","strict":false,"x":70,"y":140,"wires":[["6bbd969e.7a4978"],[]]},{"id":"62ae73c0.61d05c","type":"telegram command","z":"c0a9bd20.b0288","name":"/jana","command":"/jana","bot":"d64a0e3f.abf5e","strict":false,"x":70,"y":200,"wires":[["6a8ddcb.7501324"],[]]},{"id":"6bbd969e.7a4978","type":"function","z":"c0a9bd20.b0288","name":"VIVA O LEO!","func":"var Message = 'Viva o Leo!';\nmsg.payload.content = Message;\nreturn msg;","outputs":1,"noerr":0,"x":230,"y":140,"wires":[["5131a6b6.2971f8"]]},{"id":"5131a6b6.2971f8","type":"telegram sender","z":"c0a9bd20.b0288","name":"","bot":"d64a0e3f.abf5e","x":450,"y":140,"wires":[[]]},{"id":"6a8ddcb.7501324","type":"function","z":"c0a9bd20.b0288","name":"VIVA A JANA!","func":"var Message = 'Viva a Jana!';\nmsg.payload.content = Message;\nreturn msg;","outputs":1,"noerr":0,"x":240,"y":200,"wires":[["f7ca657c.991848"]]},{"id":"f7ca657c.991848","type":"telegram sender","z":"c0a9bd20.b0288","name":"","bot":"d64a0e3f.abf5e","x":450,"y":200,"wires":[[]]},{"id":"d64a0e3f.abf5e","type":"telegram bot","z":"","botname":"casa04_bot","usernames":"","chatids":"","baseapiurl":"","updatemode":"polling","pollinterval":"300","usesocks":false,"sockshost":"","socksport":"6667","socksusername":"anonymous","sockspassword":"","bothost":"","localbotport":"8443","publicbotport":"8443","privatekey":"","certificate":"","useselfsignedcertificate":false,"verboselogging":false}]

Encontrei esse link que foi de grande valia (inclusive tem o fluxo que o cara fez na descrição do vídeo): https://www.youtube.com/watch?v=wR1zWroRtCg

Espero ter te ajudado! Qualquer dúvida, mande novamente!

image

Abraço,
José Henrique.

Oi José! Oloco até o exemplo já está personalizado pra mim, só Ctrl+C e Ctrl+V :smiley: Ajudou D+ nao sabia nem por onde começar. obrigado por ajudar! Abraço

1 Curtida

Com seu exemplo, consegui fazer a primeira automação no Node Red :slight_smile:
Ele verifique se esta com a luz do quartinho esta ligada e me notifica por Telegram, e agora consigo responder se vou manter ou apagar a luz.


Valeu!!

1 Curtida

Parabéns!! :clap::clap::clap:

meu nodered Não tem esse Timestamp…como faço?

1 Curtida

Olá @eltonnascimento!

Tem sim, ele se chama INJECT.

image

Abraço,
José Henrique.

valeu encontrei…obrigado

Opa Leonardo! Tem como você disponibilizar o flow?

não estou conseguindo passar dessa parte. Quando digito as linhas, na frente da linha: (msg.payload.content = ‘VIVA!’) fica um x, de eu escrever dessa forma (msg.payload.content = “VIVA!”) o x desaparece, mas mesmo assim quando salvo e saio da função fica um triangulo aparecendo no canto superior direito do node com a mensagem: (invalid properties: -noerr)

Olá, @ctm514!

Muito provavelmente tem a ver com as ASPAS que você está usando nessas duas linhas…eu arrumei para você…tente copiar e colar para ver se resolve.

msg.payload.type = ‘message’
msg.payload.content = ‘VIVA!’

Abraço,
José Henrique.

Consegui resolver: no meu caso, pra funcionar ficou assim:

msg.payload = {}
msg.payload.chatId = chat id
msg.payload.type = “message”
msg.payload.content = “VIVA!”
return msg;

1 Curtida

Otimo tutorial!

Mas funcionou somente em meu telefone, outras pessoas estao tentando e nao esta funcionando o bot. Quando manda /start nao responde nada.

Pode me ajudar?

1 Curtida

Olá @edwardo.

Me parece ser algo específico com o Telegram. Talvez o BOT esteja pegando outro ID quando startado em outro telefone e talvez para resolver você tenha que disparar para esses outros BOTs também. Mas tudo no campo do TALVEZ…

Repita o procedimento de configuração do BOT em outro telefone e veja se o ID dele continua o mesmo que o seu. Se ficar diferente, é isso que estou dizendo.

Abraço,
José Henrique.

Obrigado @jhbcosta!

Uma dica, eu tinha a configuração do post do Douglas, e ficava dando erro no log do HA por ter duas instâncias do telegram. Então exclui as configurações de telegram no configuration.yaml e deixei apenas as configurações do nó do telegram dentro do node-red!

Abraços

1 Curtida

Eu acabei fazendo isso também!! obrigado pela dica!!

Abraço,
José Henrique.

Outra que encontrei, instalando os dois nós de telegram, um estava entrando em conflito com o outro aqui no meu! Mesma mensagem na tela de debug, desinstalei e deixei apenas o ‘node-red-contrib-telegrambot’ tanto pra enviar como receber comandos!

Abraços

1 Curtida

Pra quem já tem funcionando pelo configuration, deve apagar lá ou da para deixar os dois?

1 Curtida

Elton,

Para evitar ficar dando erro é melhor retirar do config.

Abraço,
José Henrique.