Telegram бот связанный с Google Таблицей от t.me/google_sheets
Создаём бота с нуля и за 15 минут
На июль 2020 наш бот умеет:
- Сохранять в Таблицу все сообщения, которые пишут ему и которые пишут в чаты, в которых он есть
- Сохранять все файлы / фото на Google Диск
- ❗️Отправлять сообщения из Таблицы в чаты и пользователям
Друзья, в статье разбираем, как создать Telegram бота: что нужно сделать на стороне Telegram и что нужно сделать на стороне Google Таблиц.
Таблицу с примером и кодом найдете ниже, а ваш опыт нам не нужен — инструкция подробная и с ней справится каждый. Поехали :)
Мы уже четвёртый год пишем про Google Таблицы скрипты в Telegram, это наш канал, это его оглавление, а это наш чат и в него можно прийти, если будут вопросы
Первая часть. Инструкция по созданию.
Сначала создадим бота на стороне Telegram
1) заходим в Telegram, ищем пользователя t.me/BotFather
2) создаем нового бота командой /newbot
3) выбираем имя и username, username должен заканчиваться на _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 вашей скопированной таблицы
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);
Ссылки:
https://developers.google.com/apps-script/reference/spreadsheet