Telegram bot api что это такое

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

doPost(e)

// основная функция, которая обрабатывает входящие данные от телеграма function doPost(e)< const main = JSON.parse(e.postData.contents); // получаем данные из телеграм бота // вытаскиваем все данные из contents const chatId = main.message.chat.id; const firstName = main.message.chat.first_name; const lastName = main.message.chat.last_name; const messageText = main.message.text; const arrayText = messageText.split(» «); // массив для последующей обработки команд const detailsArray = [chatId, firstName, lastName, messageText, arrayText]; //собираем все что выше массив const objToTransfer = Object.assign(<>, detailsArray); // делаем из массива объект для передачи analyseDetails(objToTransfer); //вызываем функцию для дальнейшей обработки того, что пришло >

Первую часть с JSON я описывал ранее.

Далее я беру по ключу объекта его значение и самое важное тут chatId = main.message.chat.id;

Пишем Telegram бота, который говорит с ChatGPT API

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

Далее я собираю все это в массив, на основе которого создаю объект при помощи Object.assign(<>, detailsArray)

В чем прелесть Object.assign так это то, что созданный объект имеет вид: .

Далее созданный объект я передаю в функцию analyseDetails

analyseDetails(obj)

function analyseDetails(objReceived) < // анализ того, что пришло со стороны телеграма const receivedCommand = objReceived[4][0].toLowerCase(); // «4»: [«/list», «», «» и тд] switch(receivedCommand)< //если пришла команда case ‘/start’: sendStartMessage(objReceived); break; case ‘/help’: sendStartMessage(objReceived); break; case ‘/join’: setNewUser(objReceived); break; case ‘/list’: sendList(objReceived); break; default: // если пришло что-то отличное от команды onModer(objReceived); break; >>

Case /start и /help

function sendStartMessage(obj) < const userId = obj[0]; //Юзер id const startMessage = ` Привет! nn В своей базе я храню данные по срокам предоставления налоговых и бухгалтерских отчетов и деклараций. За $дней до окончания срока я высылаю уведомление об этом.nn Чтобы я смог присылать такие уведомления Вам, отправьте команду /joinnn Чтобы получить список деклараций и сроков их подачи в ближайший квартал, отправьте команду /listnn Если Вам необходимо добавить в базу недостающие сроки подачи деклараций, отправьте мне сообщение в виде «Дата: Декларация» и я передам его на модерацию` sendMessage(userId, startMessage); >

Obj — это тот объект, что приходит из doPost в analyseDetails и далее из него идет на все команды

sendMessage — основная функция, передающая что-либо в телеграм

sendMessage( chatid, chatText)

Вся информация по методу детально описана здесь — https://core.telegram.org/bots/api#sendmessage и повторять ее нет никакого смысла

Разработка Telegram Bot на Python. (0.1 — Разбираем API Telegram)


// базовая функция для отправки сообщения в телеграм с «сервера» function sendMessage(chatid, chatText) < const chatId = chatid; const text = chatText; const payload = < «method»: «sendMessage», «chat_id»: String(chatId), «text»: text, «parse_mode»: ‘HTML’, «disable_web_page_preview»: true >; const data = < «method»: «post», «payload»: payload >; UrlFetchApp.fetch(telegramUrl, data); >

UrlFetchApp.fetch(telegramUrl, data); — передает данные со стороны гугл таблиц на телеграм

Case /join — setNewUser(obj)

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

function setNewUser(obj) < const userId = obj[0]; //Юзер id const userArr = wsUsers.getDataRange().getValues() // получаю массив массивов c пользовательскими id const flatUserArr = userArr.flat() // делаю его обычным массивом для последующего indexOf const userIsHere = flatUserArr.indexOf(userId) // делаю проверку наличия записи пользовательского ID if(userIsHere !== -1)< // если такой пользователь уже есть sendMessage(userId, «Пользователь уже есть в моей базе «) >else < // добавляю нового пользователя wsUsers.appendRow([userId]) // appendRow — каждая ячейка это массив sendMessage(userId, «Пользователь был успешно добавлен.nВ ближайшее время ждите рассылку!») >>

Еще по теме:  Куда сохраняются файлы из Telegram на iPhone

Функция setNewUser() проверяет наличие записанного пользовательского id на листе «Users» и если такого айди там нет — записывает его через wsUsers.appendRow([userId])

Case /list — отправка списка деклараций к подаче в ближайшие 90 дней

// для выполнения /list — список подаваемых деклараций на ближайшие QUARTER дней function getQuarterList() < const today = new Date() // сегодня const quarter = new Date() quarter.setDate(today.getDate() + QUARTER) // сегодня + QUARTER дней const allArr = wsDb.getDataRange().getValues() // массив со всеми датами и декларациями const filteredArr = allArr.filter(row =>(new Date(row[0])) > today (new Date(row[0])) < quarter) // выбираем записи которые больше чем сегодня и меньше чем через QUARTER дней const beautyArr = filteredArr.map(row =>[(row[0].toLocaleString().split(‘,’)[0]) + » : » + row[1]]) // причесываем для последующей конвертации в текст const arrToText = beautyArr.join(‘n’) return arrToText > // послать список подаваемых деклараций на ближайшие QUARTER дней function sendList(obj)< const userId = obj[0]; //Юзер id const text = getQuarterList() // данные к подаче на ближайшие QUARTER дней sendMessage(userId, text); >

getQuarterList — выбирает весь список данных и фильтрует их между датами сегодня и сегодня + 90 дней

sendList — посылает список пользователю

Case default — когда приходит что угодно

// если пришло что-то отличное от команды — отправить администратору бота function onModer(obj) < const userId = obj[0] const userName = obj[1] const userSurname = obj[2] const userMessage = obj[3] const text = `Пользователь $$ с ID $ послал на модерацию сообщение: $` sendMessage(ADMIN_ID, text) >

Функция отправляет «что угодно, отличное от пришедших команд» администратору ADMIN_ID на модерацию

И последняя часть — «серверная»:

Отправка боту «списка приближающихся сроков» по триггеру

// Фильтрованный массив с датами в текст function filteredArrToText()< const filteredArr = filteredDaysArr(); // фильтрованный массив const beautyArr = filteredArr.map(row =>[row[0]+» : » +row[1]]) // «причесанный» фильтрованный массив const textFromArr = beautyArr.join(‘n’) // массив в текст с разделителем новой строки для отправки в телеграм return textFromArr > // Для ежедневного триггера — проверка на наличие отправки function checkerToSend() < const text = filteredArrToText() // что сегодня рассылать — текст из фильтрованного массива if(text.length !== 0)< // если длина текста не равна 0 — т.е. там есть что отправлять const userArr = wsUsers.getDataRange().getValues() // получаю массив с пользовательскими id — кому идет рассылка for(let elem of userArr)< // для каждого элемента массива с пользовательскими id let messageText = ` Через $дней срок подачи:n` sendMessage(elem, (messageText + text)) // отправка сообшения > > >

checkerToSend вешается на триггер по дням и если длина text собранного из filteredArrToText не равна 0, т.е. когда там есть текст — отправляется на всех пользователей из wsUsers.getDataRange().getValues()

Вам также может понравиться

Google Drive: начало работы с DriveApp.

GAS + Vue: Интранет справочник сотрудников, часть 1 — backend

Google sheets цветами радуги

У этой записи 9 комментариев

Егор Караваев 08.12.2021 Ответить

Тоже делаю что-то подобное с ботом. Передачу любого текста из таблицы боту и обратно освоил, но никак не могу настроить передачу картинок через sendPhoto.
Допустим, хочу отправлять боту pie chart в виде картинки. Приходится сохранять сначала на google drive, а оттуда уже по URL отправлять в телегу. Но проблема в том, что URL меняется и в итоге отправляется один и тот же файл. При этом с отправкой картинки на gmail все работает как надо. Были похожие задачи? function createPieChart() < var parents = DriveApp.getFileById(«1tQzMwEtPeFLx….6SfJ_BMcbb4-Y7FQY»).getParents();
var folder = parents.hasNext() ? parents.next() : DriveApp.getRootFolder(); var sheet = SpreadsheetApp.openById(«1tQzMwEtPeFLxMx….bH6SfJ_BMcbb4-Y7FQY»).getSheetByName(«Settings»);
var totalChartLabels = sheet.getRange(«A2:A28»);
var totalChartValues = sheet.getRange(«D2:D28»); var totalsChart = sheet.newChart()
.setChartType(Charts.ChartType.PIE)
.addRange(totalChartLabels)
.addRange(totalChartValues)
.setMergeStrategy(Charts.ChartMergeStrategy.MERGE_COLUMNS)
.setPosition(6,7,0,0)
.setOption(‘legend.position’, ‘bottom’)
.setOption(‘pieSliceText’, ‘value-and-percentage’)
.setOption(‘width’, 300)
.setOption(‘height’, 300)
.setNumHeaders(1) var blob = totalsChart.build().getBlob(); //Email
//sendMail(blob); //Google Drive
folder.createFile(blob); //Telegram
sendChart(adminID);
> function sendChart(id) var url = telegramUrl + «/sendPhoto?chat_id=» + id + «
var response = UrlFetchApp.fetch(url);
>

Добрый день!
Вам в коде нужно дать доступ к файлу другим системам (а не только вам) и еще получить урл:
const resultURL = resultFile.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW).getUrl()

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

function getPicture() < const chart = ws.newChart()
.asColumnChart()
.addRange(ws.getRange(‘A1:B7’))
.setMergeStrategy(Charts.ChartMergeStrategy.MERGE_COLUMNS)
.setTransposeRowsAndColumns(false)
.setNumHeaders(-1)
.setHiddenDimensionStrategy(Charts.ChartHiddenDimensionStrategy.IGNORE_BOTH)
.setPosition(9, 1, 448, 1)
.build(); const chartBlob = chart.getBlob()
const resultFile = DriveApp.createFile(chartBlob)
const resultURL = resultFile.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW).getUrl() console.log(resultURL)
>

Григорий 04.04.2022 Ответить
Евгений 10.08.2023 Ответить

Дмитрий, полезная статья, благодарю!
Подскажи, плиз, а при рассылке сообщений не нужно учитывать лимиты телеграм на отправку 30 сообщений в 1 сек? Если, например, пользователей в массиве на отправку будет 300 человек.
В коде только цикл.
for(let elem of userArr) < // для каждого элемента массива с пользовательскими id
let messageText = ` Через $ дней срок подачи:n`
sendMessage(elem, (messageText + text)) // отправка сообшения
> Или тут как-то по-другому работает? Если не сложно, поясни плиз ;)))

Привет.
Спасибо за очень хороший вопрос.
Учитывать конечно нужно. Равно как и учитывать квоты самого гугла (я об этом тоже уже много раз писал) — 300, кстати, гугл пропустит.
Тут 2 пути:
1) Гугловый — использовать Utilities.sleep() — когда скрипт засыпает на указанное количество миллисекунд. Немедленно переводит скрипт в спящий режим на указанное количество миллисекунд. Максимально допустимое значение — 300 000 (или 5 минут). То есть можно принудительно ограничить количество отправок за определенный интервал времени
Можно сделать массив рассылки сообщений пользователей и через каждые 30 сообщений — засыпать.
2) Телеграмовый — просто создать группу в которой находятся хоть 300 хоть 3000 пользователей и туда завесить бота. Бот будет слать всего лишь одно сообщение в группу (id которой начинается со знака «-«) и оно будет видно всем пользователям. В целом гугл скрипт в связке с таблицами (или firebase) по работе с телегой — далеко не самое лучшее решение, когда количество пользователей начинает расти по экспоненте. Но он бесплатный, остальные же варианты — стоят денег. Именно поэтому я использую второй путь, через группы телеграма.

Евгений 11.08.2023 Ответить

Дмитрий, спасибо за такое подробное пояснение!
Да, про второй вариант тоже думал, что можно так делать. Именно интересовал вариант «Гугловый » :)))
А так да, гугл скрипт + телеграм бот — есть понимание, что для очень большого количества пользователей не гууд. Но для себя и небольшой базы, думаю самое то:) Еще такой вопрос возник: вот например я использую 1 вариант и ставлю выполнение скрипта на паузу, всё это зацикливаю. Отправилась порция, пауза, отправилась порция, пауза и т.д. Как по лимитам гугла это будет?

Пока скрипт «спит» — не идет серверное время? Время исполнения считается? Или как?
Вопрос к тому, что, например, есть база в 3 000 чел. настроил на отправка 30 / пауза. Это 100 пауз. Не будет такого, что на 25 или 45 цикле выполнение остановится и все, дальше не пойдет?

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

Инструкция по получению Токена для Телеграм бота за 5 минут

Инструкция по получению Токена для Телеграм бота за 5 минут

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

Что такое Токен и для чего он нужен

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

Токен бота – это цифровой сертификат чат-бота, который общается с человеком в группах и сообществах ВК, в Телеграм Каналах.

Уникальный идентификатор нужен для:

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

Узнать токен бота в Телеграме может тот, кто создал канал. Это владелец. Если он не распространит сведения об уникальном коде, то никто не сможет взломать его ТГ-канал.

Еще по теме:  QR code для Телеграм

Где взять токен для Телеграм бота

Чтобы создать Telegram Bot API, нужно найти BotFather в Телеграме. Это отец всех ботов. С помощью него можно создавать и управлять многочисленными чат-ботами.

Инструкция, как получить токен в Телеграм:

Теперь этот API нужно прописать в конструкторе чат-ботов или в программном коде, если программист пишет код самостоятельно на языке Python.

Куда вписать токен при создании Чат Бота в сервисе Botman

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

Кстати, на создании Чат Ботов и Автоворонок можно прилично зарабатывать, сейчас это новая ниша, которая очень активно набирает обороты, поэтому многие сервисы и фирмы набирают себе помощников, чтобы закрыть потребность в специалистах, если ты хочешь зарабатывать на этой теме, пройди бесплатный мастер класс и пойми, твоё это или нет. Заработок начинающего спеца начинается от 35 000 рублей, а если человек толковый, то уже от 60 000 руб.

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

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

Если вдруг вам не хочется тратить время на создание ботов, то специалисты Botman.pro помогут и сделают всю работу за вас.

Источник: www.cossa.ru

Большое обновление Bot API 5.0 в Telegram. Этого ждали многие

Большое обновление Bot API 5.0 в Telegram. Этого ждали многиеБольшое обновление Bot API 5.0 в Telegram. Этого ждали многие

Команда Telegram наконец обновила Bot API до версии 5.0. Это одно из самых ожидаемых обновлений, так как ранее различные разработчики отмечали факт нестабильности работы, ограниченности и слабого развития Bot API:

Создатели ботов в Telegram жалуются на ограниченность и нестабильность Bot API

Многие ценят Telegram за удобство, надёжность и функциональность. В частности, в мессенджере с помощью ботов можно значительно расширить эти возможности

Код Дурова Гор Хачатрян

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

Отныне, с обновлением Bot API у разработчиков появилась возможность запускать свой собственный сервер Bot API. После того, как он начнёт свою работу, бот будет отправлять запросы уже на этот сервер вместо api.telegram.org.

После переключения бот также сможет скачивать файлы без ограничения размера, загружать файлы размером до 2000 МБ, загружать файлы, с сервера или по прямой ссылке на файл. Кроме того, появилась возможность использовать любой HTTP URL-адрес, а также локальный IP-адрес и порт для Webhooks.

Разработчики теперь также могут установить позицию max_webhook_connections до 100000, а ещё добавлена возможность получения локального пути как значение поля file_path без необходимости загружать файл после запроса getFile.

Это же нововведение разрешает передавать права также в том случае, если сессия, с которой осуществляется передача, существует не меньше 24 часов. При этом, пользователю, которому осуществляется передача, необходимо написать боту.

Кроме всего прочего, появилась поддержка Live Locations и другие последние нововведения в мессенджере, например, закреплённые сообщения 2.0, варианты ⚽️ и анимированных эмодзи. А ещё Bot API поддерживает анонимных администраторов, отправку сообщений без авторства и отправку плейлистов.

Остальные нововведения можете почитать на официальном сайте Telegram по ссылке.

Bot API changelog

The Bot API is an HTTP-based interface created for developers keen on building bots for Telegram.To learn how to create…

Заглавное изображение: KOD.RU

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

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