Добавить в корзинуПозвонить
Найти в Дзене

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

Сегодня я расскажу как легко и просто сделать бота, который не просто делает перепосты чего-либо, а отвечает на команды. Раньше я был уверен что для создания такого обязательно нужен свой сервер, на котором что-то там крутится, но оказывается вполне можно обойтись и без этого. Сперва бота надо создать, процесс тривиальный и описан здесь. В итоге @botfather даст токен вида 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw, который сохраняем в надежном месте. Открываем Google Apps Script, создаём новый проект. Вставляем туда следующее: 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 } //

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

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

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

-2

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

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) }
}
}

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

-3

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

-4

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

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

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

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

-5

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