Pull to refresh

Подключение телеграм бота к гугл таблицам

Reading time4 min
Views80K

Всем привет, хабравчане!

Это мой первый пост на этой площадке, целью которого является погружение в коммьюнити для обратной связи и полезных ремарок относительно этой статьи. Также буду рада, если эта статья станет полезной для начинающих свой путь в написании ботов людей :)

За последний год я узнала об интересном способе автоматизации бизнес-процессов, которая достигается комбинацией гугл-таблиц и телеграма. Такие задачи как учет финансов, тайм-менеджмент, пересылка событий, сообщений, уведомлений и т.п. легко решаются с помощью бесплатного инструментария гугла и телеги.

Далее речь пойдет о создании первого бота и написании скрипта в Apps Script. Поехали!

Создание телеграм-бота

Откуда вообще берутся боты в телеграме? Опытному пользователю можно пропустить это пункт, ну а новичкам настало время познакомится с @BOTFATHER

Находим отца всех ботов в поиске телеги и видим, что этот бот вообще из себя представляет.

После старта этого бота мы увидим список команд.

Здесь нам нужна команда /newbot, чтобы создать нашего первого бота.

Порядок действий незамысловатый: создаем бота помандой /newbot, даем ему вменяемое имя и задать ему username с обязательным окончанием bot. В результате получаем API токен нашего бота, который и будем дальше использовать.

Можете проверить работоспособность созданного бота перейдя по следующему URL:

https://api.telegram.org/bot2011183802:AAEW7ZNRVvlr1TG1N0DNkRB9G4FmvkBUUUU/getMe

выделенное жирным замените на апи своего бота

Запрос вернет примерно это:

{"ok":true,"result":{"id":2011183802,"is_bot":true,"first_name":"Demo for Habr","username":"DemoForHabr_bot","can_join_groups":true,"can_read_all_group_messages":false,"supports_inline_queries":false}}

Подключение гугл-таблицы

Переходим к гугл табличкам и создаем новый док.

Нам нужен пункт меню Инструменты/Tools -> Редактор скриптов/ Script editor. 

Должно получиться вот это:

Затрем скрипт и напишем свой на языке JavaScript. Дополнительно в скрипте могут быть использованы инструменты гугла (классы, методы и т.п.), что мы далее и рассмотрим.

Начнем с объявления глобальных переменных. У нас их будет только две - API бота и App_link.

const API = "2011183802:AAEW7ZNRVvlr1TG1N0DNkRB9G4FmvkBUUUU"; 
//в кавычки впишите свой апи
const App_link = "";
//значение переменной пока оставляем пустым

Напомню, что АПИ бота мы получили в диалоге с botfather.

Далее напишем функцию send, которая отправляет сообщение в чат с нашим ботом.

function send (msg, chat_id) {
  let payload = {
  'method': 'sendMessage',
  'chat_id': String(chat_id),
  'text': msg,
  'parse_mode': 'HTML'
  }
  let data = {
    'method': 'post',
    'payload': payload
  }
    UrlFetchApp.fetch('https://api.telegram.org/bot' + API + '/', data);
}

Функция send() отправляет запрос для общения со строними приложениями, в нашем случае - с телегой. Подробнее в документации Class UrlFetchApp.

Аргументы функции - текст отправляемого сообщения и ид чата, в которое это сообщение отправляется.

Далее нужно предусмотреть механизм запуска функции send(). Осуществим это из тела другой функции doPost():

function doPost(e) {
  let update = JSON.parse(e.postData.contents);
  //нам нужен только тип "сообщение"
  if (update.hasOwnProperty('message')) {
    let msg = update.message;
    let chat_id = msg.chat.id;
    let text = msg.text;
    let user = msg.from.username;
    if (text == "/hello") {
      send("Hello World", chat_id)
    }
  }
}

Это стандартная функция при работе с телеграм ботами, в которую зашиваются ответные действия от бота при отправке сообщения в чат с ним.

Здесь мы сравниваем текст полученного ботом сообщения с текстом "/hello" и вызываем функцию send()при совпадении. Это все действия нашего бота.

Сначала сохраним скрипт и задеплоим проект. Кликаем на кнопку Deploy -> New deployment.

В результате откроется окно New deployment, где нужно кликнуть по шестеренке и выбрать Web app.

В поле Who has access выбираем Anyone, что позволит другим пользователям вносить правки в проект и деплоить без вашего участия.

И кликаем Deploy.

При первом запуске приложение попросит авторизации. Проделываем это упражнение.

Получаем следующее:

Здесь нам нужен URL в самом конце. Копируем его по кнопке Copy и вставляем в качестве значения глобальной переменной App_link, значение для которой мы оставили изначально пустым.

Создадим функцию установки вебхука для получения обновлений от нашего бота.

Добавим следующий код к нашему скрипту:

function api_connector () {
  UrlFetchApp.fetch("https://api.telegram.org/bot"+API+"/setWebHook?url="+App_link); 
}

Функция принимает обе глобальные переменные API и App_link, так что убедитесь, что они у вас есть и их значения установлены корректно.

Снова сохраняем код и запускаем только функцию api_connector:

Если функция выполнилась без ошибок, идем проверять работу нашего бота непосредственно в телеге.

Сообщение "/hello" успешно распознано, на что наш бот ответил "Hello world".


Скрипт целиком ниже:

const API = "2011183802:AAEW7ZNRVvlr1TG1N0DNkRB9G4FmvkBUUUU";
//в кавычки впишите свой апи 
const App_link = "https://script.google.com/macros/s/AKfycbyS0k0r1VF0T1O1y8b_oElTXWzWNJKUiQDXS2HWdZT9q-ODieKgLoNXGQTtRoi6a8fo/exec";
//после каждого деплоя обновляем значение переменной
 
function send (msg, chat_id) {
  let payload = {
  'method': 'sendMessage',
  'chat_id': String(chat_id),
  'text': msg,
  'parse_mode': 'HTML'
  }
  let data = {
    "method": "post",
    "payload": payload
  }
    UrlFetchApp.fetch('https://api.telegram.org/bot' + API + '/', data);
}

function doPost(e) {
  let update = JSON.parse(e.postData.contents);
  //нам нужен только тип "сообщение"
  if (update.hasOwnProperty('message')) {
    let msg = update.message;
    let chat_id = msg.chat.id;
    let text = msg.text;
    let user = msg.from.username;
    if (text == "/hello") {
      send("Hello World", chat_id)
    }
  }
}

function api_connector () {
  UrlFetchApp.fetch("https://api.telegram.org/bot"+API+"/setWebHook?url="+App_link); 
}

Заключение

Мы создали простейшего бота для демонстрации работы гугл скриптов в связке с телеграмом.

Если тема интересна, с удовольствием подготовлю материал по написанию более сложных функций и/или более полезных с точки зрения бизнеса и автоматизации

Буду рада обратной связи.

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 29: ↑27 and ↓2+25
Comments19

Articles