You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script调用Slack pins.list获取permalinks返回null问题

Slack pins.list 接口取值返回null修复方案

现存代码问题

  • 语法错误:payload对象中"channel": "C0XXXXXXXXX"行末尾缺失逗号,运行时会直接抛出语法异常
  • 请求逻辑错误:
    • GET请求无需传递payload参数,UrlFetchApp会默认将payload作为POST表单内容提交,会导致Slack接口无法识别请求参数
    • payload中混入了接口响应字段ok,该字段不属于请求传参内容,传了也不会被接口处理
  • 响应解析逻辑错误:
    1. pins.list接口返回的置顶集合是顶层复数字段items(数组结构),不存在单数item顶层字段
    2. 置顶链接字段为单数permalink,接口不返回permalinks复数字段
    3. 不同类型置顶项的permalink存储路径不同:消息类置顶的链接在item.message.permalink路径,文件类置顶的链接在item.file.permalink路径
  • 权限前置要求:调用接口使用的Bot Token需要开通pins:read权限,否则接口会返回权限错误

修正后代码

function GetPinns() {
  const channelId = "C0XXXXXXXXX";
  // GET请求参数直接拼接在URL即可
  const url = `https://slack.com/api/pins.list?channel=${channelId}&pretty=1`;

  const options = {
    "method": "get",
    "headers": {
      "Authorization": "Bearer xoxb-替换为你的实际Bot Token"
    }
  };
                    
  const response = UrlFetchApp.fetch(url, options);
  const data = JSON.parse(response.getContentText());
  
  // 先校验接口请求状态
  if (!data.ok) {
    Logger.log("接口请求失败:" + data.error);
    return [];
  }

  const permalinks = [];
  // 遍历所有置顶项提取对应链接
  data.items.forEach(item => {
    switch(item.type) {
      case "message":
        permalinks.push(item.message.permalink);
        break;
      case "file":
        permalinks.push(item.file.permalink);
        break;
      // 其他置顶类型可根据实际业务需求补充提取逻辑
    }
  });

  Logger.log("提取到的所有置顶链接:", permalinks);
  // 后续在此处添加回发消息到Slack的逻辑即可
  return permalinks;
}

使用提示

  • 如果只需要提取频道内消息类置顶,只保留message类型的判断分支即可
  • 回发Slack时可将permalinks数组按行拼接为文本块,调用chat.postMessage接口发送即可

内容的提问来源于stack exchange,提问作者Scott Jablow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:39:44