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

Discord机器人POST请求谷歌表格脚本插入内容显示undefined问题

解决Discord机器人向Google Sheets插入"undefined"的问题

看起来你已经搞定了POST请求的发送,但参数获取环节出了小问题,导致插入的内容变成了undefined。我们一步步来修复这个问题:

问题根源拆解

  1. 参数引用语法错误:你写的e.params[text]里,text没有被当作字符串处理——JS会把它当成一个未定义的变量,自然拿不到对应参数值,应该用e.params["text"]或者更简洁的e.params.text。
  2. 参数传递的小细节:你的axios请求用了params字段,这会把参数拼到URL的查询字符串里(比如...exec?text=xxx),虽然Google Script的e.params能捕获这类参数,但如果想更规范地用POST请求体传递数据,写法需要调整。

方案1:快速修复(保持URL参数传递)

只需要修正Google Script的参数获取逻辑即可:

function doPost(e) { 
  // 正确获取text参数:用点语法或字符串索引
  var textContent = e.params.text; 
  // 避免插入空行,先判断内容是否存在
  if (textContent) {
    // appendRow需要接收数组,哪怕只有一个元素
    SpreadsheetApp.getActiveSheet().appendRow([textContent]); 
  }
  // 返回响应告知请求方处理完成(可选但推荐)
  return ContentService.createTextOutput(JSON.stringify({status: "success"}))
    .setMimeType(ContentService.MimeType.JSON);
}

你的axios请求不用修改,因为params字段会自动把text参数放到URL上,e.params能正确捕获到。

方案2:用JSON请求体传递(更规范的POST方式)

如果想把参数放在请求体里而非URL上,可以同时调整axios请求和Google Script:

修正后的Discord机器人axios请求:

if (message.content.startsWith("!test")) {
  axios.post('https://script.google.com/macros/s/AKfycbwRmVu2yXTN7OISG7SCTYTb8boKAwEpSbq-TxAw0MXMPs_6gg8j/exec', { 
    text: "This is the content to insert" 
  })
}

这里去掉了params嵌套,直接把数据作为POST请求体发送。

对应的Google Script代码:

function doPost(e) { 
  // 解析POST请求体的JSON数据
  var payload = JSON.parse(e.postData.contents);
  var textContent = payload.text;
  if (textContent) {
    SpreadsheetApp.getActiveSheet().appendRow([textContent]); 
  }
  return ContentService.createTextOutput(JSON.stringify({status: "success"}))
    .setMimeType(ContentService.MimeType.JSON);
}

额外提醒

  • 确保你的Google Script已经部署为Web应用,并且权限设置为"任何人,甚至匿名"(如果你的Discord机器人没有身份验证的话)。
  • appendRow()必须接收数组参数,哪怕只有一个元素,这样内容才会正确插入到单个单元格里。

内容的提问来源于stack exchange,提问作者Alex Heaton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:34:07