Telegram бот связанный с Google Таблицей от t.me/google_sheets

Eugeny Namokonov
4 min readJun 9, 2020

Создаём бота с нуля и за 15 минут

На июль 2020 наш бот умеет:

  1. Сохранять в Таблицу все сообщения, которые пишут ему и которые пишут в чаты, в которых он есть
  2. Сохранять все файлы / фото на Google Диск
  3. ❗️Отправлять сообщения из Таблицы в чаты и пользователям

Друзья, в статье разбираем, как создать Telegram бота: что нужно сделать на стороне Telegram и что нужно сделать на стороне Google Таблиц.

Таблицу с примером и кодом найдете ниже, а ваш опыт нам не нужен — инструкция подробная и с ней справится каждый. Поехали :)

Мы уже четвёртый год пишем про Google Таблицы скрипты в Telegram, это наш канал, это его оглавление, а это наш чат и в него можно прийти, если будут вопросы

Первая часть. Инструкция по созданию.

Сначала создадим бота на стороне Telegram

1) заходим в Telegram, ищем пользователя t.me/BotFather

2) создаем нового бота командой /newbot

3) выбираем имя и username, username должен заканчиваться на _bot

наш бот, имя: logger, username: logger_log_bot

4) копируем токен бота (на скриншоте он красным)

5) открываем нашего бота в @botfather и идём
> bot settings > group privacy > turn on

Включение нужно, чтобы бот смог видеть всё, что происходит в чатах.

На стороне Таблиц

ВНИМАНИЕ! Если у вас не заработал бот, то проблема в этом: любое изменение кода нужно публиковать под новой версией, не просто изменить код и сохранить, а опубликовать и при этом выбрать новую версию;

1) копируете к себе на Google Диск (файл > создать копию) нашу Таблицу со скриптом

2) открываете редактор скриптов в скопированной таблице

3) опубликовать > развернуть как веб-приложение
(в первый раз нужно будет дать необходимые разрешения на запуск)

4) настройки публикации должны быть такими (email будет ваш)

5) копируем ссылку опубликованного приложения

6) переходим в редакторе скриптов на вкладку botsettings и заполняем 2, 3 и 4 строки

2 строка — токен вашего бота, который вы получили от botfather (первая часть)3 строка — ссылка на развернутое приложение (вы её скопировали выше)4 строка — ID вашей скопированной таблицы
ID Таблицы берём так

7) после заполнения сохраняем код и запускаем скрипт set_webhook

Это привяжет токен бота к развернутому выше приложению.

Всё. Если все сделано правильно, то система начнет работать :)

Вторая часть. А как это всё работает?

В Google Таблице — скрипт, мы его разворачиваем как веб-приложение и получаем адрес этого приложения.

Дальше с помощью скрипта setWebhook привязываем токен вашего бота к этому приложению.

После этого любая активность, которую видит бот, к примеру — вы ему написали или добавили в группу, отправляется на адрес развернутого приложения.

Вот я пишу боту “какой-то текст сообщения”, и на адрес приложения приходит пришел объект такого формата:

чёрт, теперь вы знаете мой юзернейм и сможете мне написать

Скрипт в Google Таблице парсит этот объект, вытаскивает имя пользователя, юзернейм, сообщение, chat_id и всё, остальное, что мы будем использовать в скрипте.

//простое обращение к элементам объекта по ключам)  const contents = JSON.parse(e.postData.contents);
const chatId = contents.message.chat.id;
const user = contents.message.chat.username;
const userName = contents.message.chat.first_name;
const messageText = contents.message.text;

Дальше скрипт добавляет дату и вставляет после последней заполненной строки в вашу Таблицу на лист “Лог сообщений”

//объявляем переменную sheet, кладём в неё обращение к листу     const sheet = 
SpreadsheetApp.openById(ssID).getSheetByName("Лог сообщений");
//создаем массив и наполняем
const data =
[[new Date(), chatId, user, userName, messageText, contents]];
//определяем последнюю заполненную строку
const lastrow = sheet.getLastRow();

//ну и определяем диапазон вставки и заполняем его
sheet.getRange(lastrow+1, 1, 1, data[0].length).setValues(data);

Ссылки:

core.telegram.org

https://developers.google.com/apps-script/reference/spreadsheet

Таблица со скриптом и ботом

--

--