我正在尝试使用 google apps 脚本和 Slack 来自动化我的工作。我希望使用 Slack 对话框输入一些文本,以使用 google apps 脚本修改我的 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);
}}
这个修改怎么样?
修改要点:
- 使用字符串“UrlFetchApp.fetch(url, params)”的“url”。
- Use
JSON.stringify()
for 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
}
Note :
当对话框提交中没有异常时,您的应用程序必须以空正文响应 200 OK。这将完成对话框。 https://api.slack.com/dialogs#response
- 当它使用对话框时,它使用返回空主体
ContentService.createTextOutput()
对于上述情况,因为状态代码无法通过 Google Apps 脚本自定义。当不返回空主体时,就会发生错误。
- 此修改后的脚本假设您已完成使用 Slack 对话框的设置。
- 如果您修改了脚本,请将 Web 应用程序重新部署为新版本。这样,最新版本的脚本就会反映到Web Apps中。
参考 :
- UrlFetchApp.fetch() https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetch(String,Object)
在我的环境中,我确认这个修改后的脚本有效。但如果这不起作用,我很抱歉。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)