Приветствую, друзья! Сегодня я расскажу вам о том, как мы создали бота, который отвечает на статьи из Хабра, используя ChatGPT
Сразу посмотреть результат!
ChatGPT - это модель генерации текста, разработанная командой OpenAI. Эта модель использует алгоритмы машинного обучения для генерации текста, который похож на текст, написанный человеком. ChatGPT обучена на миллионах текстовых данных и может генерировать ответы на основе предоставленного
Шаг 1: Настройка телеграмм бота
Первым шагом в создании нашего бота была настройка телеграмм бота. Мы зарегистрировали нового бота в телеграмме и получили API-ключ, который необходим для общения с телеграмм API и отправки сообщений через бота.
Шаг 2: Получение данных из Хабра
Для получения текста последней статьи с Хабра мы использовали парсинг веб-страницы. Мы написали скрипт, который каждые 60 минут парсит страницу с последними статьями Хабра и получает текст последней опубликованной статьи.
Шаг 3: Использование ChatGPT для генерации ответов
Для того, чтобы наш бот мог генерировать ответы на статьи из Хабра, мы использовали ChatGPT. Для работы с этой моделью мы использовали библиотеку OpenAI для Python, которая предоставляет интерфейс для работы с моделями генерации текста, включая ChatGPT.
Шаг 4: Реализация бота
Для реализации нашего бота мы использовали библиотеку Telebot для Python. Мы написали скрипт, который получает текст последней статьи с Хабра, использует ChatGPT для генерации ответа на основе текста статьи и отправляет ответ через телеграмм API.
Шаг 5: Автоматическая публикация ответов
Мы настроили бота на автоматическую публикацию ответов на созданный нами канал в телеграмме. Теперь каждый раз, когда бот генерирует ответ на новую статью из Хабра, он автоматически публикует его на канале, доступном для просмотра всем желающим.
В результате мы создали бота, который может генерировать ответы на основе текста последней статьи с Хабра, используя ChatGPT и автоматически публиковать ответы на канале в телеграмме. Этот бот может быть полезен для тех, кто хочет быть в курсе последних новостей и обсуждений на Хабре, но не имеет времени или возможности постоянно следить за сайтом.
Топики и треды в Телеграм
Telegram запустил топики - тематические подгруппы в группах от 200 участников и более. Функцию ждали давно: беспорядок и лавина сообщений снижают вовлеченность участников и качество общения, а треды не сильно помогали.
Официальный релиз
Новая функция позволяет создавать отдельные чаты внутри основной группы для тех или иных обсуждений. Для каждой такой темы можно отдельно настроить уведомления о новых сообщениях и быстро просмотреть в разделе «Общие медиа» медиафайлы, которые были опубликованы именно в ней.
Участники могут общаться в любых темах – от «Аниме» до «Ящериц», – используя весь арсенал привычных инструментов, в том числе опросы, закреплённые сообщения и ботов.
Возможность разделить общий чат на темы была создана специально, чтобы сделать удобнее обсуждения в больших группах. Опробовать темы можно в нашей демонстрационной публичной группе.
Администраторы могут включить темы в «Настройках группы» и выбрать, кому будет доступно создание тем, в разделе «Разрешения».
Как это работает
После добавления топиков группа фактически превращается в список тем для обсуждений, в которые можно вступать. По сути, форум.
Если открывать основную ссылку на группу, то открывается список тем. Например, https://t.me/ukladvc.
Обычно сверху закрепляют топик с описанием или правилами чата.
По клику на ссылку сообщения из топика открывается сразу топик (не список). Например, https://t.me/ukladvc/41164.
Изображением топика может быть эмодзи, на Telegram premium - и пользовательские эмодзи.
На десктопе пока не обновлено. Вместо топиков открывается обычный чат.
Для топиков нельзя использовать группу, привязанную к каналу для комментариев. Обычно владельцы каналов выбирают: отвязать группу от канала и преобразовать в топик либо создать новую группу и ждать вступления 200 участников.
Участники могут переключать для себя вид группы: как топики или обычный вид.
Можно включать и выключать уведомления топиков свайпом влево или долгим нажатием на тему.
По свайпу вниз (или долгим нажатием на описание) открывается поиск по всем топикам.
Для сравнения: так выглядят треды, которые уже давно есть в Телеграм.
В группах с топиками тредов нет. Вероятно, Телеграм их намеренно разделяет, и в группах с топиками нельзя будет открывать тред с ответами (replies) на сообщение.
Топики и треды удобны, хотя и выглядят менее привычно чем в Discord или Slack. Вовлеченность и качество бесед точно повысится. Участники могут читать только то, что действительно интересно. Но хочется иметь быстрый доступ к "своим" топикам или тредам, а не переходить в группу и искать.
Для этого сделал бота @SaveLinkChatbot, в котором можно хранить список своих топиков и тредов. В принципе бот создан для хранения любых ссылок. Часто приходится сохранять полезную информацию, чтобы прочитать позже или держать под рукой.
Для сохранения обычной ссылки, нужно просто отправить боту текст со ссылкой.
Для сохранения ссылки на топик, нужно открыть топик, копировать ссылку сообщения (можно первого), открыть бота и отправить ему текст со ссылкой.
Для сохранения ссылки на тред, нужно выбрать сообщение, долгим нажатием открыть опции и открыть "ответы" (view replies), копировать ссылку любого сообщения и отправить боту.
Ссылки можно добавлять в одну из категорий: topics (для топиков и тредов), to read, important. Названия можно поменять.
Команда Телеграм планирует до конца года выпустить дополнительные инструменты для организации общения, которые больше подойдут маленьким группам.
Конкурс для мемоделов: с вас мем — с нас приз
Конкурс мемов объявляется открытым!
Выкручивайте остроумие на максимум и придумайте надпись для стикера из шаблонов ниже. Лучшие идеи войдут в стикерпак, а их авторы получат полугодовую подписку на сервис «Пакет».
Кто сделал и отправил мемас на конкурс — молодец! Результаты конкурса мы объявим уже 3 мая, поделимся лучшими шутками по мнению жюри и ссылкой на стикерпак в телеграме. Полные правила конкурса.
А пока предлагаем посмотреть видео, из которых мы сделали шаблоны для мемов. В главной роли Валентин Выгодный и «Пакет» от Х5 — сервис для выгодных покупок в «Пятёрочке» и «Перекрёстке».
Реклама ООО «Корпоративный центр ИКС 5», ИНН: 7728632689
Команды в телеграм ботах
Снова привет)
В ботах часто используются команды вида “/command”, которые провоцируют бота на то или иное действие.
Кто уже создавал ботов мог видеть их в @botfather.
Давайте разберемся как создать этот список команд и присвоить каждой ту или иную функцию.
С созданием списка команд все довольно просто, это реализуется непосредственно в настройках бота через @BotFather:
1) Вводим команду /mybots
2) Видим список наших ботов
3) Выбираем тот бот, которому присвоим список команд
4) Кликаем Edit Bot
5) Кликаем Edit Commands
Далее, следуя формату, отправляем список команд, например:
getkeyboard - получить клавиатуру
save - сохранить
Следим, что нам отвечает отец ботов. Видим сообщение Success - мы молодцы! Идем дальше.
Теперь если мы введем “/” в чате с нашим ботом, то он предложит список команд. Проверяем, что список есть:
Добавим логику нашим командам
Как уже видно из описания команд, я хочу отправить в чат клавиатуру.
Создам новую ГТ и перейду к написанию скрипта
Назову файл 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 msg_array = msg.text.split(" ");
let date = (msg.date/86400)+25569.125;
let user = msg.from.username;
if (text == "/getkeyboard") {
Demo.send_key("Галочки", chat_id, API, keyboard)
}
if (text == "/save") {
Demo.send("Клавиатура сохранена”, chat_id, API)
}
}
}
Все! Для каждой команды теперь добавлен функционал...
Хорошо, расскажу поподробнее))
doPost(e) - стандартная функция телеграма для обработки сообщений ботом. В нее мы записываем, что бот должен делать при получении той или иной команды.
Как видно из скрипта, команда - это простое текстовое сообщение. При заведении списка команд мы ограничиваем пользователя в свободном написании этих самых команд, тем самым упрощая всем жизнь.
Итак, если текст сообщения == “/getkeyboard”, мы отправляем в чат некую клавиатуру.
Если мы отправили боту команду “/save”, то он ответит нам сообщением “Клавиатура сохранена”.
Подробно функции send и send_key, а также библиотека Demo рассматривались в постах ранее. Вот ссылки:
- Создание бота (функция send)
- Клавиатуры (функция send_key)
Дабы не перегружать дорогого читателя инфой, остановлюсь здесь)
Как всегда жду фидбека и вопросиков ^^ Всегда рады пообщаться!
Типы клавиатур в чат ботах
Сегодня познакомимся с существующими клавиатурами в ботах и тем, как их подключить и настроить.
Всего есть два типа клавиатур:
- ReplyKeyboardMarkup;
- InlineKeyboardMarkup.
ReplyKeyboardMarkup используется в случаях, когда вы хотите получить от пользователя конкретный ответ, предоставляя ему возможность не печатать ручками, а выбрать из предлагаемых вариантов. Иными словами, это заготовки текстовых сообщений. Расположены кнопки под полем ввода сообщения
InlineKeyboardMarkup - это более продвинутый вариант кнопок, за которыми скрыт дополнительный функционал. В данном случае кнопки прикрепляются непосредственно к сообщению от бота
В зависимости от выбранной кнопки могут последовать те или иные действия. Эту логику мы задаем в скрипте для каждой кнопки.
В приведенном примере мы хотим записать пользователя на маникюр и предлагаем ему определиться с днем (в качестве примера приведены только два варианта, но это можно закастомить).
После выбора того или иного дня бот внесет инфу в ГТ, а именно: дату, имя пользователя и ид чата.
Запись через чат имеет следующий вид
Здесь мы выбрали кнопку Сегодня и получили ответ от бота.
В ГТ при этом появилась строчка
Подключение и настройка
Каждая клава (инлайн-клавиатур может быть сколько угодно) записана в соответствующую переменную:
var INLINE_Days =
{
"inline_keyboard": [
[{"text": "Сегодня", "callback_data": "today"}],
[{"text": "Завтра", "callback_data": "tomorrow"}],
],
"resize_keyboard": true
}
var KEYBOARD =
{
"keyboard": [
["Записаться", "Отменить запись"]
],
"resize_keyboard": true
}
Обратите внимание, что синтаксис для инлайн (INLINE_Days) и обычной (KEYBOARD) клавиатур различается.
Клавиатурам можно добавить дополнительные свойства, мы использовали только resize_keyboard со значением true. Их не так много и они есть в документации телеграма.
Далее в коде обращаемся к клавам по имени переменной.
С ReplyKeyboardMarkup все достаточно просто. Она добавляется при первом прогоне скрипта, когда вы отправляете в чат команду /start, например.
Нам нужна функция, которая отправит в чат клавиатуру. Функция та же, что и при отправке сообщения ботом send(), за двумя исключениями:
- у функции появляется дополнительный параметр - keyboard;
- у объекта payload появляется доп свойство - reply_markup : JSON.stringify(keyboard)
Ниже скрипт функции отправки обычной клавы в чат:
function send_key (msg, chat_id, api, keyboard)
{
var payload = {
'method': 'sendMessage',
'chat_id': String(chat_id),
'text': msg,
'parse_mode': 'HTML',
reply_markup : JSON.stringify(keyboard)
}
var data = {
"method": "post",
"payload": payload
}
UrlFetchApp.fetch('https://api.telegram.org/bot' + api + '/', data);
}
Вызов функции осуществляется из тела функции doPost(e) одной строкой:
send_key("Поехали", chat_id, API_TOKEN, KEYBOARD)
Здесь всё.
Что касается инлайн-клавиатур.
Отправка клавиатуры наступает при определенном условии. Если пользователь отправил в чат слово “Записаться”, то отправляем ему нашу инлайн-клаву:
if (text == "Записаться") {
Demo.send_key("Выберите день", chat_id, API_TOKEN, INLINE_Days)
}
Переменная text содержит текст сообщения, которое мы и проверяем на соответствие.
Результатом выполнения функции send_key будет сообщение от бота Выберите день и кнопки под ним.
Далее нужно предусмотреть алгоритм обработки нажатия этих кнопок.
Если мы кликаем на какую-либо из кнопок (“Сегодня” или "Завтра"), то добавляем новую строку в ГТ и отправляем сообщение в чат, что запись создана.
if (data == "today")
{
let date = Demo.getNewDate(0);
let ind = get_ind(chat_id);
Clients.getRange(ind,1).setValue(user_name);
Clients.getRange(ind,2).setValue(chat_id);
Clients.getRange(ind,3).setValue(date);
Demo.send("Вы успешно записались. "+"Дата визита: "+ date, chat_id, API_TOKEN);
}
Ниже скрипт полностью (не забываем, что значения глобальных переменных у вас будут свои):
// Объявляем все нужные нам переменные. Док важно открывать именно по ID, а не брать активный док, т.к. запуск кода будет производить бот
const API_TOKEN = "1946675042:AAHg1HTHe42GhR9EEt0EdbR94j1G8pDcTWE";
const DOC = SpreadsheetApp.openById("1ALJLtLdt-LT7GEF4hawIizVeJXFnoPZCsC0pw7kcp70");
const Clients = DOC.getSheetByName("Clients");
const Calendar = DOC.getSheetByName("Calendar");
function api_connector ()
{
var App_link = "https://script.google.com/macros/s/AKfycbx9izXW_GcUvg-OlXuP9...";
UrlFetchApp.fetch("https://api.telegram.org/bot"+API_TOKEN+"/setWebHook?url="+App_link);
}
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;
var msg_array = msg.text.split(" ");
var date = (msg.date/86400)+25569.125;
var user = msg.from.username;
if (text == "Записаться") {
Demo.send_key("Выберите день", chat_id, API_TOKEN, INLINE_Days)
}
if (text == "Отменить запись") {
let ind = get_ind(chat_id);
Clients.getRange(ind,1,1,3).deleteCells(SpreadsheetApp.Dimension.ROWS);
Demo.send("Запись отменена", chat_id, API_TOKEN)
}
}
if (update.hasOwnProperty('callback_query'))
{
var data = update.callback_query.data;
var text = update.callback_query.message.text;
var id = update.callback_query.message.message_id;
var chat_id = update.callback_query.message.chat.id;
var user_name = update.callback_query.from.username;
if (data == "today")
{
let date = Demo.getNewDate(0);
let ind = get_ind(chat_id);
Clients.getRange(ind,1).setValue(user_name);
Clients.getRange(ind,2).setValue(chat_id);
Clients.getRange(ind,3).setValue(date);
Demo.send("Вы успешно записались. "+"Дата визита: "+ date, chat_id, API_TOKEN);
}
if (data == "tomorrow") {
let date = Demo.getNewDate(1);
let ind = get_ind(chat_id);
Clients.getRange(ind,1).setValue(user_name);
Clients.getRange(ind,2).setValue(chat_id);
Clients.getRange(ind,3).setValue(date);
Demo.send("Вы успешно записались. "+"Дата визита: "+ date, chat_id, API_TOKEN);
}
}
}
Отдельно ниже представлена доп функция, которая проверяет наличие ид в ГТ. Если ид уже есть в таблице, мы обновляем данные у строки с этим ид. В противном случае создаем новую строку.
function get_ind() {
let chat_id = 311157431;
let arr = Clients.getRange(1,2,Clients.getLastRow()).getValues()
arr = arr.flat()
let ind = arr.indexOf(chat_id)
if (ind > -1) {
ind = ind+1;
} else {
ind = Clients.getLastRow()+1;
}
return ind
}
ID для подключения библиотеки Demo: 1JkXEW_zfhr6v0TKsvU_ZbygNLpXEczxZcC46fMF_ffk-noMk8UKcMitz
Здесь также заметим, что клик по кнопке в инлайн клавиатуре отправляет боту JSON со свойством callback_query. Это значит, что нам нужны дополнительные переменные, в которые мы запишем значения из этого JSON пакета.
Это краткая вводная в мир клавиатур. Скоро будут посты про простые сервисы, куда будут добавлены и доработаны те же клавиатуры и доп функции.
Чат с прогнозом погоды и триггеры в гугл таблицах (GS6)
Глобально задача в следующем:
1 - забрать с какого-нибудь сайта прогноз погоды
2 - подключить бота и привязать его к таблице
3 - настроить триггер для отправки.
Посмотрев несколько сайтов с погодой - выбор пал на Яндекс, ввиду удобной структуры сайта.
Отсюда я забрал прогноз:
Подробнее о том как спарсить данные с сайта в таблицу в этом посте: Парсинг данных с сайтов в гугл таблички (GS1)
Тут приведу только формулу:
=IMPORTHTML("https://yandex.ru/pogoda/ufa/details?via=mf#26","table",1)
Теперь подключаем бота. Как это сделать - читай тут: Подключение телеграм бота к гугл табличкам (GS3)
Если ранее мы использовали chat_id - чат с самим ботом, то сейчас мы будем использовать ид чата/ группы в телеграме, в который бот был добавлен.
Для этого нам необходимо сохранять ид чата отдельно в таблице и обращаться к этому значению как к значению переменной chat_id.
Соответственно, нам нужна функция, которая будет это делать:
function link(chat_id) {
//записывает ид чата в таблицу
DOC.getSheetByName("Settings").getRange(2,1).setValue(chat_id);
Demo.send("ID записан", chat_id, API_TOKEN);
}
Важно! В строке Demo.send я вызываю функцию send, которая уже рассматривалась в посте про создание бота. Demo в данном контексте - это название библиотеки, также подробнее про библиотеки можно почитать в соответствующем посте.
Вызывать ее мы будем из тела функции doPost(e) при условии, что боту отправлена команда /link. В коде это выглядит вот так:
Теперь соберем все вместе и сформируем сообщение для отправки в чат.
Глобальные переменные:
API_TOKEN - токен бота
DOC - ссылка на вашу гугл таблицу
DATA - лист гугл таблицы, содержащий прогноз погоды
SETTINGS - лист гугл таблицы, содержащий значение chat_id
App_link - URL веб приложения
Все, что в кавычках, должно быть изменено на ваши значения.
Функция для подключения веб хука:
Функция link(chat_id) для запоминания id чата
Функция daily() для формирования и отправки прогноза в чат:
На данный момент функция daily() не вызывается другой функцией или командой типа /link или /hello.
Мы добавим триггер, который будет вызывать функцию автоматически каждое утро.
Переходим на вкладку Triggers
Добавляем новый триггер
В окне задаем необходимые параметры.
Во-первых, функцию. Фукция, которая вызывается по триггеру, - daily().
Event source - по времени (Time-driven)
Type of time based trigger - Day timer (раз в день)
Time of day - в какое время триггер должен сработать
Сохраняем.
Результат работы скрипта ниже.
Дополнительно: триггеры на то и триггеры, что работают автономно (без участия пользователя или разработчика, с закрытым доком или чатом. В любой ситуации сообщение будет отправлено в чат в установленное время с установленной частотой.
Создание библиотеки в гугл скриптах
В Гугл скриптах, как и в других языках программирования, есть возможность использовать библиотеки.
Что такое библиотека? Это набор функций и методов, которые часто используются программистами в разных программах. Чтобы не создавать одну и ту же функцию дважды или больше раз, достаточно один раз сохранить ее в библиотеку и подключать библиотеку к новому коду с уже написанными стандартными функциями.
Го к примерам.
В посте про создание телеграм бота мы использовали только три функции, и эти функции стандартные для любого бота. Следовательно, чтобы при создании второго, третьего… десятого бота не переписывать эти функции снова и снова, давайте просто сохраним их в библиотеку.
Создаем новые ГТ и скрипт в ней
Пропишем функцию send(msg, chat_id) :
function send (msg, chat_id, api) {
//Отправляет сообщения в тлг. На вход функции дать сообщение и ID чата, в который нужно провести отправку
var payload = {
'method': 'sendMessage',
'chat_id': String(chat_id),
'text': msg,
'parse_mode': 'HTML'
}
var data = {
"method": "post",
"payload": payload
}
UrlFetchApp.fetch('https://api.telegram.org/bot' + api + '/', data);
}
Сохраняем проект и делаем деплой
Кликаем по шестеренке и выбираем Library
Кликаем Deploy внизу окна и видим ссылку на библиотеку
Из всей ссылки нам нужен только id, который зашит между /d/ и /4 (согласно скрину выше) - 1iJ_IOEicfGzTlfbhDkcKIcBBEbh9UJ8WLf1FRQZ1Wu_Wnoqw6OBtITjZ. Копируем свой ид и идем дальше.
Создаем новые гугл таблицу и скрипт. В скрипте прописываем глобальные переменные
Помним, что значения этих переменных у вас будут свои.
Попробуем добавить тот же функционал, что и в посте про создание бота, с отправкой сообщения в чат телеграма. Но в этот раз мы не будем создавать функцию send(), а подключим библиотеку, в которой она уже есть.
Добавляем библиотеку
В открывшемся окне вставляем ID библиотеки (не ссылку, а ид) и кликаем Look up
Если подключение библиотеки прошло успешно, в окне появятся дополнительные поля выбора версии и указания идентификатора.
Название идентификатора меняем на короткое и понятное и кликаем Add.
В результате в списке библиотек видим новую библиотеку
Напоминаю, что в библиотеке у нас 1 функция. К ней можно обратиться следующим образом: имяБиблиотеки.имяФункции
Когда вы прописываете имя библиотеки и ставите точку, вы видите список всех доступных функций. В нашем случае это только функция send. Выбираем ее и прописываем передаваемые параметры:
Demo.send("Hello World", chat_id, API_TOKEN)
Сохраняем проект, кликаем Deploy, обновляем Api_link, выполняем функцию api_connector и идем тестить работу этого бота (этот алгоритм действий также подробнее описан в статье про создания бота).
Новый бот отправляет сообщение в чат с помощью функции, которая зашита в библиотеке.
Таким образом, в ту же библиотеку можно добавить ряд стандартных функций и к новым скриптам подключать уже написанные функции, не создавая их снова.
Подключение телеграм бота к гугл табличкам - обновленный пост (GS3)
Всем ку
Комбинация из ТЛГ и ГТ, простота подключения КМК делает из ГТ офигенный инструмент автоматизации.
Тайм-менеджмент, таск-менеджмент, учёт финансов, объявления, пересылка событий - всё это создается и довольно быстро настраивается. Главное - это становится полезным не только в бизнесе, но и для обычных чатлан.
Пост ориентирован прежде всего на людей, которые только познают ГТ и на первых порах не требует знания гугл скриптов. В этом посте будет только первичная настройка и подключение. В следующих постах рассмотрю всё что описал выше (как трекать время, задачи, финансы и т.д. и как это настроить под себя).
Для начала находим отца всех ботов @botfather в телеге.
После старта бота botftaher выведет список команд. Здесь нам интересна команда создания нового бота /newbot.
Порядок очень простой: создать бота, назвать его человеческим языком, задать ему username. В результате получаем API токен нашего бота (1860347610:AAH1q6eqTPnVh0qe6mQWidNSTELcprXEfOk). Он-то нам и нужен.
Теперь переходим к гугл таблице. Создаем новую таблицу, переходим в пункт меню Инструменты/Tools -> Редактор скриптов/ Script editor.
Должно получиться вот это:
Затираем дефолтный код и вставляем следующий скрипт:
const API_TOKEN = '1860347610:AAH1q6eqTPnVh0qe6mQWidNSTELcprXEfOk'
const DOC = SpreadsheetApp.openById(‘10W0T9eOP_NN_6g4qyEJzWjm4nkKRN2vyUOnpx73f-N0’);
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;
var msg_array = msg.text.split(" ");
var date = (msg.date/86400)+25569.125;
var user = msg.from.username;
if (msg_array[0] == "/hello") {
send("Hello World", chat_id)
}
}
}
function send (msg, chat_id) {
//Отправляет сообщения в тлг. На вход функции дать сообщение и ID чата, в который нужно провести отправку
var payload = {
'method': 'sendMessage',
'chat_id': String(chat_id),
'text': msg,
'parse_mode': 'HTML'
}
var data = {
"method": "post",
"payload": payload
}
UrlFetchApp.fetch('https://api.telegram.org/bot' + API_TOKEN + '/', data);
}
Обращаем внимание на переменные DOC и API_TOKEN (выделено жирным). Значения переменных необходимо исправить на ваши значения.
Таким образом:
1) меняем ID гугл таблицы (находится в строке адреса после /d/)
2) меняем токен бота, который мы получили при его создании выше
Круто! Львиная доля работы уже проделана.
Следующим важным моментом является регистрация вебхука (webhook).
Добавим следующий код к нашему скрипту:
function api_connector () {
const App_link = "";
UrlFetchApp.fetch("https://api.telegram.org/bot"+API_TOKEN+"/setWebHook?url="+App_link);
}
Переменную App_link пока оставляем пустой. Следующий шаг - это генерация значения для нее.
Сохраняем наш код и кликаем Deploy.
В открывшемся окне кликаем по шестеренке и выбираем Web app
В поле Who has access выбираем Anyone
И кликаем Deploy.
При первом запуске приложение попросит авторизации. Проделываем это упражнение.
Получаем следующее:
Здесь нам нужен URL в самом конце. Копируем его и вставляем в качестве значения переменной App_link.
Теперь функция должна выглядеть следующим образом:
function api_connector () {
const App_link = "https://script.google.com/macros/s/AKfycbznvI6P0sc4vrIm7GW6C...";
UrlFetchApp.fetch("https://api.telegram.org/bot"+API_TOKEN+"/setWebHook?url="+App_link);
}
Снова сохраняем код и запускаем функцию api_connector:
И наконец переходим к боту в телеге! Запускаем, отправляем команду /hello и видим результат.
Теперь подробно по коду. В коде всего 3 функции:
doPost(e)
send (msg, chat_id)
api_connector ()
doPost - это стандартная функция при работе с телеграм ботами, в которую зашиваются ответные действия от бота при отправке сообщения в чат с ним.
В нашем случае, если мы отправляем команду /hello, бот отвечает Hello World, вызывая функцию send. Это все его действия.
send - функция, которая непосредственно осуществляет отправку сообщения в чат. Функция имеет параметры msg (текст сообщения) и chat_id (ид чата, в который осуществляется отправка).
api_connector - функция подключения вебхука