Сегодня продолжение статьи о мониторинге цен с помощью гугл таблиц и создании бота в телеграм для отправки информации. В первой части мы настроили гугл-таблицы на сбор данных, а сегодня будем делать бота и программировать его (немножко).
Если вы пропустили первую часть статьи - рекомендую начать с нее. Читайте здесь: https://zen.yandex.ru/media/id/5f24070dd98a994308ce5e45/delaem-telegrambota-v-gugl-tablicah-dlia-sbora-cen-chast-1-5fc75b90a093e9490241ff96
3. Создаем нового бота в телеграм
Создаем бота - для этого нужно поговорить с Крестным Ботом (Botfather) в Телеграме. Вот ссылка на него: https://t.me/BotFather
Начинаем чат с BotFather командой "/start" и далее следуем подсказкам бота:
Отправляем команду "/newbot" и отвечаем, как мы хотим назвать наш бот и какой у него будет юзернейм. В ответ Телеграм пришлет ссылку на бота и токен для работы с ботом из других приложений. Этот токен фактически дает полные права на управление ботом, так что держите его в тайне.
Бот создан. С помощью Крестного Бота можно отредактировать его, добавив информацию, юзерпик и др. - оставлю это на ваше усмотрение :-)
Половина дела сделана. Но прежде чем отправлять какие-то сообщения, наш бот должен знать куда их отправлять.
4. Читаем сообщения
Бот не может инициировать диалог, пользователь должен начать диалог сам и послать команду "/start", а бот, получив эту команду, должен сохранить параметр chat_id, чтобы потом писать этому пользователю. Делать все это мы будем с помощью того же языка скриптов в гугл таблице. Возращаемся в нашу таблицу и запускаем редактор скриптов.
Для начала, сохраним значение токена, чтобы потом его можно было использовать. В редакторе скриптов идем в меню "Файл -> Свойства проекта"
И в закладке "Свойства скрипта" добавляем строку "OPENAPI_TOKEN" со значением токена, которое прислал Крестный Бот. Сохраняем.
В начале скрипта добавляем строки:
const scriptProperties = PropertiesService.getScriptProperties()
const OPENAPI_TOKEN = scriptProperties.getProperty('OPENAPI_TOKEN')
const baseurl = 'https://api.telegram.org/bot'+ OPENAPI_TOKEN + '/'
Создадим также новую функцию FetchMessages - она будет:
- Подключаться к серверу Телеграм по API
- Запрашивать список обновлений у бота
- Сохранять chat_id для новых пользователей
- Очищать список обновлений на сервере
Пишем код:
Если бы мы писали этого бота, как полноценный продукт, нужно было бы проверить список chat_id на дубликаты, а также запрашивать от каждого пользователя свои ссылку (или ссылки), по которым он хочет получать оповещения. Но у нас больше образовательно-демонстрационный проект, поэтому эти моменты я пропущу.
Добавляем триггер на запрос обновлений каждый час, и можно приступать к следующей части.
5. Отправляем сообщение
Напишем еще несколько функций:
- Функция MakeChart - делает график из данных по ценам в виде картинки
- Функция SendPhoto - отправляет картинку с комментарием на указанный chat_id
- Функция SendMessage - с помощью функции MakeChart готовит картинку и для каждого chat_id с помощюу функции sendPhoto отправляет картинку в телеграм.
Добавляем вызов функции SendMessage в функцию GetPrice, чтобы она выполнялась после получения цен.
6. Тестируем
Вручную запустим функцию SendMessage - выберем ее на панели инструментов и нажмем запуск:
Спустя несколько секунд получаем в телеграм картинку
Ура! Работает!
Таблица доступна по ссылке: https://docs.google.com/spreadsheets/d/1KyAtIZlEKz5tYa_CUipbawgDomrcNY8Oblygeug5X3I/edit?usp=sharing
Чтобы редактировать, скопируйте ее в свой гугл-диск и не забудьте указать токен в свойствах скрипта.
Пишите в комментариях, если есть вопросы, буду рад пообщаться!
UPD: Вынесу из комментариев, RomanT рассказал о возможности сделать более интерактивный бот, зарегистрировава WebHook через API Telegram. Если интересно - смотрите в комментариях.