Загрузка данных Slack в Google Sheets с подпиской на события - PullRequest
1 голос
/ 12 апреля 2020

Я пытаюсь создать бота в Slack, который отправляет данные о новых сообщениях, отправленных в частный канал (в котором находится бот), в Google Sheet. Я успешно смог сделать это с данными после команды Slack sla sh, используя этот сценарий:

    function doPost(e) {
  if (typeof e !== 'undefined') {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName('Sheet1');
    sheet.getRange(1,1).setValue(JSON.stringify(e));
  }
}

Я пытался использовать тот же сценарий с Events API , но он должен передать запрос с параметром вызова, и конечная точка должна ответить значением вызова. Используя URL-адрес веб-приложения GScript, я получаю неудавшийся ответ. Как заставить рукопожатие проверки URL работать с Google Sheets и отвечать правильной строкой запроса?

Ошибка HTTP HTTP

1 Ответ

2 голосов
/ 12 апреля 2020

Как насчет этой модификации?

Официальный документ гласит следующее. Это уже упоминалось в вашем вопросе.

challenge: случайно сгенерированная строка, созданная Slack. Смысл этой маленькой игры в кошки-мышки состоит в том, что вы будете отвечать на этот запрос телом ответа, содержащим это значение.

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

Модифицированный скрипт:

function doPost(e) {
  if (typeof e !== 'undefined') {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName('Sheet1');
    sheet.getRange(1,1).setValue(JSON.stringify(e));
  }
  var v = JSON.parse(e.postData.contents);  // Added
  return ContentService.createTextOutput(v.challenge);  // Added
}

Примечание:

  • При изменении скрипта веб-приложений, пожалуйста, повторно разверните веб-приложения как новую версию. Таким образом, последний скрипт отражается на веб-приложениях. Пожалуйста, будьте осторожны.

Ссылки:

Если это не было прямым решением вашей проблемы, я прошу прощения.

Добавлено:

Из вашего ответа I'm getting the same error., я думал, что последний скрипт не может быть отражен в веб-приложениях. И как простой скрипт, пожалуйста, скопируйте и вставьте следующий скрипт вместо вашего скрипта. И, пожалуйста, повторно разверните веб-приложения в новой версии. Затем проверьте его еще раз.

Пример сценария:

function doPost(e) {
  var v = JSON.parse(e.postData.contents);
  return ContentService.createTextOutput(v.challenge);
}
  • Когда вы изменили сценарий веб-приложений, пожалуйста, повторно разверните веб-приложения как новую версию. Таким образом, последний скрипт отражается на веб-приложениях. Пожалуйста, будьте осторожны с этим.
...