Автоматизация
September 20, 2024
Как автоматизировать отправку скриншотов из Google Таблиц в Telegram
В этой статье мы рассмотрим, как с помощью Google Apps Script и Telegram бота автоматически отправлять скриншоты данных из Google Таблиц в Telegram. Такой подход может быть полезен для мониторинга отчетов, уведомлений и другой информации.
Что нам понадобится:
- Google Таблицы — чтобы хранить данные.
- Telegram-бот — для отправки сообщений.
- Google Apps Script — для автоматизации процессов и создания скриншотов.
Шаг 1: Создание Telegram-бота
- В Telegram найдите бота
@BotFather. - Напишите ему
/startи затем/newbot. - Следуйте инструкциям и введите имя и username бота.
- После создания бот отправит вам токен API. Сохраните его, он понадобится для отправки сообщений.
Шаг 2: Подготовка Google Таблиц
- Создайте или откройте существующую Google Таблицу.
- Убедитесь, что у вас есть доступ на редактирование или выше.
- Перейдите в меню Файл → Опубликовать в Интернете и опубликуйте таблицу, если хотите делиться данными без ограничений доступа.
Шаг 3: Создание скрипта в Google Apps Script
// Основная функция для отправки скриншота в Telegram
function sendImageToTelegram() {
const ss = SpreadsheetApp.getActive();
const sheet = ss.getSheetByName('Название вашего листа'); // Укажите название листа
const botToken = 'Ваш токен бота'; // Вставьте сюда токен вашего бота
const chatId = 'Ваш chat_id'; // Вставьте сюда ваш chat_id или id группы
// Получаем диапазон данных
const range = sheet.getDataRange();
const blob = convertToImage(range); // Преобразуем диапазон в изображение
// Отправляем изображение в Telegram
const result = sendPhoto(chatId, blob, botToken, 'Ваш текст сообщения');
Logger.log(result);
}
// Преобразование диапазона в изображение
function convertToImage(range) {
const values = range.getValues().map(row => row.map(cell => cell.toString())); // Все ячейки в строковый формат
const table = Charts.newDataTable();
values[0].forEach((header) => table.addColumn(Charts.ColumnType.STRING, header)); // Задаем заголовки
values.slice(1).forEach((row) => table.addRow(row)); // Добавляем строки данных
return Charts.newTableChart()
.setDataTable(table.build())
.setDimensions(1000, 500) // Размеры изображения
.setOption("alternatingRowStyle", false)
.build()
.getBlob();
}
// Функция для отправки фото в Telegram
function sendPhoto(id, blob, botToken, text = '') {
const data = {
chat_id: id,
photo: blob,
thumb: '',
caption: text,
parse_mode: "HTML",
disable_notification: false
};
const options = {
method: 'POST',
payload: data,
muteHttpExceptions: true
};
return UrlFetchApp.fetch('https://api.telegram.org/bot' + botToken + '/sendPhoto', options).getContentText();
}
// Создание триггера для автоматической отправки
function createDailyTrigger() {
deleteSpecificTrigger('sendImageToTelegram'); // Удаляем старые триггеры для этой функции
// Устанавливаем новый триггер
ScriptApp.newTrigger('sendImageToTelegram')
.timeBased()
.everyDays(1)
.atHour(12)
.nearMinute(5)
.inTimezone("Europe/Moscow")
.create();
Logger.log('Триггер установлен на каждый день в 12:05 по МСК.');
}
// Удаление существующего триггера для конкретной функции
function deleteSpecificTrigger(functionName) {
const allTriggers = ScriptApp.getProjectTriggers();
for (let i = 0; i < allTriggers.length; i++) {
if (allTriggers[i].getHandlerFunction() === functionName) {
ScriptApp.deleteTrigger(allTriggers[i]);
Logger.log(`Триггер для функции ${functionName} удален.`);
}
}
}
Описание кода:
sendImageToTelegram()— основная функция, которая создает скриншот данных и отправляет его в Telegram.convertToImage(range)— функция преобразует диапазон ячеек в изображение с помощью Google Charts.sendPhoto(id, blob, botToken, text)— отправляет изображение в Telegram.createDailyTrigger()— создает триггер, который запускает функциюsendImageToTelegramкаждый день в 12:05 по московскому времени.deleteSpecificTrigger(functionName)— удаляет существующий триггер для указанной функции, чтобы избежать дублирования.
Шаг 4: Установка триггера
- Запустите функцию
createDailyTrigger()один раз из редактора скриптов. - Проверьте в меню Триггеры наличие триггера на ежедневный запуск.
Шаг 5: Проверка работы
- Вернитесь в редактор Google Таблиц.
- Запустите функцию
sendImageToTelegram()вручную, чтобы убедиться, что все работает корректно. - Проверьте, пришло ли сообщение в Telegram с изображением данных.
Советы и рекомендации:
- Убедитесь, что бот добавлен в группу или канал, если используете групповые сообщения.
- В случае проблем проверьте журнал логов в редакторе скриптов (Ctrl + Enter).
- В настройках Google Таблиц убедитесь, что доступ к данным имеет ваш Google аккаунт.
Готово! Теперь у вас есть автоматическая система для отправки данных из Google Таблиц в Telegram.