Автоматизация
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.