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

G-Sheet脚本调用Guilded API发私信遇‘POST is not allowed’错误求助

解决Guilded API POST不允许错误的排查步骤

1. 检查API端点与URL格式

  • 你当前使用的是频道消息端点,但isPrivate参数的作用是让消息在现有频道内仅被提及用户可见,而非创建全新的私信会话。如果要发送真正的一对一私信,需要先调用创建私信会话的接口获取对应频道ID,再发送消息。
  • 修正URL拼接:你的请求URL末尾多了斜杠,应改为https://www.guilded.gg/api/v1/channels/d2ba****/messages(去掉末尾斜杠),部分API对路径格式敏感,多余斜杠会导致请求被拦截。

2. 修正请求体格式错误

  • Mentions格式错误:Guilded API不支持直接用用户名提及用户,必须使用用户ID,且需按指定结构传入:
    mentions: {
      users: ["目标用户ID"] // 替换为实际用户的Guilded ID
    }
    
  • Embeds字段错误:author字段需要是对象格式,不能直接传字符串,正确写法:
    embeds: [{
      author: {
        name: "API"
      }
    }]
    

3. 验证Token权限与频道类型

  • 确认你的Bearer Token(gapi_*****)拥有发送消息的权限,临时Bot Token可能权限受限,需在Guilded后台检查Bot的权限设置。
  • 确认channelid对应的频道是允许发送消息的类型:如果是普通服务器频道,需确保Bot有该频道的发言权限;如果是私信频道,必须先通过API创建私信会话获取正确的频道ID,不能直接使用服务器内的普通频道ID。

修正后的示例脚本

function message ()  {
  var url = "https://www.guilded.gg/api/v1/channels/";
  var channelid = "d2ba*****"; // 若发私信,需替换为创建私信会话后得到的频道ID
  var key = "Bearer gapi_*****";

  const message = {
    content : "It's alive!",
    embeds :[{
      author: {
        name: "API"
      }
    }],
    mentions: {
      users: ["目标用户ID"] // 替换为实际用户ID
    },
    isPrivate : true, // 此参数仅让消息在频道内对提及用户可见,非创建私信
  }

  const params = { 
    method: "POST",
    headers: { 
      Authorization: key,
      "Content-Type": "application/json"
    },
    payload: JSON.stringify(message),
    muteHttpExceptions: true,
  };
  
  Logger.log(JSON.stringify(params));

  const response = UrlFetchApp.fetch(url + channelid + "/messages", params); // 移除末尾斜杠
  var data = JSON.parse(response);
  Logger.log(data);
}

额外提示

如果需要发送真正的一对一私信,需先调用POST /users/{userId}/dm接口创建私信会话,获取返回的频道ID后,再用该ID调用消息发送接口。

内容的提问来源于stack exchange,提问作者Aaron Raven

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:45:48