Заполнение формы заказа в листах Google с помощью telegram-bot и google-apps-script - PullRequest
0 голосов
/ 31 октября 2018

Пытаюсь заполнить бланк заказа в гугл листах через telegram-bot. После того, как пользователь ввел название формы заказа (например, «Лист1»), я хочу отправлять пользовательские элементы из формы заказа по одному элементу за раз и заполнять соответствующие ответы на листе Google.

например: Пользователь: Sheet1. Бот: Apple. Пользователь: 5. Бот: Банан. Пользователь: 2

пример формы заказа

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

var token = "xxx"; //token of telegram-bot from BotFather
var telegramUrl = "https://api.telegram.org/bot" + token;
var webAppUrl = "https://script.google.com/macros/s/xxx/exec"; 
var ssId = "xxx"; /*token of google spreadsheet in
https://docs.google.com/spreadsheets/d/xxx/edit#gid=0 */

function getMe() {
  var url = telegramUrl + "/getMe";
  var response = UrlFetchApp.fetch(url);}

function setWebhook() {
  var url = telegramUrl + "/setWebhook?url=" + webAppUrl;
  var response = UrlFetchApp.fetch(url);}

function sendText(id,text) {
  var url = telegramUrl + "/sendMessage?chat_id=" + id + "&text=" + text;
  var response = UrlFetchApp.fetch(url);}

function doGet(e) {
  return HtmlService.createHtmlOutput("Hi there");}

function doPost(e) {
  var data = JSON.parse(e.postData.contents);
  var text = data.message.text;
  var id = data.message.chat.id;
  var name = data.message.chat.first_name;

  var out = [];  //array to store name of all sheets in spreadsheet
  var sheets = SpreadsheetApp.openById(ssId).getSheets(); 
  for (var y = 0 ; y < sheets.length ; y++) { 
  out.push( [ sheets[y].getName() ] );}

  var sheet = SpreadsheetApp.openById(ssId).getSheetByName(text);

  if (inArray(text, out) == true){
    var cache = CacheService.getScriptCache();
      if (cache.get('order') == text){
        var range_test = SpreadsheetApp.openById(ssId).getSheetByName(text).getRange("A1:A3").getValues();
        //B10 value is 0
        var range_item = SpreadsheetApp.openById(ssId).getSheetByName(text).getRange("B10").getValues();


        for (var r = 0; r < range_test.length; r++){       
          //send to telegram names of all items
          sendText(id,range_test[r])}


        //trying to cash some values and write it to a cell 
        var cashed_item = cache.put(range_item, range_test[0], 30);
        var cashed_item_get = cache.get(range_item)
        sheet.getRange('A9').setValue(text);
        sheet.getRange('A10').setValue(cashed_item_get);

        } 
      else {
            // Puts the value from text into the cache using the key 'order' 
            var cached = cache.put('order', text, 30)}
     } 
   else {sendText(id,"Error. Write the correct vendor name")
          sendText(id,out)}
}

function inArray(target, array) {
  for(var k = 0; k < array.length; k++)  {
    if(array[k] == target) {
      return true; }
     }
      return false; 
     }

На данный момент приведенный выше код работает следующим образом: PrtScn из телеграммы . Пользователь дважды вводит имя продавца и получает ответ с именами всех товаров.

...