Не могу открыть диалог 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 диалога уже выполнены.
- Если вы изменили свой сценарий, повторно разверните веб-приложения в качестве новой версии. Этим сценарий последней версии отражается на веб-приложениях.
Рекомендации:
В моем окружении я подтвердил, что этот модифицированный скрипт работает. Но если это не сработало, извини.