Как только я познакомился с Google Apps Script я начал учиться писать ботов Telegram. Основной проблемой было то, что после каждого изменения кода необходимо делать новое развертывание веб-приложения, чтобы все изменения в коде вступили в силу.
Мне, как новичку, это приходилось делать каждые две строчки кода плюс дебагинг того, что не работало 😅
Чуть позже я узнал про библиотеки в Google Apps Script и решил воспользоваться этим функционалом.
Решение проблемы (кратко)
- Создаем основной проект.
- Развертываем его как библиотеку.
- Создаем дополнительный проект, который будет запускать основной.
- Подключаем библиотеку TGBot по идентификатору скрипта.
- Создаем фунцию doPost():
function doPost(e) {
TGBot.doPost(e)
}
- Развертываем как веб-приложение.
- Устанавливаем вебхук телеграм на адрес URL нашего веб-приложения:
function setWebhook() {
return UrlFetchApp.fetch("https://api.telegram.org/bot" + tokenTelegram + '/setWebhook?url=' + webAppUrl);
}
Решение проблемы (подробно)
Создаем новую Google Таблицу по ссылке https://docs.google.com/spreadsheets/.
Переименовываем и открываем в верхнем меню Расширения
→ Apps Script
.
Здесь будет находиться основной функционал нашего бота:
const tokenTelegram = "123412321233"; // Токен телеграм бота
const webAppUrl = ""; // Здесь пока пусто
function setWebhook() {
let response = UrlFetchApp.fetch("https://api.telegram.org/bot" + tokenTelegram + '/setWebhook?url=' + webAppUrl);
Logger.log('telegram response status is ' + response.getContentText());
}
function doPost(e) {
const ctx = JSON.parse(e.postData.contents);
const ss = SpreadsheetApp.openById(spreadsheetsId); // Открываем документ
const sheetLog = ss.getSheetByName("log"); // Находим лист с именем "log"
sheetLog.getRange(1, 1).setValue(JSON.stringify(ctx, null, 5)); // в ячейку А1 пишем ответ бота
}
Развёртываем приложения как библиотеку
Кликаем Начать развертывание
→ Новое развертывание
.
Выбираем тип развертывания → Библиотека
После развертывания идем в Настройки проекта и копируем Идентификатор скрипта:
Создаем наш запускатор
Создаем новый проект по ссылке https://script.google.com/home.
- В меню Библиотеки выбираем
+ Добавить библиотеку
- Вставляем ранее скопированный идентификатор скрипта
- Кликаем по кнопке
Найти
- Версию оставляем Последний снимок кода
- В поле
Идентификатор
пишем сокращенное название с помощью которого мы сможем обращаться к нашей библиотеке. Я выбрал TGBot.
После всех настроек кликаем по кнопке Добавить
В скрипте код.gs пишем функцию:
function doPost(e) {
TGBot.doPost(e)
}
Настал черед для развертывания, но уже как веб-приложение.
Кликаем Начать развертывание
→ Новое развертывание
.
Выбираем тип развертывания → Веб-приложение
Пишем Описание
(не обязательно), выбираем У кого есть доступ
→ Все
(!это важно) и кликаем Начать развертывание
.
Скопируем адрес URL приложения, кликнув по кнопке ОК
Настраиваем наш основной проект
В const webAppUrl = "";
записываем адрес URL приложения с предыдущего шага и устанавливаем вебхук телеграм. Для этого необходимо выполнить функцию setWebhook()
.
const tokenTelegram = "123412321233"; // Токен телеграм бота
const webAppUrl = "https://script.google.com/macros/s/AKfycby530Q/exec"; // Вставляем адрес URL приложения
function setWebhook() {
let response = UrlFetchApp.fetch("https://api.telegram.org/bot" + tokenTelegram + '/setWebhook?url=' + webAppUrl);
Logger.log('telegram response status is ' + response.getContentText());
}
function doPost(e) {
const ctx = JSON.parse(e.postData.contents);
const ss = SpreadsheetApp.openById(spreadsheetsId); // Открываем документ
const sheetLog = ss.getSheetByName("log"); // Находим лист с именем "log"
sheetLog.getRange(1, 1).setValue(JSON.stringify(ctx, null, 5)); // в ячейку А1 пишем ответ бота
}
Итог
Все, наш проект настроен. Теперь при изменении кода в основном проекте он автоматически будет обновляться после сохранения.
Если для вашей программы нужны будут дополнительные разрешения, необходимо обновить развертывание как библиотеки (нашего основного проекта), так и веб-приложения.