Невозможно включить «Включить события» Slack через Google Scripts

#javascript #post #google-apps-script #slack-api

#javascript #Публикация #google-apps-script #slack-api

Вопрос:

Итак, я пытаюсь создать SlackBot, который может отслеживать реакции на опубликованное сообщение. Тем не менее, я также пытаюсь читать из таблицы Google, поэтому код для бота будет находиться в скрипте Google, подключающемся к форме.

Мне явно нужно включить события, чтобы видеть реакции, и первым шагом является получение и ответ на запрос POST, который отправляет Slack:

 Our Request:
POST
"body": { 
     "type": "url_verification",
     "token": "---",
     "challenge": "---"
}
  

Я должен ответить чем-то вроде:

 HTTP 200 OK, 
Content-type: text/plain, 
"the challenge code"
  

Когда я получаю запрос POST, он перезаписывает квадрат 1,1 таблицы Google, что не очень хорошо, но, что более важно, моя функция doPost не запускается.

Вот что я получаю от Slack:

 Your Response:
"code": 200
"error": "challenge_failed"
"body": {
 <!DOCTYPE html><html><head><link rel="shortcut icon" href="//ssl.gstatic.com/docs/script/images/favicon.ico"><title>Error</title><style type="text/css">body {background-color: #fff; margin: 0; padding: 0;}.errorMessage {font-family: Arial,sans-serif; font-size: 12pt; font-weight: bold; line-height: 150%; padding-top: 25px;}</style></head><body style="margin:20px"><div><img alt="Google Apps Script" src="//ssl.gstatic.com/docs/script/images/logo.png"></div><div style="text-align:center;font-family:monospace;margin:50px auto 0;max-width:600px">The script completed but did not return anything.</div></body></html> 
}
  

Теперь, вот весь код, который у меня есть в моем Google Script.

 function doPost(request){

  var postJSON = request.postData.getDataAsString();

  var sheet = SpreadsheetApp.getActiveSheet();
  
  // doesn't happen
  sheet.getRange(5, 3).setValue("YEAH");
  // when I send a req using CURL, I get the message
  // "The script completed but did not return anything"
  return postJSON;
}  

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

Любые советы будут оценены, спасибо!

Ответ №1:

Я думаю, что в этом случае требуется вернуть значение challenge . Итак, как насчет следующей модификации?

От:

 var postJSON = request.postData.getDataAsString();
  

Для:

 var postJSON = JSON.parse(request.postData.getDataAsString());
  

А также, пожалуйста, измените следующим образом.

От:

 return postJSON;
  

Для:

 return ContentService.createTextOutput(postJSON.challenge);
  

Примечание:

  • В этой модификации предполагается, что postJSON в вашем текущем скрипте есть {"type": "url_verification", "token": "---", "challenge": "---"} . Пожалуйста, будьте осторожны с этим.
  • Кроме того, предполагается, что веб-приложения развертываются как Execute the app as: Me и Who has access to the app: Anyone, even anonymous .
  • Когда скрипт веб-приложений будет изменен, пожалуйста, повторно разверните его как новую версию. При этом последний сценарий отображается в веб-приложениях. Пожалуйста, будьте осторожны с этим.

Ссылки: