Interactions/questions avec télégram

Salut il y a un début de réponse ici

2 « J'aime »

Tu as etais plus vite que moi.

J’ai suivi ce tuto pour mettre en place les notifications Telegram.
Ce que j’aimerais maintenant c’est lancer une action depuis Telegram.

Je suis preneur, je ne connais pas Nodered. Mais cela semble répondre à mon besoin.

Bonjour,

voici un flow Télégram totalement opérationnel.
n’oubliez pas :

d’ajouter dans Nodered le node :
image

de déclarer votre Bot sous nodered,
image

de changer le chat_id dans la fonction message ici :
image

et le flow :

[{"id":"401ffa1a872dac4d","type":"tab","label":"Test Telegram","disabled":false,"info":"","env":[]},{"id":"706a7404ebbd160f","type":"telegram command","z":"401ffa1a872dac4d","name":"Télégram Commande help","command":"help","description":"","registercommand":false,"language":"","scope":"default","bot":"b97e9b6fa2a7f268","strict":false,"hasresponse":true,"useregex":false,"removeregexcommand":false,"outputs":2,"x":170,"y":120,"wires":[["9c7335ea393b150c"],[]]},{"id":"9c7335ea393b150c","type":"function","z":"401ffa1a872dac4d","name":"Message","func":"msg.method = \"sendMessage\";\nvar helpMessage = \"commandes :\\r\\n\";\nhelpMessage += \"help: ce message\\r\\n\";\nhelpMessage += \"status: état alarme\\r\\n\";\nhelpMessage += \"bat: état batteries\\r\\n\";\nmsg.payload = {\n    chatId: VOTRE_CHAT_ID,\n    sentMessageId: 111,\n    type: 'message',\n    content: helpMessage,\n};\nreturn msg;","outputs":1,"timeout":"","noerr":1,"initialize":"","finalize":"","libs":[],"x":480,"y":120,"wires":[["07b9a500d5f671b2"]]},{"id":"1c4e68f7ec336554","type":"telegram command","z":"401ffa1a872dac4d","name":"Télégram Commande bat","command":"bat","description":"","registercommand":false,"language":"","scope":"default","bot":"b97e9b6fa2a7f268","strict":false,"hasresponse":true,"useregex":false,"removeregexcommand":false,"outputs":2,"x":170,"y":220,"wires":[["1c2541bc85bfb996"],[]]},{"id":"1c2541bc85bfb996","type":"api-current-state","z":"401ffa1a872dac4d","name":"Nombre de batteries low","server":"2c5088ebae4d463e","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.nombre_batteries_low","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"nb_bat_decharge","propertyType":"msg","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":450,"y":220,"wires":[["e01a1f6f4913ce98"]]},{"id":"e01a1f6f4913ce98","type":"switch","z":"401ffa1a872dac4d","name":"Statuts Batteries Low","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"gte","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":700,"y":220,"wires":[["d781790922df60a6"],["26f3c8d7de65e01c"]]},{"id":"d781790922df60a6","type":"function","z":"401ffa1a872dac4d","name":"Message","func":"msg.method = \"sendMessage\";\nmsg.payload = {\n    chatId: VOTRE_CHAT_ID,\n    sentMessageId: 111,\n    type: 'message',\n    content: \"Toutes les batteries sont OK\",\n};\nreturn msg;","outputs":1,"timeout":"","noerr":1,"initialize":"","finalize":"","libs":[],"x":920,"y":180,"wires":[["07b9a500d5f671b2"]]},{"id":"26f3c8d7de65e01c","type":"function","z":"401ffa1a872dac4d","name":"Message","func":"msg.method = \"sendMessage\";\nvar helpMessage = \"Attention - Nb de batteries déchargées : \";\nhelpMessage += msg.nb_bat_decharge;\nmsg.payload = {\n    chatId: VOTRE_CHAT_ID,\n    sentMessageId: 111,\n    type: 'message',\n    content: helpMessage,\n};\nreturn msg;","outputs":1,"timeout":"","noerr":1,"initialize":"","finalize":"","libs":[],"x":920,"y":240,"wires":[["07b9a500d5f671b2"]]},{"id":"07b9a500d5f671b2","type":"telegram sender","z":"401ffa1a872dac4d","name":"","bot":"b97e9b6fa2a7f268","haserroroutput":false,"outputs":1,"x":1210,"y":120,"wires":[[]]},{"id":"b97e9b6fa2a7f268","type":"telegram bot","botname":"MON_BOT","usernames":"","chatids":"","baseapiurl":"","updatemode":"polling","pollinterval":"300","usesocks":false,"sockshost":"","socksprotocol":"socks5","socksport":"6667","socksusername":"anonymous","sockspassword":"","bothost":"","botpath":"","localbotport":"8443","publicbotport":"8443","privatekey":"","certificate":"","useselfsignedcertificate":false,"sslterminated":false,"verboselogging":false},{"id":"2c5088ebae4d463e","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

mais j’avais déjà donné un exemple ici :
https://forum.hacf.fr/t/dialoguer-avec-votre-maison-via-telegram-et-integrations-ha/12597/63

après, il y a peut etre plus simple, mais cela fait longtemps que cela fonctionne chez moi.

@Lapinou59 J’ai ajouté le Node configurer avec mon Token et ID de chats.
J’ai réussi à envoyer un message avec des paramètres de services et d’entités (en gros, à envoyer la météo suite à une demande) suite à la réception d’une commande dans Télégram.
Pour pousser plus loin, je souhaiterais que Télégram me réponde par un « poll » et exécuter des actions différentes en fonction des réponses.
Pour cela, j’ai réussi à faire répondre par des boutons cliquables, mais je ne sais pas comment récupérer la valeur répondue pour ensuite lancer des actions différentes.

regarde l’exemple que j’ai donné dans le lien, il y a un exemple de questions/réponses

J’ai beaucoup de mal à comprendre le code partagé.
Il doit aller où et comment est-il formaté ?

le code est formaté comme un flow nodered, il ne faut pas le lire directement, mais l’importer dans nodered et il va te recréer le flow.
menu de droite en haut, importer
image

et tu auras ce fow dans nodeRed

les triangles rouge sont la ou tu dois faire la conf que j’ai mentionné plus haut., sans oublier de définir ton Télégram dans les nodes aux 2 extrémités

J’ai réussi à importer le flux.
Par contre, je n’arrive pas du tout à avoir les interactions qui fonctionnent.
J’ai configuré avec mon bot télégram.
Mais après, mon bot ne répond plus, même à une simple interaction commande→réponse simple.

J’ai ce message d’erreur : Logger: homeassistant.components.telegram_bot.polling
Source: components/telegram_bot/polling.py:34
Integration: Telegram bot
First occurred: 10:35:46 (116 occurrences)
Last logged: 11:39:13

Update « None » caused error: « Conflict: terminated by other getUpdates request; make sure that only one bot instance is running »

ton bot est défini ailleurs dans d’autres automations ?
car il te dit de regarder si tu n’as qu’une seule instance de bot telegram qui tourne actuellement…:« make sure that only one bot instance is running »,

Bien vu, j’avais des automations avec le bot telegram d’actifs. J’ai donc désactivé ces automations.
Si, je comprends bien, je peux créer plusieurs flux NodeRed avec le bot telegram mais pas des flux NodeRed et des automations, le tout utilisant le bot. C’est soit l’un soit l’autre.

Dans ma fonction message, j’ai le contenu suivant :

msg.method = "sendMessage";
var helpMessage = "La météo au travail est ";
helpMessage += msg.condition += msg.text += msg.temperature;
msg.payload = {
    chatId: 511626576,
    sentMessageId: 111,
    type: 'message',
    content: helpMessage,
};
return msg;

Comment je peux mélanger du contenu de variable avec du texte fixe ? Pour avoir un résultat du type : La météo est $conditions pour une température de $temperature

si tu as importé mon flow, tu as un exemple dedans.
image

Merci pour l’aide.
Voici mon flux qui me donne la météo à la maison ou au travail en fonction de mon choix.


Avec le message type :

msg.method = "sendMessage";
var helpMessage = "La météo au travail est ";
helpMessage += msg.condition;
helpMessage += " pour une température de "
helpMessage += msg.temperature
helpMessage += "°C, avec un ressenti de ";
helpMessage += msg.temperature_ressentie;
helpMessage += "°C";
msg.payload = {
    chatId: XxXxX,
    sentMessageId: 111,
    type: 'message',
    content: helpMessage,
};
return msg;

Ça se rapproche petit à petit de ce que je souhaite.
Je souhaiterais savoir s’il est possible de déclencher les actions avec des synonymes ou des mots ressemblants, des phrases. Par exemple « quelle est la météo du jour » ou « quel est le temps »
Mais voulant utiliser par la suite une tablette pour contrôler le tout, il faut que ce soit plus des boutons cliquables que tu texte à renseigner.

Il n’est pas possible d’avoir plusieurs flux utilisant le bot telegram ?

dans nodered ? oui tout a fait

Je tiens à remercier @LeLapinFou pour son aide et la découverte de NodeRed, qui répond en grande partie à mon besoin et que j’utiliserais par la suite.
Et je remercie aussi @McFly pour son aide.

Voici donc mon fichier automation.yml pour la partie intéraction avec des boutons cliquables dans telegram :

- id: c8d4b54fc62040b98c186596a15b3535
  alias: Test bouton telegram
  trigger: []
  condition: []
  action:
  - service: notify.lilp_bot
    data:
      title: 'Météo :'
      message: Pour quelle adresse voulez-vous recevoir les prévisions ?
      data:
        inline_keyboard:
        - Maison:/maison, Travail:/travail
- id: 6123e17b81fd438b96b85b50b31a4439
  alias: Météo maison
  description: Envoi la météo à la maison
  trigger:
  - platform: event
    event_type: telegram_callback
    event_data:
      command: /maison
  action:
  - service: telegram_bot.edit_replymarkup
    data:
      message_id: "{{ trigger.event.data.message.message_id }}"
      chat_id: !secret id_telegram
      inline_keyboard:
  - service: notify.lilp_bot
    data:
      title: Météo à la maison
      message: La météo du jour à la maison sera {{states('sensor.openweathermap_weather')}}
        pour une température de {{states('sensor.openweathermap_forecast_temperature')}}°C
        avec un ressenti de {{states('sensor.openweathermap_feels_like_temperature')}}°C
        et une probabilité de pluie de {{states('sensor.openweathermap_forecast_precipitation_probability')}}%.
  initial_state: true
  mode: single
2 « J'aime »

Bonjour à tous,
Tout d’abord merci pour vos contribution, notamment les explications de @LeLapinFou j’ai pu constater que ces flows marchent super bien. Cependant je suis débutant en node red et j’aurais voulu savoir s’il est possible de récupérer l’Id de celui qui envoie le message pour lui répondre automatiquement? Je m’explique. Nous sommes 2 utilisateurs avec 2 id différents sur le même bot. Ce que je voudrais c’est que la réponse du flow arrive uniquement chez celui qui envoie la commande plutot que d’écrire un chatid en dur dans le message

Merci d’avance pour votre aide

Bonjour,

Je ne l’utilise pas personnellement, mais de tête le msg.payload.chatId contient l’id du bot qui fait la demande entrante.