Bots de conversa de Telegram amb Google Apps Script

Bots de conversa Exemples Dades pràctiques   Recursos CITCEA
Google Apps Script Projectes Interacció   Inici

Control d'un endoll intel·ligent Wi-Fi des de Telegram

Imaginem-nos que tenim un endoll intel·ligent Wi-Fi i el volem controlar des de Telegram. Ens caldria disposar d'informació sobre com podem fer-li arribar l'ordre però pot ser difícil que el fabricant ens la proporcioni. En canvi, és molt més probable que el nostre endoll sigui controlable des d'IFTTT i això ens facilita les coses.

El que farem serà crear un applet d'IFTTT que quan rebi una ordre GET determinada activi o desactivi l'endoll.

Creació de l'applet

Suposem que ja tenim l'endoll. Nosaltres hem fet les proves amb un endoll tp-link HS100 però faríem coses similars amb qualsevol altre model o marca que estigués present a IFTTT. Abans de res, aquest aparell l'hem de configurar, seguint les indicacions del fabricant, per tal de donar-li un nom identificatiu i les dades per tal que es pugui connectar a la nostra xarxa Wi-Fi.

El següent pas serà crear l'applet. A la pàgina d'IFTTT hem creat el nostre compte i anem a l'opció Create. Primer hem de definir el this, picarem el botó Add i cercarem l'opció Webhooks. El més pràctic és escriure'n les primeres lletres al cercador. Triarem l'opció Receive a web request. Li donarem un nom a l'event, per exemple endoll_on i picarem a Create trigger. Ara toca definir el that, per a això picarem a Add i cercarem la marca del nostre dispositiu. Probablement ens sortiran diverses opcions, però ara ens cal triar Turn on. Ens obrirà una finestra en la que haurem d'entrar les nostres dades d'autenticació en el web o l'aplicació del fabricant de l'endoll per permetre que IFTTT hi tingui accés. Un cop feta la connexió, podrem triar quin dels nostres dispositius és el que volem activar. Un cop triat, picarem a Create action i després a Continue i a Finish. Per acabar, ens assegurarem que el nostre applet està activat (Connected).

Ara hem de saber l'adreça a la qual hem d'enviar l'ordre per activar l'applet. A la cantonada superior dreta de la pàgina principal d'IFTTT hi ha un botó per accedir al nostre menú personal. El picarem i triarem l'opció My services se'ns obrirà una pàgina on picarem l'opció Webhooks. S'obrirà una altra pàgina en la que a la part superior dreta trobarem el botó Documentation i si el piquem anirem a parar a la pàgina on ens diran l'adreça que busquem. Aquesta té un aspecte similar a aquest:

https://maker.ifttt.com/trigger/{event}/with/key/^^LFNX4dgsATTQfj2-6kT

En la que haurem de posar el nom de l'event que volem enviar, en el nostre cas quedarà així:

https://maker.ifttt.com/trigger/endoll_on/with/key/^^LFNX4dgsATTQfj2-6kT

Ara, en principi, ja hem acabat a IFTTT i podem passar a preparar l'script. Probablement, però, també voldrem poder desactivar el nostre endoll i, per tant, farem un altre applet en el que la comanda sigui endoll_off.

Primera versió de l'script

Ara hem de crear l'script que activarà o desactivarà l'endoll. Començarem amb una versió molt senzilla que esperarà rebre les comandes /on i /off des de Telegram i, segons la comanda rebuda, activarà o desactivarà l'endoll. El codi serà el següent:

var token = "^^34328844:AAFIpk-e7j3UZtYQYQaTduf4hEhnDqIcNXI"; // API Token de Telegram 
var telegramUrl = "https://api.telegram.org/bot" + token;  // URL que comunica el nostre bot amb Telegram 
var url1 = "https://maker.ifttt.com/trigger/";  // Primera part de l'adreça URL
var url2 = "/with/key/^^LFNX4dgsATTQfj2-6kT";  // Segona part de l'adreça URL
function doPost(e){  // Funció que rep les dades que envia Telegram 
  var acabat = false;
  var data = JSON.parse(e.postData.contents);  // Llegeix les dades rebudes per JSON i les guarda
  var text = data.message.text;  // Comanda enviada
  var id = data.message.chat.id;  // Identificador de la finestra d'on prové el missatge 
  var id_usuari = data.message.from.id; // Identificador de l'usuari
  var id_missatge = data.message.message_id; // Identificador del missatge
  var lang = data.message.from.language_code ;  // Idioma de l'usuari 
  var nom_usr = data.message.from.first_name ;  // Nom de l'usuari
  var location = data.message.location;  // Localització de l'usuari (si es sap) 
  var comanda = text.split("@");  // El signe @ separa la comanda dels paràmetres 
  var cmd = comanda[0];  // Comanda
  if(cmd == '/on'){
    endoll(id,"on");  // Activa l'endoll
	acabat = true;
  }
  if(cmd == '/off'){
    endoll(id,"off");  // Desactiva l'endoll
	acabat = true;
  }
  if(!acabat){
    var resposta = "Comanda desconeguda";
    sendText(id,resposta);  
  }
}
function endoll(chatId,mode){
  if(mode == "on"){  
    UrlFetchApp.fetch(url1 + "endoll_on" + url2);  // Envia la comanda
    sendText(chatId, "Engegant...");  // Respon a l'usuari
  }
  if(mode == "off"){  
    UrlFetchApp.fetch(url1 + "endoll_off" + url2);  // Envia la comanda
    sendText(chatId, "Desconnectant...");  // Respon a l'usuari
  }
}
function sendText(chatId,text_env,keyBoard){  // Funció que prepara per enviar un text o un teclat a Telegram 
  keyBoard = keyBoard || 0;
  if(keyBoard.inline_keyboard || keyBoard.keyboard){
    var data = {
      method: "post",
      payload: {
        method: "sendMessage",
        chat_id: String(chatId),
        text: text_env,
        parse_mode: "HTML",
        reply_markup: JSON.stringify(keyBoard)
      }
    }
  } else {
    var data = {
      method: "post",
      payload: {
        method: "sendMessage",
        chat_id: String(chatId),
        text: text_env,
        parse_mode: "HTML"
      }
    }
  }
  UrlFetchApp.fetch( telegramUrl + '/', data);
}

Segona versió de l'script

Probablement és més còmode facilitar a l'usuari uns botons i que no hagi d'escriure la comanda. Afegirem una comanda /endoll que faci sortir el teclat per primer cop. Atès que les comandes que envia el teclat són /on i /off, també funcionarà en cas que les escriguem directament. El codi serà el següent:

var token = "^^34328844:AAFIpk-e7j3UZtYQYQaTduf4hEhnDqIcNXI"; // API Token de Telegram 
var telegramUrl = "https://api.telegram.org/bot" + token;  // URL que comunica el nostre bot amb Telegram 
var url1 = "https://maker.ifttt.com/trigger/";  // Primera part de l'adreça URL
var url2 = "/with/key/^^LFNX4dgsATTQfj2-6kT";  // Segona part de l'adreça URL
function doPost(e){  // Funció que rep les dades que envia Telegram 
  var data = JSON.parse(e.postData.contents);  // Llegeix les dades rebudes per JSON i les guarda
  var acabat = false;
  if (data.callback_query){  // Si és la resposta a un teclat
    var text = data.callback_query.data;  // Resposta del teclat
    var id = data.callback_query.from.id;  // Identificador de la finestra on s'ha escrit el missatge
  }
  if (data.message){  // Si és una comanda normal
    var text = data.message.text;  // Comanda enviada
    var id = data.message.chat.id;  // Identificador de la finestra d'on prové el missatge 
    var id_usuari = data.message.from.id; // Identificador de l'usuari
    var id_missatge = data.message.message_id; // Identificador del missatge
    var lang = data.message.from.language_code ;  // Idioma de l'usuari 
    var nom_usr = data.message.from.first_name ;  // Nom de l'usuari
    var location = data.message.location;  // Localització de l'usuari (si es sap) 
  }
  var comanda = text.split("@");  // El signe @ separa la comanda dels paràmetres 
  var cmd = comanda[0];  // Comanda
  if(cmd == '/on'){
    endoll(id,"on");  // Activa l'endoll
    teclat(id);  // Envia el teclat
	acabat = true;
  }
  if(cmd == '/off'){
    endoll(id,"off");  // Desactiva l'endoll
    teclat(id);  // Envia el teclat
	acabat = true;
  }
  if(cmd == '/endoll'){
    teclat(id);  // Envia el teclat
	acabat = true;
  }
  if(!acabat){
    var resposta = "Comanda desconeguda";
    sendText(id,resposta);  
  }
}
function teclat(chatId){
  var tecles = {"inline_keyboard":[
    [{"text":"Encén","callback_data":"/on"},{"text":"Apaga","callback_data":"/off"}]
  ]};
  var titol = "Tria opció"
  sendText(chatId,titol,tecles);  // Envia el teclat
}
function endoll(chatId,mode){
  if(mode == "on"){  
    UrlFetchApp.fetch(url1 + "endoll_on" + url2);  // Activa l'endoll
    sendText(chatId, "Engegant...");  // Respon a l'usuari
  }
  if(mode == "off"){  
    UrlFetchApp.fetch(url1 + "endoll_off" + url2);  // Desactiva l'endoll
    sendText(chatId, "Desconnectant...");  // Respon a l'usuari
  }
}
function sendText(chatId,text_env,keyBoard){  // Funció que prepara per enviar un text o un teclat a Telegram 
  keyBoard = keyBoard || 0;
  if(keyBoard.inline_keyboard || keyBoard.keyboard){
    var data = {
      method: "post",
      payload: {
        method: "sendMessage",
        chat_id: String(chatId),
        text: text_env,
        parse_mode: "HTML",
        reply_markup: JSON.stringify(keyBoard)
      }
    }
  } else {
    var data = {
      method: "post",
      payload: {
        method: "sendMessage",
        chat_id: String(chatId),
        text: text_env,
        parse_mode: "HTML"
      }
    }
  }
  UrlFetchApp.fetch( telegramUrl + '/', data);
}

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.