Как получить id сообщения бота в Телеграмм

Итак, мне удалось через 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;

ПЕРЕСЛАТЬ СООБЩЕНИЕ В КАНАЛ ► AIOGram в телеграм канал

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

Далее я собираю все это в массив, на основе которого создаю объект при помощи 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 бота


// базовая функция для отправки сообщения в телеграм с «сервера» 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В ближайшее время ждите рассылку!») >>

Функция 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 — посылает список пользователю

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

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 docs, Часть 1: текст, параграфы, стили.

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

Егор Караваев 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 Ответить

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

Отправка сообщений в Telegram при помощи Python

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

Реализовать функцию отправки сообщения в Telegram при помощи Python довольно просто. План действий:

  1. Создать Telegram-бота с помощью BotFather от Telegram
  2. Получить идентификатор чата
  3. Послать сообщение Telegram с помощью Python

Создание Telegram-бота

  1. Откройте приложение Telegram и найдите BotFather. Это встроенный бот Telegram, который помогает создавать пользовательские боты.
  2. Введите /newbot , чтобы создать нового бота.
  3. Дайте своему боту имя и уникальный username
  4. Скопируйте токен вашего нового бота Telegram

Примечание: не загружайте свой токен в интернет, так как любой пользователь с вашим токеном имеет полный контроль над вашим Telegram-ботом.

Получение идентификатора чата

В Telegram каждый чат имеет ID. Нам он нужен, чтобы отправлять в наш чат сообщения.

Отправьте своему Telegram-боту любое сообщение. После этого запустите скрипт Python, чтобы найти ID вашего чата:

import requests TOKEN = «Сюда вставьте свой токен» url = f»https://api.telegram.org/bot/getUpdates» print(requests.get(url).json())

Примечание редакции Pythonist: если у вас не установлена библиотека requests , нужно сперва ее установить:

$ python -m pip install requests

Этот скрипт вызывает функцию getUpdates , которая как бы проверяет наличие новых сообщений. Мы можем найти ID нашего чата из возвращаемого JSON (на иллюстрации выделен красным цветом).

Примечание: если вы не отправите сообщение своему Telegram-боту, результаты могут быть пустыми.

Найдя идентификатор чата, скопируйте его.

Отправка сообщения Telegram с помощью Python

Скопируйте и вставьте в следующий скрипт Python токен вашего Telegram-бота и ID чата из предыдущих двух шагов. Также напишите собственное сообщение.

import requests TOKEN = «Сюда вставьте свой токен» chat_id = «Сюда вставьте ID чата» message = «Здесь напишите свое сообщение» url = f»https://api.telegram.org/bot/sendMessage?chat_id= print(requests.get(url).json()) # Эта строка отсылает сообщение

Запустите скрипт и проверьте свой Telegram!

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

Telegram API, как получать ID отправленного сообщения?

Feliks_Dark

Метод sendMessage реализую AJAX запросом, ответ ловлю через JSON.parse(XMLHttpRequest.responseText)
Все работает корректно.

Решения вопроса 1

TTATPuOT

https://code.patriotovsky.ru/

Заходите в документацию метода sendMessage.

Читаете там строку:
Use this method to send text messages. On success, the sent Message is returned.

Переводите её в переводчике, понимаете, что она значит и переходите к объекту Message, где есть поле:

Источник: qna.habr.com

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