@danilx556

Как принимать вебхуки через google apps script и записывать данные в google sheets?

Добрый день.

Хочу прининимать из сервиса BotHelp вебхуки. Сервис отправляет данные в JSON.

Покапался в интернете и думаю что мне подойдет doPost. Написал код в apps script:

function doPost (e) {
  var ss = SpreadsheetApp.openById('1YQmHQ07iFfQpSD-KBUZeHpFWOjOcdBkzrEmPPL9Bwf0');
  var sheet = ss.getSheetByName('list');

  var dateTime = Utilities.formatDate(new Date(), "GMT+3", "dd.MM.yyy HH:mm:ss");
  var vkuid = e.parameter.user_id;
  sheet.appendRow([dateTime, vkuid]);
  return ContentService.createTextOutput("Done");
}


Запускаю в сервисе BotHelp отправку вебхука. Гугл скрипт его получает и добавляет новую строку в гугл таблице:
6059847e5a989677760103.png

Но скрипт почему-то параметр user_id не получает или получает не в том виде, чтобы записать в ячейку. Так как вторая колонка пустая в гугл таблице.

Проверил на сервисе pipedream, это вроде сервис который может принять вебхуки.

Там все данные передаются нормально и мой нужный параметр "user_id" есть:
60598616f3e92083255058.png

Подскажите, пожалуйста, как мне в моем скрипте google apps достать параметр "user_id" из вебхука и записать его в таблицу. Спасибо
  • Вопрос задан
  • 817 просмотров
Решения вопроса 1
@danilx556 Автор вопроса
Нашел решение с помощью Александра Иванова https://qna.habr.com/user/oshliaer, спасибо большое.

Вот рабочий код:
function doPost (e) {
  var ss = SpreadsheetApp.openById('1YQmHQ07iFfQpSD-KBUZeHpFWOjOcdBkzrEmPPL9Bwf0');
  var sheet = ss.getSheetByName('list');

  var dateTime = Utilities.formatDate(new Date(), "GMT+3", "dd.MM.yyy HH:mm:ss");
  var jsonString = e.postData.getDataAsString();
  var jsonData = JSON.parse(jsonString);
  var vkuid = jsonData.user_id;
  //var vkuid = e.parameter.user_id;
  sheet.appendRow([dateTime, vkuid]);
  return ContentService.createTextOutput("Done");
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
if( !e || !e.postData || !e.postData.contents) {
        console.log({title:"Bad POST data", e: e});
        return;
    }

    contents = JSON.parse(e.postData.contents);
    if (! contents) {
        console.log({title:"Contents failed to decode", e:e});
        return;
    }

    const vk_user_id = contents.user_id;  // может, так?

    // посмотрите что выводит в лог
    console.log(contents);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы