Сегодня создаем Telegram бота, связанного с Google Таблицей.
Наш бот по команде от пользователя отправит ему в Telegram последний пост из оглавления нашего канала.
После того, как вы поймете, как работает код — вы сможете адаптировать его под свои нужды. Например, пишете боту в Telegram и он отправляет письмо с данными из Таблицы работнику, или начинает собирать несколько Таблиц в одну и конвертирует её в PDF, в общем — все, что вы сможете придумать 🙂
Какой у нас план:
- Создадим бота в Telegram и получим токен авторизации.
- Напишем Google Apps Script, управляющий ботом. Вставим в него токен.
- Развернем скрипт как веб-приложение.
- Зарегистрируем вебхук.
- Всё, будем пользоваться
Создаем нового бота в Telegram
2. Нажимаем START и выбираем /newbot
3. Придумаем имя нашему боту
4. И юзернейм (по нему бота можно будет найти). Юзернейм должен оканчиваться на bot.
5. Записываем токен API доступа к Google Васе:
Отправка сообщений из Google Таблицы в телеграмм
684873979:AAFWxHSV8QWoZUpiA9Z18EAyDHgLvrpjdkA
Наш бот создан, переходим к следующей части
Скрипт, скрипт, скрипт!
Скрипт может находиться в Таблице или в проекте, созданном в https://script.google.com/home.
Как настроить работу Телеграм-бота с Google Sheets
Разные команды в REG.RU пользуются чат-ботами в Телеграме. SEO-команда оперативно отслеживает изменения на сайте, руководители клиентских служб мониторят работу своего отдела, а сотрудники техподдержки могут посмотреть график работы на день/неделю без авторизации во внутренних сервисах, что очень удобно, если сотрудник, например, за городом.
Часто подобные боты имеют несложное устройство. Например, они могут загружать для работы из Google-таблиц список товаров с ценами и количеством, имена работников отдела с указанием времени работы/отпуска. Сегодня разберемся, как сделать такого чат-бота.
В продолжение статьи о создании Телеграм-бота расскажем, как настроить совместную работу бота и Google Sheets API v4 вместе со специалистами команды вёрстки REG.RU Анной К. и Виктором Ш.
Попробуем научиться получать данные из нашей Google-таблицы, в которой, например, указаны дни рождения наших друзей. Мы хотим, чтобы бот в ответ на имя друга подсказывал его день рождения. Начнем!
Настройка Google API
В меню «Учетные данные» нажимаем «Создать учетные данные».
Через сервисный аккаунт мы будем соединять бота и таблицу. Указываем название аккаунта, роли, предоставляем пользователям доступ к сервисному аккаунту, если это необходимо.
Отправка сообщений из Google таблиц в телеграм + БОНУС!!!
Заходим на сервисный аккаунт
и выбираем «Создать ключ».
Выбираем нужный нам формат. Мы оставим рекомендуемый json.
После загрузки разместим json-файл в корне проекта по Телеграм-бота и переименуем, например, в credentials.json. Не забудьте указать этот файл в перечне.gitignore!
В настройках доступа Google-таблицы предоставим сервисному аккаунту права на редактирование. Для этого нужно добавить в список пользователей почту сервисного аккаунта.
Теперь напишем код для аутентификации.
Запускаем код
Для запуска используем библиотеку для работы с ботом Telegraf и сделаем так, чтобы при получении текста бот выполнял функцию saysBirthday из файла saysBirthday.js.
const Telegraf = require(‘telegraf’); const < saysBirthday >= require(‘./saysBirthday’); const bot = new Telegraf( BOT_TOKEN ); bot.start( ( ctx ) => < ctx.reply(‘Привет! Я бот по работе с гугл табличкой!’); >); bot.on( ‘text’, ( ctx ) => < saysBirthday( ctx ); >); bot.launch();
В файле saysBirthday.js напишем наш код и проверим:
const saysBirthday = async ( ctx ) => < ctx.reply(`Кажется, ты сказал: $`); >; module.exports = < saysBirthday, >;
Отлично, бот отзывается. Теперь научим его получать из таблицы дни рождения.
Получаем данные из таблицы
Исправим файл saysBirthday.js. Добавим в код библиотеку googleapis и функцию аутентификации Google.
const < google >= require(‘googleapis’); const < getAuthClient >= require(‘./googleAuth’);
Используя функцию getAuthClient, создадим клиента для работы с API Google Sheets.
const getApiClient = async () => < const authClient = await getAuthClient(); const < spreadsheets: apiClient >= google.sheets( < version : ‘v4’, auth : authClient, >); return apiClient; >;
Теперь получим лист нашей таблицы с днями рождения друзей.
Используем метод API spreadsheets.get — укажем spreadsheetId (берем из URL таблицы с данными) и остальные необходимые параметры.
const getValuesData = async ( apiClient, range ) => < const < data >= await apiClient.get( < spreadsheetId : ‘1Dj9iugewBOFMeGDb-AIKK26LUHTK0SPjumZpQXhlPPg’, ranges : range, fields : ‘sheets’, includeGridData : true, >); return data.sheets; >;
Теперь получим эти данные из функции saysBirthday, которую бот выполняет при вводе любого текста. В качестве второго аргумента «range» передаем название листа Google-таблицы «Дни рождения».
const saysBirthday = async ( ctx ) => < const range = ‘Дни рождения’; const apiClient = await getApiClient(); const [sheet] = await getValuesData( apiClient, range ); console.log( sheet ); >;
Запустим и проверим, какие данные появились в консоли:
Можно проверить, что за массив в rowData. Выведем в консоль значения sheet.data[0].rowData:
Посмотрим, что лежит, например, во втором элементе массива — выведем в консоль sheet.data[0].rowData[1].
Отлично, мы выяснили, что в каждом элементе из массива sheet.data[0].rowData в values лежит информация об имени друга и его дне рождения. Давайте научим бота правильно отвечать на основе этой информации.
Напишем функцию, которая ищет соответствие введенного имени друга строке в таблице.
const findRowIndex = ( sheet, message ) => < const rowIndex = sheet.data[0].rowData.findIndex( ( item ) =>( item.values[0].formattedValue === message ) ); return rowIndex; >;
И используем эту функцию в saysBirthday. Найдем день рождения друга в массиве данных sheet.data[0].rowData, исходя из найденного индекса в функции findRowIndex.
const saysBirthday = async ( ctx ) => < const range = ‘Дни рождения’; const message = ctx.message.text; const apiClient = await getApiClient(); const [sheet] = await getValuesData( apiClient, range ); const rowIndex = findRowIndex( sheet, message ); const birthday = sheet.data[0].rowData[rowIndex].values[1].formattedValue; ctx.reply(`День Рождения твоего друга: $.`); >;
Поправим текст, который бот выдает на старте.
bot.start( ( ctx ) => < ctx.reply(‘Привет! Я бот по работе с гугл табличкой! Напиши имя друга, День Рождения которого хочешь узнать.’); >);
Проверяем работу функции.
Еще немного модернизируем код на случай, если имя друга в таблице не будет найдено.
const saysBirthday = async ( ctx ) => < const range = ‘Дни рождения’; const message = ctx.message.text; const apiClient = await getApiClient(); const [sheet] = await getValuesData( apiClient, range ); const rowIndex = findRowIndex( sheet, message ); if ( rowIndex.length ) < const birthday = sheet.data[0].rowData[rowIndex].values[1].formattedValue; ctx.reply(`День Рождения твоего друга: $.`); > else < ctx.reply(‘Попробуй снова, указанное имя не найдено(‘); >>;
Отлично! Бот работает так, как мы задумали.
Это простейший пример для начала работы с Google Sheets API v4. Разобравшись, какой формат данных возвращает метод spreadsheets.get, попробуйте получить данные с помощью метода spreadsheets.values.get. Он возвращает данные меньшего объема и меньшей вложенности, но вполне подойдёт, если не нужно считывать и записывать данные о форматировании ячеек. Советуем изучить документацию, с помощью которой можно будет реализовывать более сложную логику, переписывать значения ячеек и форматировать их.
Ещё о создании бота:
- Как написать Телеграм-бота на JavaScript
- Телеграм-бот на сервере
«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.
Источник: htmlacademy.ru
Передача данных из «Google Таблиц» в Telegram – это просто!
Вы думаете, что настроить передачу данных из Google Sheets в Telegram – это сложно? На самом деле, всё гораздо проще, чем можно себе представить, если использовать Apix-Drive !
Настройка передачи информации из «Гугл Таблиц» в «Телеграмм» открывает бизнесу, фрилансерам и обычным пользователям массу возможностей и может избавить их от необходимости выполнят рутинные задачи. Зачем тратить время на ручную отправку сообщения о добавлении новых строк в таблицу, когда можно сделать так, чтобы соответствующие уведомления отправлялись автоматически.
Кому могут понадобиться такие возможности и как их реализовать — об этом и пойдет речь ниже.
Кому и зачем нужна интеграция «Телеграмма» с «Гугл Таблицами»?
Рассмотрим только две ситуации, хотя на самом деле их огромное множество. Допустим, у вас есть интернет-магазин, вы пока не используете CRM и фиксируете информацию о заказах и клиентах в «Гугл Таблице». Вам может понадобиться распределить поступающие заказы между ответственными менеджерами. Часто при этом передача данных осуществляется вручную.
Если заказов 10-20, то справиться можно, хотя это и потребует дополнительных временных затрат. Но как быть, если в день поступает 50, 100 и больше заказов и идут они из разных источников? Трудно ничего не пропустить и не допустить ошибку.
Другой пример, вы работаете на фрилансе и получаете задачи от клиента в «Гугл Таблицах», чтобы ничего не пропустить нужно постоянно заглядывать в файл или ждать, когда о новых задачах сообщит заказчик. Если оба замотались — пропущена задача и снова потеряно время.
Получается, в обоих случаях ручная рутинная работа и мониторинг отнимают время, которое могло быть потрачено на более важные задачи, и приводит к ошибкам, а это уже упущенная прибыль, репутационные риски.
После настройки автоматизации уведомления об изменениях в таблице будут сразу же приходить в мессенджер ответственному менеджеру или фрилансеру, как в примерах выше. К тому же можно сделать так, чтобы вы могли указать, какие именно данные будут передаваться в мессенджер и при каких условиях.
Но сначала давайте разберемся, как настроить связь таблицы с Telegram с помощью ApiX-Drive на примере упомянутого выше интернет-магазина.
Как связать работу «Google Таблиц» и Telegram с помощью ApiX-Drive?
Не будем останавливаться подробно на регистрации в сервисе , делается это очень просто и быстро, тут сможет разобраться каждый.
После того, как процедура регистрации успешно завершена, заходим в личный кабинет и нажимаем «Создать связь». Дальше нужно выбрать систему, из которой будут экспортироваться данные, в нашем случае «Гугл Таблицы».
Указываем, о каком действии будут отправляться уведомления в «Телеграмм». Нам нужно, чтобы приходила информация о новых заказах, поэтому выбираем «Загрузить строки (новые)».
Теперь подключаем аккаунт, в котором находится таблица с заказами. Если вы выполнили вход в профиль любого сервиса «Гугла» — система сама распознает, ваш аккаунт, вам останется только предоставить ей доступ к данным.
Выбираем файл, с которым будем связывать Telegram. ApiX-Drive подгрузит все таблицы с вашего «Гугл Диска», указываем нужную. Если в ней много листов — понадобится указать конкретный лист, с которого системе нужно брать данные.
После этого нужно прописать порядковый номер строки, начиная с которой будут передаваться заказы. Если информировать менеджеров о первых заказах, которые уже выполнены, не нужно, и вы хотите, чтобы приходила информация только о будущих заказах, то указываем номер первой пустой строки. В нашем примере это строка 7.
Затем ApiX-Drive предлагает настроить фильтры, если это необходимо. Допустим, нам не интересны заказы с суммой меньше 200 долларов. Их будут обрабатывать в обычном режиме, а менеджеры получат оповещения в «Телеграмм» только о тех, которые равны или больше этой цифры. Так они смогут проследить лично за исполнением крупных заказов.
Чтобы это настроить, нажимаем «Добавить условие фильтрации».
В «Поле для фильтрации» указываем столбец, в котором вы записываете цены. В пункте «Действие» выбираем «больше равно», затем появится поле «Значение», сюда записываем цифру 200.
Можно выбирать и другие условия для передачи, например, по статусу сделки, дате её исполнения, источнику. Так, возможно вы хотите отправлять менеджеру информацию о заказах, полученных именно с сайта, игнорируя все офлайн-заказы. В таком случае выбираем колонку с источником сделки в «Поле для фильтрации», выбираем действие «регулярное выражение», а в «значении» пишем «сайт».
Обратите внимание, что есть возможность одновременно подключать сразу несколько фильтров по разным значениям, сочетая их между собой. При этом можно задействовать два варианта условий. «И» – если вам нужно, чтобы выполнялось условие всех фильтров одновременно; «ИЛИ» – когда достаточно срабатывания лишь одного из фильтров.
Так, в первом случае можно настроить передачу уведомлений, когда заказ больше или равен 200 долларов И получен с сайта. Во втором же случае достаточно, чтобы выполнялось то ИЛИ другое условие.
Как видим, фильтры – это очень мощный инструмент, позволяющий не ограничиваться простой передачей данных, но сделать так чтобы при этом учитывались самые разные условия.
На этом настройка «Гугл Таблиц» завершена, переходим к Telegram, который будет использоваться как приёмник данных.
Выбираем его в списке и добавляем нужное нам действие действие — «Отправить сообщение».
Это означает, что вы всё сделали правильно. Теперь настраиваем сообщение, которое будет приходить в мессенджер.
Системные данные — это информация о том, когда произошло событие. Если вам важно, чтобы менеджер получил время и дату, когда заказ был добавлен в таблицу — добавляем эти значения. Лучше в столбик, так удобнее будет форматировать и просматривать.
Когда закончили с системными, переходим к данным из «Гугл Таблиц». Чтобы менеджеру приходила не только сумма, но и информация о заказе, выбираем нужные колонки, например, добавим еще ФИО клиента, у нас эти данные в колонке В.
На этом настройка связи завершена, чтобы проверить, что всё работает, можно отправить тестовое сообщение. Осталось включить автообновление.
Добавим в «Гугл Таблицу» новый заказ в графу 7, с которой мы настроили прием уведомлений:
И вот в «Телеграмм» пришло сообщение о новом заказе:
Теперь добавим заказ со значением 200 долларов. И для чистоты эксперимента добавляем еще заказ с меньшей суммой, например, 150 долларов:
Уведомление о заказе на 200 пришло пришло, а вот на 150 – нет. Все работает!
На самом деле настраивать связь и передавать нужные данные очень просто. У сервиса интуитивно понятный интерфейс. На каждом этапе вам будут предлагаться пошаговые инструкции. Если же всё равно что-то будет непонятно, то к вашим услугам подробная справка со скриншотами и даже видеоуроками.
У ApiX-Drive очень широкие возможности, можно выстраивать целые структуры, позволяющие автоматизировать практически что угодно. Например, зачем вносить данные о новых заказах в Google Sheets вручную, если можно сделать так, чтобы они автоматически погружались с сайта магазина. Получается уже более интересная схема – сначала данные автоматически приходят в таблицы, а затем уже отправляются в мессенджеры менеджерам.
И подобных идей можно придумать множество – все зависит от потребностей вашего бизнеса! Регистрируйтесь в Apix-Drive и получите бесплатный тестовый период, чтобы оценить все возможности сервиса.
Источник: teletype.in