【发布时间】:2020-11-03 10:34:16
【问题描述】:
我正在尝试通过 GAS 的按钮单击打开松弛模式。目前我正在发送具有此功能的交互式按钮:
function Send(){
var url = "my slack url here"
var payload =
{
"text": "Here's your interactive buttons message.",
"blocks": [
{
"type": "actions",
"elements": [
{
"type": "button",
"text": {
"type": "plain_text",
"text": "Click Me",
"emoji": true
},
"value": "id_btn",
"action_id": "id_btn"
}
]
}
]
}
var options = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(payload)
};
UrlFetchApp.fetch(url,options);
}
但是,当我与按钮交互时,什么都没有发生。我目前的Get/Post方法如下:
function doGet(e){
return ContentService.createTextOutput("");
}
function doPost(e) {
if (typeof e !== 'undefined') {
// Extract the relevant data
var parameter = e.parameter;
var date = new Date();
var payload = JSON.parse(parameter.payload)
var trigger_id = payload.trigger_id;
var slackUrl = "https://slack.com/api/views.open";
var myToken = "Token I got after installing app to slack"
var payload_upd ={
"trigger_id": trigger_id,
"type": "modal",
"view":{
"title": {
"type": "plain_text",
"text": "Gratitude Box",
"emoji": true
},
"submit": {
"type": "plain_text",
"text": "Submit",
"emoji": true
},
"close": {
"type": "plain_text",
"text": "Cancel",
"emoji": true
},
"blocks": [
{
"type": "input",
"block_id": "my_block",
"element": {
"type": "plain_text_input",
"action_id": "my_action"
},
"label": {
"type": "plain_text",
"text": "Say something nice!",
"emoji": true
}
}
]
}
}
// Send options
var options_upd = {
"headers": {"Authorization": myToken},
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(payload_upd),
};
UrlFetchApp.fetch(slackUrl, options_upd);
}
}
我尝试了各种方法,可以在我的有效负载和选项中组合 trigger_id 和令牌,但我无法找到可行的方法。任何帮助将不胜感激,谢谢。
【问题讨论】:
-
However, nothing is happening when I interact with the button。你的意思是在松弛方面什么都没有发生? GAS UrlFetch 的请求呢,有没有查看响应码、错误信息等?另外,我看到两个不同的请求,哪一个失败了? -
我的第一个 URLFetch 发送了我难以处理的有效负载,这是成功的。失败的部分是当我单击 Slack 中第一个有效负载上的按钮时,这是 doPost(e) 中的部分。我希望在用户单击按钮后显示一个模态,但是 slack 在按钮侧面显示进度圈几秒钟,然后 Slack 上什么也没有发生。我无法显示模态。我怀疑我错误地放置了令牌或触发器 ID,但我无法找出正确的方法。
-
1) 您是否将应用程序脚本项目发布为任何人都可以访问的 Web 应用程序? 2) Slack 应用程序的请求 URL 是否指向您已发布的 Web 应用程序? 3) 尝试使用 requestbin.com 之类的东西来检查 Slack 实际发送的有效负载(您会发现使用
e.parameter.trigger_id实际上更容易)。 -
您是否检查过单击按钮时是否调用了
doPost函数? (请参阅 Apps 脚本仪表板中的My Executions)。在这种情况下,您是否可以进行一些基本的日志记录以检查脚本失败的位置,包括检查来自 UrlFetch 请求的响应? (例如,var res = UrlFetchApp.fetch(slackUrl, options_upd); console.log(res.getContentText()); console.log(res.getResponseCode());) -
谢谢,我会尝试再次检查失败的地方。该应用程序确实是: - 任何人(甚至匿名)都可以访问 - 请求 URL 指向我的应用程序,因为我在调用 doPost(e) 时得到结果 - 我在 doPost(e) 时添加了一个部分以将数据行输入到工作表中) 被调用,并且它正在工作。每次单击按钮时,它都会正确地将我的令牌和 trigger_id 写入行。 - 我还仔细检查了我的 OAuth 令牌,并重新安装了 slack app forged measure。当我使用 e.parameter.trigger_id 时,我认为我没有得到任何东西,因为谷歌表格没有将输入写入单元格。
标签: google-apps-script modal-dialog slack-api slack-dialog slack-block-kit