/ telegram

Простой разговаривающий бот для Telegram на Google Script

Сегодня я расскажу как легко и просто сделать бота[1], который не просто делает перепосты чего-либо, а отвечает на команды. Раньше я был уверен что для создания такого обязательно нужен свой сервер, на котором что-то там крутится, но оказывается вполне можно обойтись и без этого.

Сперва бота надо создать, процесс тривиальный и описан здесь. В итоге @botfather даст токен вида 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw, который сохраняем в надежном месте.

--------------2018-05-06---23.26.23

Открываем Google Apps Script, создаём новый проект.

--------------2018-05-06---23.15.31

Вставляем туда следующее[1:1]:

function doPost(e) {
  
  // YOUR telegram api token
  var API_TOKEN = 'ЗДЕСЬ_ТВОЙ_ТОКЕН_ОТ_BOTFATHER';
  
  // function to send html-formatted text to telegram. prigoditsya!
  function t_post_html(posttext) {
    var payload = {
          'method': 'sendMessage',
          'chat_id': String(chatId),
          'text': posttext,
          'parse_mode': 'HTML'
        }
        var data = {
          "method": "post",
          "payload": payload
        }
    // vzhukh!
    UrlFetchApp.fetch('https://api.telegram.org/bot' + API_TOKEN + '/', data);
  }

  // waiting for a telegram command
  var update = JSON.parse(e.postData.contents);

  // get telegram message details
  if (update.hasOwnProperty('message')) {
    // yep, a message, not photo or reply!
    var msg = update.message;
    var chatId = msg.chat.id;

    // checking if message is a command, else just echoing
    if (msg.hasOwnProperty('entities') && msg.entities[0].type == 'bot_command') {
        // prigodilos!
        t_post_html('Command is ' + msg.text)
    } else { t_post_html('You say ' + msg.text) }
  }
}

Там вроде всё должно быть понятно, даже комментарии есть.

--------------2018-05-06---23.44.02

Разворачиваем, соглашаемся со всем и обязательно сохраняем URL веб-приложения отсюда:

--------------2018-05-06---23.48.13

После этого запускаем webhook, благо добрый Google пока ещё даёт такую возможность. В своём браузере открываем ссылку: https://api.telegram.org/botЗДЕСЬ_ТОКЕН_ИЗ_НАЧАЛА/setWebHook?url=ТУТ_ССЫЛКА_КОТОРУЮ_ТОЛЬКО_ЧТО_СОХРАНИЛИ

В итоге оно будет выглядеть примерно так:

https://api.telegram.org/bot236043192:AAFt5GO3AeEy90pNbHyFlyz9YdwTRb3DF8Y/setWebHook?url=https://script.google.com/macros/s/APfycbxKXmOkd8G5POgRumE3yUT7KJPucS-JFeaEYnVMV3sIAKjZA_5q/exec

Если все прошло хорошо, ответ сервера будет: {"ok":true,"result":true,"description":"Webhook was set"}

После этого бот оживает и начинает разговаривать:

--------------2018-05-06---23.57.33

Оно правда живое, он вот тут: @ptathtestbot. Google script позволяет делать удивительные вещи, например буквально за полчаса я обучил его показывать статистику своих майнеров на Ethermine.

Функционал webhooks, который есть у IFTTT, сделать такое никак не позволяет. Конструкторы ботов внушают меньше доверия, чем Google, но всегда есть вероятность что когда-нибудь корпорация добра прикроет свой сервис.


  1. Я ненастоящий программист =) ↩︎ ↩︎