使用Google脚本中的RTM API在Slack Channel中发布孩子(回复)消息时遇到困难



我创建了一个链接到电子表格的Google脚本,该脚本旨在在更新单元格时将消息发送到Slack Channel线程。这些消息对频道发布正常,但是我无法获得" thread_ts"属性以将消息发布为对特定线程的回复,如时间戳记所指示的父邮件。我已经阅读了几次文档。我做错了什么?

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)
  }

以下修改怎么样?

修改点:

  • 它无法使用传入的Webhooks回复该线程。对不起。我找不到有关此文件的文件。我从我的经验中知道这一点。为了回复线程,需要一个访问令牌。您可以从https://api.slack.com/custom-integrations/legacy-tokens获得访问令牌或使用OAuth2 Process。
  • 为了回复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)
}

如果我误解了您的问题,对不起。

最新更新