在 google 脚本中使用 RTM API 将子(回复)消息发布到松弛通道中的线程时遇到问题
Having trouble posting a child (reply) message to thread in slack channel using the RTM API in google scripts
我创建了一个链接到电子表格的 google 脚本,该脚本旨在在更新单元格时向松弛通道线程发送消息。消息 post 正常发送到频道,但我无法将 'thread_ts' 属性添加到 post 消息作为对父级时间戳指示的特定线程的回复信息。我已经多次阅读文档。我做错了什么?
function myonEdit(e) {
var sheet = SpreadsheetApp.getActiveSheet()
var range = e.range;
var columnOfCellEdited = range.getColumn();
if (columnOfCellEdited == 7) {
var url = "https://hooks.slack.com/services/xxxx/xxxx/xxxx" ;
var currentRow = sheet.getActiveCell().getRow()
var name = sheet.getSheetValues(currentRow, 1, 1, 1);
var payload = {
"username" : "robot",
"text" : name,
"icon_emoji": ":robot_face:",
"icon_url" : "http://image",
"thread_ts": "1511829070.000023"
}
sendToSlack_(url,payload)
}
}
function sendToSlack_(url,payload) {
var options = {
"method" : "post",
"contentType" : "application/json",
"payload" : JSON.stringify(payload),
};
return UrlFetchApp.fetch(url, options)
}
下面的修改怎么样?
修改点:
- 无法使用 Incoming WebHooks 回复线程。对不起。我找不到关于这个的文件。我从我的经验中知道这一点。为了回复线程,需要一个访问令牌来做到这一点。您可以从 https://api.slack.com/custom-integrations/legacy-tokens 获取访问令牌或使用 OAuth2 流程获取。
- 为了回复
thread_ts
,请在有效负载中添加频道名称或频道ID。
修改脚本:
此修改后的脚本使用访问令牌向线程发送消息。
function myonEdit(e) {
var sheet = SpreadsheetApp.getActiveSheet();
var range = e.range;
var columnOfCellEdited = range.getColumn();
if (columnOfCellEdited == 7) {
var url = "https://slack.com/api/chat.postMessage"; // Modified
var currentRow = sheet.getActiveCell().getRow();
var name = sheet.getSheetValues(currentRow, 1, 1, 1);
var payload = {
token: "### your access token ###", // Added
channel: "#####", // Please input channel name or ID which includes thread_ts. // Added
username : "robot",
text : name, // name[0][0] or JSON.stringify(name) may be suitable for this line.
icon_emoji: ":robot_face:",
icon_url : "http://image",
thread_ts: "1511829070.000023",
}
sendToSlack_(url, payload);
}
}
function sendToSlack_(url,payload) {
var options = {
"method" : "post",
// "contentType" : "application/json", // Removed
"payload" : payload // Modified
};
return UrlFetchApp.fetch(url, options)
}
如果我误解了你的问题,我很抱歉。
我创建了一个链接到电子表格的 google 脚本,该脚本旨在在更新单元格时向松弛通道线程发送消息。消息 post 正常发送到频道,但我无法将 'thread_ts' 属性添加到 post 消息作为对父级时间戳指示的特定线程的回复信息。我已经多次阅读文档。我做错了什么?
function myonEdit(e) {
var sheet = SpreadsheetApp.getActiveSheet()
var range = e.range;
var columnOfCellEdited = range.getColumn();
if (columnOfCellEdited == 7) {
var url = "https://hooks.slack.com/services/xxxx/xxxx/xxxx" ;
var currentRow = sheet.getActiveCell().getRow()
var name = sheet.getSheetValues(currentRow, 1, 1, 1);
var payload = {
"username" : "robot",
"text" : name,
"icon_emoji": ":robot_face:",
"icon_url" : "http://image",
"thread_ts": "1511829070.000023"
}
sendToSlack_(url,payload)
}
}
function sendToSlack_(url,payload) {
var options = {
"method" : "post",
"contentType" : "application/json",
"payload" : JSON.stringify(payload),
};
return UrlFetchApp.fetch(url, options)
}
下面的修改怎么样?
修改点:
- 无法使用 Incoming WebHooks 回复线程。对不起。我找不到关于这个的文件。我从我的经验中知道这一点。为了回复线程,需要一个访问令牌来做到这一点。您可以从 https://api.slack.com/custom-integrations/legacy-tokens 获取访问令牌或使用 OAuth2 流程获取。
- 为了回复
thread_ts
,请在有效负载中添加频道名称或频道ID。
修改脚本:
此修改后的脚本使用访问令牌向线程发送消息。
function myonEdit(e) {
var sheet = SpreadsheetApp.getActiveSheet();
var range = e.range;
var columnOfCellEdited = range.getColumn();
if (columnOfCellEdited == 7) {
var url = "https://slack.com/api/chat.postMessage"; // Modified
var currentRow = sheet.getActiveCell().getRow();
var name = sheet.getSheetValues(currentRow, 1, 1, 1);
var payload = {
token: "### your access token ###", // Added
channel: "#####", // Please input channel name or ID which includes thread_ts. // Added
username : "robot",
text : name, // name[0][0] or JSON.stringify(name) may be suitable for this line.
icon_emoji: ":robot_face:",
icon_url : "http://image",
thread_ts: "1511829070.000023",
}
sendToSlack_(url, payload);
}
}
function sendToSlack_(url,payload) {
var options = {
"method" : "post",
// "contentType" : "application/json", // Removed
"payload" : payload // Modified
};
return UrlFetchApp.fetch(url, options)
}
如果我误解了你的问题,我很抱歉。