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

С какими проблемами вы можете столкнуться и как их обойти

Тема Телеграм-ботов только ширится, связка «Телеграм-бот и таблица Гугл» тоже. Если вы разрабатываете дополнения для Google Sheets, то пишете код на Google App Script (GAS). Поэтому наверное, и мозги для этих ботов пишете на GAS.

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

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

getUpdates VS setWebhook?

Неважно, на каком языке вы пишете своего бота — на GAS, PHP, Pyton или чём-то ещё. В любом случае вы используете Телеграм API.

API сейчас поддерживает два способа обработки обновлений ботов: getUpdates и setWebhook.

Как подключить бота в телеграм к Google таблице

getUpdates — это механизм pull, setWebhook — push.

Например, вы 1 раз в час запускаете getUpdates и получаете все сообщения, написанные в чате за этот час. В GAS можно настроить временной триггер с таким интервалом. Но это значит, что для нашего примера с антиспам-ботом спам будет целый час безнаказанно висеть в чате. Нехорошо это, желательно подстрелить спам сразу на подлёте.

Поэтому надо использовать setWebhook. Как написано в Чудесном путеводителе Марвина по всем вещам Webhook:

Webhook по сравнению с getUpdates

  • избавляет вашего бота от необходимости часто запрашивать обновления.
  • избегает необходимости в каком-либо механизме опроса в вашем коде.

setWebhook() + fetch(url)

Теперь пара слов о механизме получения апдейтов, или, проще говоря, сообщений из Телеграм-чата.

1.. Пишем в редакторе GAS простейший скрипт:

function doPost(e) < var contents = JSON.parse(e.postData.contents); var chat_id = contents.message.from.id; // код извлечения данных и записи на лист >

Всё, в переменной contents у нас апдейт. С помощью дальнейшей обработки из него можно извлечь всё, что нужно. Например, chat_id — идентификатор отправителя сообщения, text — текст сообщения.

Дальше можно эти данные записать на лист, переслать кому-то и т.д.

2. Разворачиваем скрипт как веб-приложение.

При этом указываем параметры “Запуск от имени: От моего имени, У кого есть доступ: Все” и копируем ссылку на веб-приложение (webAppUrl).

3. Формируем ссылку.

Для этого надо соединить токен бота и урл веб-приложения следующим образом:

var token = «1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ»; var webAppUrl = «https://script.google.com/macros/s/XXXXXXXX/exec»; var telegramUrl = «https://api.telegram.org/bot» + token;

4. Фетчим урл и устанавливаем webhook:

function setWebhook() < var url = telegramUrl + «/setWebhook?url has-medium-font-size»>Можно и безо всякого скрипта перейти по этому url в браузере и увидеть

Телеграм-Бот через Google-таблицы (без кода)

Это объект JSON, разобрав который, можно извлечь все 3 поля по отдельности — ok, result и description. Затем их можно использовать в условной логике, показывать юзеру и всё такое.

Подводные камни

Итак, у нас есть связка «Телеграм-бот и таблица Гугл», которая моментально записывает все сообщения из Телеграм-чата в таблицу. Дальше можно искать в них ключевые слова и что-то делать с этими сообщениями.

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

Всем удобны Google-сервисы. И таблицы они вам предоставляют, и среду разработки скриптов, и мощные сервера по всему свету, на которых эти скрипты работают, и многие другие вкусные плюшки. Однако есть подводные камни, и один них — квоты и ограничения Google. “Службы Apps Script имеют ежедневные квоты и ограничения на некоторые функции.

Если вы превысите квоту или ограничение, ваш скрипт выдаст исключение и выполнение остановится”. Например, вызовы URL Fetch ограничены 20,000 в день, а ограничение на одновременное выполнение скрипта — 30 юзеров. Это означает, что если число пользователей бота станет достаточно большим, он перестанет работать.

И что же делать?

Например, можно купить собственный сервер или арендовать его и обрабатывать всю логику на нём. Это стоит дополнительных денег и времени, поэтому логично подумать про что-то другое.

Выход из положения

Разработчику может прийти в голову следующее.

Поскольку веб-приложение выполняется от имени меня, то и расходуются мои квоты. А что, если разворачивать его не от моего имени, а от имени пользователя?

Заинтересованный пользователь может это сделать в 3 клика. Надо только дать ему шаблон таблицы с внедрённым в него скриптом. Он сделает себе копию таблицы, развернёт скрипт как веб-приложение и вставит webAppUrl в нужную ячейку таблицы.

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

И очень маловероятно, что у этого пользователя в его Телеграм-группе будет больше 20,000 сообщений в день.

Всё, вроде бы, должно заработать. Не тут-то было!

Снова подводные камни

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

Как распространять наш скрипт, чтобы о нём узнали заинтересованные пользователи? Можно писать статьи на тематических площадках, давать рекламу в Google, Яндекс и т.п.

Это всё замечательно, но грех не использовать и бесплатные инструменты.

Говоря о плюшках Google, нельзя не упомянуть Google Workspace Marketplace. Там разработчики Google публикуют дополнения для продуктов Google — для таблиц, документов, почты и пр.

Таким образом, идея реализации связки «Телеграм-бот и таблица Гугл» вырисовывается такая:

1. Делаем шаблон таблицы Google.

В нём нарисован интерфейс с нужными заголовками, к таблице прикреплён скрипт веб-приложения.

Еще по теме:  Заблокировать группу в Телеграмме что видит админ

2. Переносим из кода всю логику обработки сообщений Телеграм-чата в дополнение и публикуем его на Google Workspace Marketplace.

Пользователь устанавливает дополнение, делает себе копию шаблона, делает начальные установки (вводит в нужные ячейки токен бота, урл веб-приложения, свои ключевые слова) и пользуется себе на радость.

Да, тут мы часть работы переложили на пользователя, но потому-то и пишу эту статью. Возможно, кто-то из прочитавших подскажет обходные пути.

Тем более, что опять не тут-то было, здесь есть ещё подводные камни.

И опять

Проблема в том, что вы НИКАК не можете передать данные непосредственно в дополнение. Т.е. вам по вебхуку пришло сообщение, но вы в обработчик, который, напомню, вынесен в дополнение, это сообщение передать не можете.

Вы не можете запустить функцию, находящуюся внутри дополнения.

Вы даже не можете передать в дополнение какой-то тег или сигнал типа “Алё, адд-он! Сообщение пришло! Запускай fetch(url) и читай!”.

Низзя. Не знаю почему, то ли из соображений безопасности, то ли по ещё каким-то причинам. Об этом можно почитать тут: How to transfer data from webapp to addon. В посте как раз рассматривается связка «Телеграм-бот и таблица Гугл».

Может прийти в голову мысль: “Мы же пишем сообщения на лист. Ставь триггер onEdit() или onChange() и, как только сообщение запишется в таблицу, триггер сработает, считает данные и всё обработает, как надо”.

Тут есть 2 закавыки.

Одна из них заключается в том, что все операции ввода-вывода с листами относительно медленны — это доли секунды. При интенсивном общении в Телеграм-чате множественные обращения к листу и с листа могут вызвать существенные задержки.

В отличие от ситуации, если данные передавать, минуя листы, непосредственно из fetch() в код дополнения. Сервера у Google шустрые, и такие операции занимают миллисекунды.

Вторая закавыка заключается в том, что триггеры onEdit() или onChange() НЕ срабатывают при изменении данных на листе программным путём.

Эти триггеры срабатывают, если данные на листе изменил пользователь. Например, ввёл с клавиатуры, или выбрал из меню.

Подробнее об этом тут: Event Objects.

Выход есть!

На вопрос в посте на Стеке всё же нашёлся ответ. Автор даже назначил баунти за правильный ответ, но самое лучшее, что тогда ему подсказали, это использовать облачный сервис Google. Да, среди вкусных плюшек есть и такая. И это наверняка мощная штука.

Вот только она платная при превышении определённых показателей.

Да и хороших мануалов по нему я не видел.

По GAS таких ресурсов полно. Это и Google Apps Script, и mdn web docs, и ещё куча.

По Google Cloud же таких ресурсов намного меньше.

Поэтому, когда через полгода в пост пришёл Alan Wells и написал про Sheets API и USER_ENTERED, то сразу всё прояснилось.

Схема такая:
1. Включаем Sheets API в сервисах веб-приложения. Вы можете убедиться, что всё правильно, если посмотрите код файла appsscript.json. Если кто забыл, то для этого в настройках скрипта чекните флажок “Показывать файл манифеста appsscript.json в редакторе”.

В нём должен присутствовать следующий код:

«dependencies»: < «enabledAdvancedServices»: [< «userSymbol»: «Sheets», «serviceId»: «sheets», «version»: «v4» >] >

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

2. Обычно мы как пишем данные в таблицу?

Используем setValue(value). Типичный код:

var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[0]; var cell = sheet.getRange(«B2»); cell.setValue(100);

Код должен выглядеть примерно так:

var SHEETID = ‘XXXXXXX’; function doPost(e) < var data = e.postData.contents; var rowValues = [ [data, «»], ]; var request = < ‘valueInputOption’: ‘USER_ENTERED’, ‘insertDataOption’: ‘INSERT_ROWS’, ‘data’: [ < «range»: «TEMP!A2:B2», «majorDimension»: «ROWS», «values»: rowValues, >, ], >; var response = Sheets.Spreadsheets.Values.batchUpdate(request, SHEETID); >

Ключевыми здесь являются два момента:

А. Запись на лист производим с помощью batchUpdate().

Б. Параметр ‘USER_ENTERED’ как бы говорит триггеру, что данные на листе изменены не программным путём, а пользователем.

Связка «Телеграм-бот и таблица Гугл» работает

Всё, теперь данные, хоть и косвенно — через лист, передаются в надстройку, и вся схема функционирует.

Подробнее обо всём об этом можно почитать тут: Телеграм-Помощник: Описание и руководство. Там же есть ссылка и на дополнение, и на таблицу со скриптом. Можете всё это свободно использовать.

И буду признателен за конструктивную критику и советы!

Источник: baublys.ru

Telegram bot for Google Sheets in cloud

Google Sheets is a powerful cross-platform app with a rich set of formulas and the ability to integrate with other apps.
However, such functionality is often redundant for simple tasks, which makes the work not very convenient. This is especially true for mobile devices. So it would be cool to make it possible to work with tables through other interfaces. One option is to create a Telegram bot. This bot will receive some data from user and write it as new row into Google Sheets table.
It can be hosted for free!
With zero cost, we get a convenient combination of 2 powerful tools.

Tables API

Alt Text

The first step is to look at the tables documentation: https://developers.google.com/sheets/api/quickstart/nodejs
You can found a very useful button on this page:

Click on that button to create a new project and download credentials file (credentials.json). Create a new file package.json

< «name»: «spreadsheets-bot», «version»: «1.0.0», «description»: «», «main»: «index.js», «scripts»: < «test»: «echo «Error: no test specified» exit 1″ >, «keywords»: [], «author»: «», «license»: «ISC», «dependencies»: < «googleapis»: «^59.0.0», «telegraf»: «^3.38.0» >>
Enter fullscreen mode

Exit fullscreen mode

  • googleapis — library for google api
  • telegraf — Telegram Bot framework

You can run npm install to install this dependencies.

const fs = require(‘fs’); const readline = require(‘readline’); const = require(‘googleapis’); // If modifying these scopes, delete token.json. const SCOPES = [‘https://www.googleapis.com/auth/spreadsheets.readonly’]; // The file token.json stores the user’s access and refresh tokens, and is // created automatically when the authorization flow completes for the first // time. const TOKEN_PATH = ‘token.json’; // Load client secrets from a local file. fs.readFile(‘credentials.json’, (err, content) => < if (err) return console.log(‘Error loading client secret file:’, err); // Authorize a client with credentials, then call the Google Sheets API. authorize(JSON.parse(content), listMajors); >); .
Enter fullscreen mode

Еще по теме:  Как разместить видео спортивного матча в Телеграмм канале

Exit fullscreen mode

Quickstart code solves the authorization problem to gain access to your personal tables, which is what we need.
However, it is advisable to immediately make a change: remove «.readonly» from the line

const SCOPES = [‘https://www.googleapis.com/auth/spreadsheets.readonly’];
Enter fullscreen mode

Exit fullscreen mode

This will change readonly access to read const readline = require(‘readline’); const = require(‘googleapis’); const < Telegraf >= require(‘telegraf’); // import Telegraf // Telegram bot access token: const BOT_TOKEN = ‘1234567890:a1b2Cg2cLR4LGO1EpvDHawYPVjunkW3Bfk9’; // spreadsheets scope: read
Enter fullscreen mode

Exit fullscreen mode

You can receive messages and send replies:

const bot = new Telegraf(BOT_TOKEN); // Load client secrets from a local file. fs.readFile(‘credentials.json’, (err, content) => < if (err) return console.log(‘Error loading client secret file:’, err); // Authorize a client with credentials, then call the Google Sheets API. authorize(JSON.parse(content), startBot); >); function startBot(auth) < bot.on(‘message’, (ctx) => < if (ctx.from.id !== ‘123456789’) < // your user id return ctx.reply(‘Access Denied’); >console.log(ctx.message.text); ctx.reply(«Hi, » + ctx.from.id); >); bot.launch(); >
Enter fullscreen mode

Exit fullscreen mode

Depending on the task, you can compose commands or a dialogue with the bot, in which you can use the ability to read and write from tables.

Here is an example of writing to a table:

. const rowNumber = «2»; let values = [ [ «Formula:», // string value «=128/2+ROUND(8/3;2)», // any formula «User:», «Ben», », // empty cell ] ]; const resource = ; let valueInputOption = [ ‘RAW’, // as string ‘USER_ENTERED’,// will be parsed as user input ‘USER_ENTERED’, ‘USER_ENTERED’, ‘USER_ENTERED’, ]; const range = sheet + ‘!A’ + rowNumber + ‘:E’ + rowNumber; const spreadsheetId = ‘mKj7bEUzG7miu4m5nsBt4KWTM6IIgstwn9g1a7IvVwz0’; sheets.spreadsheets.values.update(< spreadsheetId, range, valueInputOption, resource, >, (err, result) => < if (err) < // Handle error console.log(err); ctx.reply(err.toString()); >else < ctx.reply(«Data saved.»); //reply from bot to user console.log(‘%d cells updated.’, result.data.updatedCells); >>);
Enter fullscreen mode

Exit fullscreen mode

Upload your bot to cloud for free

For convenience, the bot must be running 24/7. Then you can use it from your phone even when all your computers are turned off.

One of the options is Free Trial on Google Cloud Platform:
https://console.cloud.google.com/

Alt Text

For me this is not charging anything. Because the load on the server is too low.

Alt Text

You need to setup a new minimal cloud VM with Ubuntu or what you like.

Alt Text

When you connect to your new server by ssh, you can install node, npm and run your bot.

I recommend using PM2 to run script.

Enter fullscreen mode

Exit fullscreen mode

Simple upload your script with rsync from local host to google cloud host:
rsync -ruv LOCAL_PROJECT_PATH SERVER_HOST:REMOTE_PATH

and start on the remote:

cd REMOTE_PATH pm2 start index.js
Enter fullscreen mode

Exit fullscreen mode

Note that you should replace all my «uppercase» with your data (path to the project, server’s ip, etc.)

Alt Text

Bot is started and you can use it 24/7

Источник: dev.to

Telegram-бот с помощью таблицы Google

Telegram

Для создания собственного Telegram-бота потребуется минимум программирования. На самом деле вам даже не нужно иметь редактор кода, чтобы начать. К концу этого поста вы узнаете, как создать свой личный интерактивный Telegram-бот всего лишь с помощью электронной таблицы Google. Конечным продуктом будет бот, отвечающий на ваши сообщения. Что-то вроде этого:

Skillfactory.ru

Прежде всего я хочу, чтобы у вас сложилось понимание принципов работы бота. Мы коснёмся концепции веб-хуков и будем регулярно обращаться к документации API Telegram-бота.

Краткое введение в веб-хуки

Приложения общаются двумя способами: через polling и webhooks. Когда вы совершаете онлайн-покупку и получаете сообщение от приложения вашей кредитной карты, это — интеграция в действии. Когда вы переводите деньги из приложения и получаете SMS для вашего провайдера — это интеграция в действии. Разработчики создают в приложениях способ получать данные друг от друга, потому что это довольно круто и это то, что хотят пользователи.

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

Веб-хуки как рыболовные крючки

Подумайте об интеграции приложений как о рыбалке. Это похоже на попытку поймать рыбу, только на этот раз ваше приложение ловит данные. Сейчас вы можете рыбачить двумя способами: первый — вы бросаете сеть над водой и проверяете её в установленные периоды, чтобы увидеть, не поймали ли вы рыбу.

Второй: вы нанизываете червя на крючок и ждете, пока не почувствуете, что движущаяся рыба тянет вас на себя. Именно так работают API polling и webhooks. С помощью опроса API приложение проверяет другое приложение в каждый установленный период времени, чтобы увидеть, есть ли данные для извлечения, в то время как с помощью веб-хуков приложение просто ждёт передачи данных, которая начинается событием.

А что такое события?

События — это действия, инициируемые человеком. Нажатие кнопки добавления товара в корзину, отправка сообщений кому-то или переход на определенную веб-страницу — всё это события, вызванные человеком. К этим событиям прилагаются данные. Когда вы кладёте товар в свою корзину, то метка времени, товар и цена, скорее всего, являются частью данных, генерируемых из события. Когда вы отправляете сообщение боту в Telegram, метка времени, ваш идентификатор пользователя, идентификатор сообщения и само сообщение — части данных, генерируемых отправкой сообщения.

Требования

Есть две вещи, которые нам нужны, чтобы создать бота с веб-хуками:

  1. Пропуск — мы не можем просто так получить доступ к данным из другого приложения. Разработчикам нужен способ отследить, кто получает доступ к их приложениям с черного хода. Для этого они выдают уникальные ключи всем, кто хочет войти в их приложения вне основного пользовательского интерфейса. Я покажу вам, как быстро получить ключ Telegram — буквально за минуту.
  2. Загрузочный док — как только у нас появится доступ к другому приложению, мы сможем начать извлекать из него данные. Но для этого нам нужен загрузочный док — место для приема этих данных. Наш док — URL веб-приложения. Приложение не может выгрузить данные, если у нас нет загрузочной платформы. С платформы же мы можем делать с данными все, что захотим: проверять их, манипулировать ими, отправить в другое приложение или даже обратно в наше приложение.
Еще по теме:  Исключите неверный вариант и обоснуйте выбор письмо Телеграмма

Вот изображение морского порта, иллюстрирующее, как работают веб-хуки. Во-первых, кран поднимает контейнер с судна и ставит его на погрузочную площадку. Оттуда тот, кто контролирует морской порт, может снова поднять контейнер и поставить его на другое судно. Теперь представьте, что кран — это веб-хук, а корабли — два разных приложения; загрузочный док — это адрес приложения.

Хук извлекает данные из App 1 (корабля внизу слева) и отправляет их на URL-адрес веб-приложения. Оттуда можно отправить эти данные в App 2 (корабль вверху справа) или сделать с ними всё, что захотите. Этот контейнер теперь ваш. Открывайте, проверяйте и отправляйте!

Рождение бота

Теперь, когда у вас есть понимание, как работают веб-хуки, мы можем создать бота!

Пропуск

Во-первых, нам нужен пропуск. В некоммерческих приложениях может потребоваться запросить у разработчика напрямую, но, к счастью, есть очень простой способ получить ключи входа (или токены) авторизации в Telegram. Ключи нам даст BotFather!

  1. Кликните по ссылке.
  2. Поздоровайтесь с ним (надо отдать должное).
  3. Отправьте придуманное вами имя бота.
  4. БАМ! Токен у вас в руках! ?

Настройка таблицы Google

Как только у нас будет токен, создайте электронную таблицу Google и перейдите в меню Инструменты > Редактор сценариев . Именно здесь мы будем писать код.

Строим загрузочный док

Нам нужен URL приложения, чтобы получать данные из Telegram. К счастью, у Google очень простая публикация веб-приложений через редактор сценариев. Когда мы опубликуем скрипт, то получим уникальный адрес веб-приложения. Нажимайте Publish в редакторе скриптов Google Spreadsheet. Пожалуйста, обратите внимание на варианты на изображении ниже.

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

И теперь у нас есть адрес веб-приложения! ?

Сохраните все ссылки в переменных

Теперь, когда у нас есть пропуск и загрузочный док, давайте создадим веб-хук — наш крючок. Согласно документации Telegram API, все запросы к API (App Programming Interface) должны быть такими: https://api.telegram.org/bot/METHOD_NAME . Похоже, нам будет очень часто нужна эта ссылка. Давайте сохраним все нужные ссылки в переменных, чтобы мы могли легко писать их позже:

var token = «1379225052:AAHXeY6p816laT1nrVLU-qX3ufMXcymqyoM»; var telegramUrl = «https://api.telegram.org/bot» + token; var webAppUrl = «https://script.google.com/macros/s/AKfycbyGlsL9W7VG413SHoJ6LSNxs_uW8ZtbLY7h0hk9oOruxmZlizg/exec»;
var token = «1379225052:AAHXeY6p816laT1nrVLU-qX3ufMXcymqyoM»;
var telegramUrl = «https://api.telegram.org/bot» + token;
var webAppUrl = «https://script.google.com/macros/s/AKfycbyGlsL9W7VG413SHoJ6LSNxs_uW8ZtbLY7h0hk9oOruxmZlizg/exec»;

Настройка веб-хука

Чтобы настроить хук, давайте напишем функцию, которая позволит нам извлекать данные из Telegram с помощью токена от Botfather. Эти данные должны быть отправлены непосредственно на адрес нашего веб-приложения. Вы можете скопировать и вставить код ниже и нажать кнопку Опубликовать, когда закончите.

function setWebhook() < var url = telegramUrl + «/setWebhook?url wp-block-image»>

Авторизуйте приложение: жизнь слишком коротка, чтобы прожить её в безопасности:

Skillfactory.ru

Настройка обмена сообщениями

Есть две вещи, которые наш бот должен знать, прежде чем сможет отправить кому-то сообщение:

  1. Кому сообщение? Идентификатор чата.
  2. Что напишем? Текст сообщения.

Запишем эти требования как параметры функции. Не стесняйтесь копировать и вставлять код:

function sendMessage(chat_id, text) < var url = telegramUrl + «/sendMessage?chat_id=» + chat_id + «>Настройка запроса POST

По словам разработчиков Telegram, все запросы к API должны идти по HTTPS. Они также упомянули, что поддерживают только запросы GET и POST. GET означает, что кто-то пытается получить данные. POST означает, что кто-то пытается их отправить. Это единственная концепция в учебнике, которую я ещё не освоила, поэтому я перестану притворяться, что знаю, о чем говорю, и просто покажу вам эту статью, которая помогла мне лучше понять принцип.

В любом случае, важно знать, что вы должны написать функцию, которая может отправлять POST-запрос в Telegram, чтобы вы могли отправлять сообщение каждый раз, когда человек общается с вашим ботом. Не стесняйтесь копировать и вставлять этот код. Я объясню, что он делает, в ближайшее время:

function doPost(e)

Нам нужна эта функция, потому что она — наш способ отправки данных в Telegram и сам Google требует, чтобы его пользователи сценариев приложений — то есть мы — включали либо функцию doGet , либо doPost , когда публикуем веб-приложение. Вот документация об этом. В этом документе Google объясняет, что означает аргумент ( e ) в функции.

Он представляет собой данные из события, созданного человеком внутри приложения, к которому подключен наш веб-хук. В нашем случае аргумент e содержит все данные, генерируемые всякий раз, когда человек отправляет сообщение Telegram-боту. И именно в аргументе мы получим идентификатор чата пользователя. В конце концов, все предыдущие бредни оправдались ? (может быть).

Итак, вот история нашего бота:

  1. Когда пользователь общается с нашим ботом Telegram, происходит событие. Оно генерирует данные, получаемые нами из e .
  2. Веб-хук автоматически отправляет e на URL-адрес веб-приложения.
  3. Как только e попадёт в URL-адрес веб-приложения, оно захочет отправить запрос POST в Telegram. Он запросит Telegram об отправке сообщения пользователю.
  4. Однако он не может отправить запрос с неполными требованиями. Нам нужен идентификатор чата человека и сообщение, которое мы хотим отправить в Telegram. Функция doPost переносит сообщение внутри переменной text .
  5. doPost также обрабатывает идентификатор chat , но сначала ей нужно проанализировать e , чтобы найти его.
  6. После обнаружения она передаёт параметры в Telegram с помощью функции sendMessage . Всё: сообщение передаётся пользователю. Запрос завершен. И вот — работающий бот:

На случай, если ты запутался…

var token = «1379225052:AAHXeY6p816laT1nrVLU-qX3ufMXcymqyoM»; var telegramUrl = «https://api.telegram.org/bot» + token; var webAppUrl = «https://script.google.com/macros/s/AKfycbyGlsL9W7VG413SHoJ6LSNxs_uW8ZtbLY7h0hk9oOruxmZlizg/exec»; function setWebhook() < var url = telegramUrl + «/setWebhook?url=» + webAppUrl; var response = UrlFetchApp.fetch(url); >function sendMessage(chat_id, text) < var url = telegramUrl + «/sendMessage?chat_id=» + chat_id + «+ text; var response = UrlFetchApp.fetch(url); Logger.log(response.getContentText()); >function doPost(e)

  • Использование компонентов между фреймворками
  • Упрощаем работу с Google-формами: Apps Script и выпадающее меню
  • Как избежать CORS в одностраничных приложениях

Источник: nuancesprog.ru

Рейтинг
( Пока оценок нет )
Загрузка ...