Discord机器人POST请求谷歌表格脚本插入内容显示undefined问题
解决Discord机器人向Google Sheets插入"undefined"的问题
看起来你已经搞定了POST请求的发送,但参数获取环节出了小问题,导致插入的内容变成了undefined。我们一步步来修复这个问题:
问题根源拆解
- 参数引用语法错误:你写的
e.params[text]里,text没有被当作字符串处理——JS会把它当成一个未定义的变量,自然拿不到对应参数值,应该用e.params["text"]或者更简洁的e.params.text。 - 参数传递的小细节:你的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
相关产品推荐
相关产品推荐

