#javascript #google-apps-script #google-sheets #telegram-bot
Вопрос:
Итак, у меня есть бот для телеграмм, который работает со сценарием приложения Google.
Мой бот отправляет последнюю строку, которая была отредактирована на моем листе, в любом списке ( более 10 списков).
И сообщение от бота идет со встроенной кнопкой «Принято» — и я получаю массив с данными обратного вызова.
Но я не знаю, как я могу исправить «Принято» в строке ( фиксированной ячейке), откуда я получил сообщение.
Функция — сообщение в telegram
function onEdit(e) {
sendTelegram(e)
}
function sendTelegram(e){
var row = e.range.getRow();
var col = e.range.getColumn();
var startRow = 2; // Starting row
var targetColumn = 2; // Row, where placed trigger to send msg
var ws = sheetName; //List name
var sheet = e.source.getActiveSheet();
var sheetName = e.source.getActiveSheet().getName(); //Takes list name
let Company = e.source.getActiveSheet().getRange(row,13).getValue(); //Takes data from row 2 to 13 Column in every list
var firstCol = 2; // Starting from 2 column
var numOfCols = 13;//Ending in 13 column
var fullRowValues = sheet.getRange(row, firstCol, 1, numOfCols).getValues();
var fullRowString = fullRowValues.flat().toString(); // Makes array toString.
let chatId = "ChatId";// Telegram groupId
var text = encodeURIComponent(Company " New Document has Been added" ws)
if(e.source.getActiveSheet().getRange(row,2).getValue() == "Yanson"){ //Yanson- trigger.If in column 2 "Yanson" is set - sends row to group chat.
sendText(chatId,"[New Doc Added!] " Company sheetName " , " fullRowString,accepted);} //accepted - inline button
Функция Отправки Текстовых Сообщений.
function sendText(chatId, text, keyBoard) {
let data = {
method: 'post',
payload: {
method: 'sendMessage',
chat_id: String(chatId),
text: text,
parse_mode: 'HTML',
reply_markup: JSON.stringify(keyBoard)
}
}
UrlFetchApp.fetch('https://api.telegram.org/bot' token '/', data);
}
И выполните функцию, которая отслеживает, когда была нажата кнопка, и сохраните ее в списке «Журнал» в виде массива данных.
function doPost(e) {
let contents = JSON.parse(e.postData.contents);
SpreadsheetApp.openById("SheetId").getSheetByName("Log").appendRow([contents]);
Так что мне просто нужно сделать так, чтобы, когда кто — то нажимает на кнопку «Принято» — текст «Принято» появляется в столбце 15 рядом с отредактированной строкой, которая только что была отправлена ботом.
Вот как выглядит один из моих списков (пример).
И вот как выглядит массив, который я получаю от бота[Содержимое].
Я уверен, что мы можем подключить список и кнопку по имени дела (111/111/111), но не знаем, как 🙁 1.Янсон — триггер для отправки msg 2.Бот отправляет Msg со строкой. 3.Нажатие встроенной кнопки в боте msg. 4. Принято отображается рядом с отправленной строкой. Это то, что я пытаюсь получить и ищу решение для шага 4.
Комментарии:
1. Вы добавляете данные json на лист. Вам нужно получить значения внутри массива. Посмотрите
Object.values(contents)
, И, возможно, вам нужно отфильтровать некоторые из них.2. Можете ли вы предоставить пример ожидаемого результата? извините, я не до конца понял цель.
3. Ага. Поэтому я ожидаю, что когда кто-то нажмет кнопку, текст «Принято» появится рядом со строкой ( где-то в столбце 14-15, но рядом со строкой.), которая была отправлена ботом ( Бот отправляет последнюю строку, которая была добавлена в лист (список) с кнопкой «Принято». Если мы возьмем в качестве примера мой экран с листом, Принятый может появиться в столбце «J», если эта строка была отправлена ботом, и кто-то нажал кнопку «Принято», я думаю, мне нужно отфильтровать вывод json с помощью courtcase ( 111/111/111), но я понятия не имею, как его отфильтровать, а затем подключить его к основному листу с raw и исправить его рядом с этим raw, если была нажата кнопка.
4. Поэтому в основном я ожидаю, что когда кто — то нажмет кнопку «Принять», рядом с этой строкой появится текст «Принять», отправленный ботом 🙁
5. Я понимаю, что вы хотите добавить «Принято» в определенную строку. Что неясно, так это как определить, в какой строке должно быть «Принято». Я действительно изо всех сил старался понять данные, отправленные вашим ботом, но я не могу их понять. Пожалуйста, предоставьте копию своего сообщения бота в тексте (не на скриншоте). И предоставьте некоторую информацию о том, как определить, какая строка должна иметь принятое значение. Пожалуйста, основывайте свои условия на фактическом содержании вашего сообщения бота. Я не нашел судебного дела, о котором вы упоминаете.