Telegrami roboti ühendamine Google’i arvutustabelitega

Находим в телеграме @BotFather –> start

С помощью команды /newbot –> создаем нового бота себе

Там будет несколько простых вопросов о том какой бот, что и как

Не сколько попыток было не удачными 🙂

Api чтобы проверить работо способность моего бота

https://api.telegram.org/bot7124164181:AAFvP_Pl1_3lksiQushdqY5IzBTK3xJiRT8/getMe

И тада вот наш бот

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

Начинаем создавать

обьявляем переменые, указываем СВОЙ api чтобы мы смогли их связать

Нужно прописать send, чтобы могли отправлять сообщения от бота

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

fetch(url, params)
Делает запрос на получение URL-адреса, используя дополнительные дополнительные параметры.

Далее копируем doPost(e)

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

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

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

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

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

Потверждаем –> так же если подтверждаем доступ

Получаем:

Здесь нам нужен URL в самом конце. 

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

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

СОХРАНЯЕМ!!!

Ну а далее проверяем запускаем api_connector()

И конечно же нас ждет изучения, почему оно не с работало

В случаи моего кода все let были заменены на var

Далее еще раз проверяею еще раз все по кругу, и начается, что то работает то нет

Потом появляется и снова пропадает

Медленно, но мы работает, покрайне мерее постоянно

Начинаем добавлять еще разговор для бота:

взята на других форумах, тогда работает с несколько действий.

🔍 Подробно по каждому параметру:

'method': 'post'

Здесь 'post' означает, что мы отправляем данные на сервер, а не просто запрашиваем (в отличие от 'get').

'contentType': 'application/json'

Указывает, в каком формате мы передаём данные.

application/json говорит серверу Telegram: «Я отправляю тебе JSON (текст в виде объекта)».

'payload': JSON.stringify(payload)

payload — это объект с данными, которые мы хотим отправить

Далее вносим свое не большое общения с чатом

И конечно оно не заработало, узнаем что такое Webhook –> проверяем правильность настройки

нашла очень поздно информацию после того как пересоздала бота

⚠️ Важно: Если изменяешь что-то в коде, нужно каждый раз делать новое развертывание и указывать Telegram новый адрес webhook.

для себя прописала ему чтобы видил logger Logger.log(response.getContentText());

Теперь перейдем к добавлению еще ответов

воспользуюсь английским может из за этого в прошлый раз в итоге убила чат bot

добавляем /weather –> ответ к нему, так же делаем разветывание и прописываем новый App_link

плана сделать на еще не сколько ответов, после добавить /start какие команды у нас есть

/hello — поздороваться
/weather — узнать погоду
/time — текущее время
/date — текущая дата
/joke — случайная шутка
/coffee — предложить кофе ☕️
/quote — случайная цитата
/motivation — мотивация дня 💪
/learn — совет по обучению 📚
/about — информация обо мне

так же добавила, массив, чтобы выбирала из двух вариантов

send(jokes[Math.floor(Math.random() * jokes.length)], chat_id);

jokes – массив

Math.floor(Math.random() – Возвращает случайное число от 0 (включительно) до 1, умножаем случайное число (0…1) на количество шуток и округляет число вниз до целого

jokes.length – Умножаем случайное число (0…1) на количество шуток, чтобы получить число в диапазоне от 0 до jokes.length

Получаем

function doPost(e) {
  var update = JSON.parse(e.postData.contents);
  
  if (update.hasOwnProperty('message')) {
    var msg = update.message;
    var chat_id = msg.chat.id;
    var text = msg.text;

    switch (text) {

      case "/start":
        send(
          "Привет! Вот мои команды:\n" +
          "/hello — поздороваться\n" +
          "/weather — узнать погоду\n" +
          "/time — текущее время\n" +
          "/date — текущая дата\n" +
          "/joke — случайная шутка\n" +
          "/coffee — предложить кофе ☕\n" +
          "/quote — случайная цитата\n" +
          "/motivation — мотивация дня 💪\n" +
          "/learn — совет по обучению 📚\n" +
          "/about — информация обо мне", chat_id);
        break;

      case "/hello":
        send("Hello World 🌍", chat_id);
        break;

      case "/weather":
        var weatherText = getWeather();
        send(weatherText, chat_id);
        saveData(chat_id, username, "weather", weatherText);
        break;

      case "/time":
        var time = new Date().toLocaleTimeString();
        send("Сейчас: " + time, chat_id);
        break;

      case "/date":
        var date = new Date().toLocaleDateString();
        send("Сегодня: " + date, chat_id);
        break;

      case "/joke":
        var jokes = ["Что сказал программист, когда его бросила девушка? Ну и git с тобой!", "Самая короткая шутка программиста: Сейчас быстро исправлю."];
        send(jokes[Math.floor(Math.random() * jokes.length)], chat_id);
        break;

      case "/coffee":
        send("☕ Пора выпить чашечку кофе!", chat_id);
        break;

      case "/quote":
        var quotes = ["«Будь собой, остальные роли уже заняты». – Оскар Уайльд", "«Лучший способ взяться за что-то – перестать говорить и начать делать». – Уолт Дисней"];
        send(quotes[Math.floor(Math.random() * quotes.length)], chat_id);
        break;

      case "/motivation":
        var motivations = ["Ты можешь больше, чем думаешь!", "Каждый новый день – это шанс изменить всё к лучшему!"];
        send(motivations[Math.floor(Math.random() * motivations.length)], chat_id);
        break;

      case "/learn":
        send("Сегодня хорошее время, чтобы выучить что-то новое!", chat_id);
        break;

      case "/about":
        send("Я простой Telegram-бот, созданный для примера 🦾", chat_id);
        break;

      default:
        send("Я пока не знаю такой команды 😔", chat_id);
    }
  }
}

Switch, case и default

В моем случаи я использовала этих вместо if else if — т.к работа с несколькими текстами в моем случаи с 12, приводит к тому что на даже на третим меня то не отвечал бот, то что то ему не нравилось. Как использовалось Switch, case и default.

switch — это специальная конструкция, которая проверяет одно значение (text в моем случае) на совпадение с несколькими заранее заданными вариантами (командами case), и затем выполняет соответствующий блок кода.

case – то что было написано в условии и выполняется мой код после двоеточния

«Если text равно “/hello”:».
После этого обязательно пишем break;, чтобы закончить выполнение этого блока.

Если ни одно из условий выше не выполнилось, выполни этот код по умолчанию – default.

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

link

Нашла видео, где добавляют погоду, так же огранизуем добавим в листы данные которые вводят

Link – видео, с описание кода, так же в коде есть информация как выводить данные для таблицы

Link – тут нашла интересную информацию если хочу сделать погоду более легче написано, а так же использовать OpenWeatherMap

Link

Link – функции для использования всех возможностей Телеграм

там можно скачать код и попробовать интегрировать в свою погоду

Приятный бонус, у моего бота появилась картинка :), сделали через botfater -> /setuserpic

Теперь занялась погодой, воспользовалась сайтом OpenWeather

На нем на самом деле нашла, очень много чего интересного, но так как собиралась заняться погодой остановилась на вот этом, пока что. Обычном.

Необходила регистрация на сайте, значит регистрируемя. Все что могу сказать после регестрации изучания и всего всего я получала свой ключ

Для изчения обязательно нужно помнить на данный момент бесплатная версия подрузамивает:

60 вызовов API/минута
1 000 000 вызовов/месяц

На основе всего и двух ссылок собирем код свой со своим API

А дельше было весело

Ошибка была решила, когда я все сделала свой API глобальный

Краткое описания этой function для моей погоды:

  • Город в котором показывать погду, в мое случаи мы смотрим погоду города Таллинн
  • URL API (сам WEATHER_API прописан глобально) / из нового units=metric – температура в градусах цельсия / lang=ru – язык описания погоды (русский)
  • Эта строка делает запрос по указанному адресу (url) и получает ответ от сервиса в формате JSON.
  • var json = JSON.parse(response.getContentText());
  • Это превращает полученный текстовый JSON-ответ в объект
  • Извлекаем данные погоы
  • Logger.log — т.к. до этого были ошибки и я считываю и ищу решания по log

var weather = json.weather[0].description; // описание погоды
var temp = json.main.temp; // температура

  • Последняя строка возвращает итоговый текст сообщения с погодой.

Итоге получилось как то вот так, не без ошибок, к сожалению ошибок было много сомещения двух кодов с сайта понесло много ошибок.

Так же погодный case был изменен

Расмотрим код по строчно:

  • Получаем погоду через API OpenWeatherMap. (мою функцию)
  • Отправляется сообщение с погодой пользователю.

И в итоге я получила красоту!

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

Это оказалось легче чем было сделать погоду, я походу очень люблю глобальные переменые и теперь добавила так же переменую своей таблице( ее ID), таблицу я назвала telegram

Дальше как и до этого на уроках обращаемся к таблице

И сделала на основе нашей таблицы данные

Дальше мне нужно было к моему doPost добавлять данные для того чтобы получать информацию и начала с того, что

var username = msg.from.username || msg.from.first_name;

Бот будет брать логин ИЛИ ( || ) имя пользователя

var reply;

Будет ответ записан сюда

теперь все свои case – меняем все send –> reply

т.к. reply записываем все для нашей таблицы

И в итоге как на примерах записываем и отплавляем ответы

Проверяем!

И я снова, что то упустила

Ищу ошибку в не правильно скопированом ID table

Тестирую бота

И он записывает результаты в таблицу

Я СЧАСТЛИВА!!!!!

И тут идия сделать красивое, не просто ждешь а много в интернете, что бот “печатет … ” перед отправкой

COMING SOON!