松弛API chat.update返回'not_authed'错误

Jam*_*mie 5 json google-apps-script slack-api

我有一个Google脚本作为Web 应用程序运行,以处理松弛应用程序的后端。

该应用程序已通过身份验证,我从中获得了OAUTH 令牌

目前,我可以使用chat.postMessage和上述令牌通过按钮操作发布到频道。

动作url指向我的webapp,并通过doGet进行挂接,根据此响应,我构造了一个JSON对象。

var response_payload = {
    "token" : access_token,
    "ts" : message_ts,
    "channel" : channel_id,
    "text" : "Approved! you are a winner!"
  })

response_url = "https://slack.com/api/chat.update";

sendToSlack_(response_url, response_payload)
Run Code Online (Sandbox Code Playgroud)

通过以下功能发布:

function sendToSlack_(url,payload) {
   var options =  {
    "method" : "post",
    "contentType" : "application/json;charset=iso-8859-1",
    "payload" : JSON.stringify(payload)
  };
  return UrlFetchApp.fetch(url, options)
}
Run Code Online (Sandbox Code Playgroud)

但是返回以下内容:

{"ok":false,"error":"not_authed"}
Run Code Online (Sandbox Code Playgroud)

除了以下内容外,我找不到有关此错误的任何文档

在HTTP POST请求中将JSON发送到Slack

但这是关于chat.postMessage请求的,该请求在我的实现中正常工作。

Wal*_*uch 16

如果使用application/json. 这是文档

所以你的请求应该是这样的:

POST /api/chat.update HTTP/1.1
Authorization: Bearer xoxp-xxx-xxx-xxx-xxx
Content-Type: application/json;charset=UTF-8

{
    "channel": "xxx",
    "text": "Hello ~World~ Welt",
    "ts": "xxx"
}
Run Code Online (Sandbox Code Playgroud)

注意:tokenpayload 中没有字段。


Jam*_*mie 1

好的!谢谢大家的意见..当然我学到了更多。在 slack_api 发推文后,我的原始代码或多或少按原样工作。我必须使用JSON.parse(payload);有效负载才能访问其中的对象参数。完整的示例如下所示。

function post_update(url, payload) {
  var options =
  {
    'method': 'post',
    "payload" : payload,
  };

  var result = UrlFetchApp.fetch(url, options);
  return result.getContentText();
}

function doPost(e) {
  var payload = e.parameter.payload;
  var json = JSON.parse(payload);

  response_url = "https://slack.com/api/chat.update";

  // get object elements
  var action = json.actions[0].value;
  var user = json["user"].name;
  var message_ts = json["message_ts"];
  var channel_id = json["channel"].id;

  if (action == 'approved') // payload if action is 'approved'
  {
    var response_payload = {
      "token" : access_token,
      "ts" : message_ts,
      "channel" : channel_id,
      "text" : "Approved! *" + invitation_name + "* has been sent an invite!",
      "attachments" : JSON.stringify([{
          "text": ":white_check_mark: Approved by @" + user,
           }])
      }
  }

  if (action == 'denied') // payload if action is 'denied'
  {
    var response_payload = {
      "token" : access_token,
      "ts" : message_ts,
      "channel" : channel_id,
      "text" : "Denied. *" + invitation_name + "* has been declined an invite",
      "attachments" :JSON.stringify([{
          "text": ":exclamation: Declined by @" + user,
          }])
    }
  }

  post_update(response_url, response_payload);
  return ContentService.createTextOutput().setMimeType(ContentService.MimeType.JSON);

}
Run Code Online (Sandbox Code Playgroud)