Не могу открыть диалог Slack через скрипты Google Apps

Я пытаюсь использовать скрипты приложений Google и расслабиться, чтобы автоматизировать свою работу. И я хочу ввести текст в диалоговом окне Slack, чтобы изменить мою электронную таблицу Google с помощью скриптов приложений Google. Однако, с помощью приведенного ниже кода, я не могу открыть диалог через Slack-API's Slash command, У моего кода есть проблемы?

function doPost(e){
var params = e.parameter;
var token = params.token;
var text = params.text;
var trigger_id = params.trigger_id;
var slackUrl = ["https://slack.com/api/dialog.open"];
if (token == "[token from slack]"){
    var dialog = {
  "token": "[OAuth Token]",
  "trigger_id":trigger_id,
  "dialog":{
  "callback_id": "ryde-46e2b0",
    "title": "Request a Ride",
      "submit_label": "Request",
        "elements": [
          {
            "type": "text",
            "label": "Pickup Location",
            "name": "loc_origin"
          },
          {
            "type": "text",
            "label": "Dropoff Location",
            "name": "loc_destination"
          }
        ]
}
};
var options = {
  'method' : 'POST',
  'contentType': 'application/json',
  'payload' : dialog}; 
UrlFetchApp.fetch(slackUrl, options);
}  
else{
 var res = {"text":"failed token verification!"} 
return          ContentService.createTextOutput(JSON.stringify(res)).setMimeType(ContentService.MimeType.JSON);
 }}

1 ответ

Решение

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

Точки модификации:

  • Используйте строку для "url" из "UrlFetchApp.fetch(url, params)".
  • использование JSON.stringify() за dialog объекта dialog,
  • 'contentType': 'application/json', не требуется.

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

function doPost(e) {
  var params = e.parameter;
  var token = params.token;
  var text = params.text;
  var trigger_id = params.trigger_id;
  var slackUrl = "https://slack.com/api/dialog.open";
  if (token == "[token from slack]"){ // Please input this.
    var dialog = {
      "token": "[OAuth Token]", // Please input this.
      "trigger_id": trigger_id,
      "dialog": JSON.stringify({
        "callback_id": "ryde-46e2b0",
        "title": "Request a Ride",
        "submit_label": "Request",
        "elements": [
          {
            "type": "text",
            "label": "Pickup Location",
            "name": "loc_origin"
          },
          {
            "type": "text",
            "label": "Dropoff Location",
            "name": "loc_destination"
          }
        ]
      })
    }
    var options = {
      'method' : 'post',
      'payload' : dialog,
    }; 
    UrlFetchApp.fetch(slackUrl, options);
  }  
  else{
    var res = {"text":"failed token verification!"} 
    return ContentService.createTextOutput(JSON.stringify(res)).setMimeType(ContentService.MimeType.JSON);
  }
  return ContentService.createTextOutput(); // Important
}

Замечания:

Если в представлении диалога нет исключений, ваше приложение должно ответить 200 OK с пустым телом. Это завершит диалог.

  • Когда он использует диалог, он возвращает пустое тело, используя ContentService.createTextOutput() выше, потому что код состояния не может быть изменен скриптом Google Apps. Когда пустое тело не возвращается, возникает ошибка.
  • Этот измененный скрипт предполагает, что ваши настройки для использования Slack диалога уже выполнены.
  • Если вы изменили свой сценарий, повторно разверните веб-приложения в качестве новой версии. Этим сценарий последней версии отражается на веб-приложениях.

Рекомендации:

В моем окружении я подтвердил, что этот модифицированный скрипт работает. Но если это не сработало, извини.

Другие вопросы по тегам