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

Google Apps Scripts骰子机器人仅DM响应,房间内无响应如何解决?

Google Chat骰子机器人房间无响应问题排查与解决

我之前也碰到过Google Chat机器人在房间里不响应的情况,结合你的描述和代码场景,咱们从这几个方向排查解决:

一、先检查权限配置是否到位

Google Chat机器人的权限是核心,哪怕你在功能设置里勾选了房间和DM选项,权限范围不对也会出问题:

  • 打开你的Apps Script项目,查看appsscript.json(如果没显示,点击右上角的"设置"图标,勾选"显示appsscript.json清单文件"),确保oauthScopes里包含https://www.googleapis.com/auth/chat.bot——这是机器人接收和发送消息的必备权限。示例配置:
"oauthScopes": [
  "https://www.googleapis.com/auth/chat.bot"
]
  • 另外,确认Google Cloud Console中关联的项目里,OAuth consent screen已经把这个权限范围添加进去(如果是内部团队使用,直接发布即可;外部用户使用需要提交审核)。

二、验证消息触发函数是否正确

你能收到onAddToSpace()的消息,说明空间添加的触发没问题,但消息处理的触发可能有疏漏:

  • 确保你的消息处理函数是onMessage(e),函数签名要正确,参数e是Chat传递的事件对象。如果你用了自定义函数名,必须在manifest的chat字段里显式指定,比如:
"chat": {
  "eventTrigger": {
    "function": "你的自定义消息处理函数名"
  }
}
  • 打开Apps Script的"执行记录"页面,看看当你在房间发消息时,有没有onMessage函数的执行记录。如果没有,说明触发没生效;如果有错误日志,直接根据报错信息修复(比如语法错误、权限不足等)。

三、检查响应格式是否符合Chat要求

Google Chat对机器人的响应格式有严格要求,返回内容不符合规范就会显示"Not Responding":

  • 必须返回一个包含text或cardsV2字段的对象,不能直接返回字符串。比如错误写法:return "掷出了6点";,正确写法:return {text: "掷出了6点"};
  • 如果你的代码里有异步操作(比如调用外部API),一定要用同步方式处理,因为Apps Script的触发器是同步执行的,异步回调会导致函数提前返回空值。

四、调整房间消息监听设置

默认情况下,Google Chat机器人在房间里可能需要被@才能触发响应,你可以通过manifest配置取消这个限制:

  • 在appsscript.json的chat字段里添加"inviteOnly": false,这样机器人就能接收房间里的所有消息,不需要被@。完整的chat配置示例:
"chat": {
  "botWorksInRooms": true,
  "botWorksInDirectMessages": true,
  "inviteOnly": false,
  "addToSpaceFallbackMessage": "骰子机器人已加入房间!输入指令开始掷骰子~"
}

五、重新部署机器人

有时候部署缓存会导致配置不生效,建议你重新部署一次:

  • 进入Apps Script的"部署"页面,点击"管理部署",创建一个新的版本,选择"Chat bot"类型,设置为"活动"状态,然后重新添加到房间测试。

附:完整代码与manifest示例

给你一个经过验证的简化版骰子机器人代码,你可以参考调整自己的逻辑:

代码部分

/**
 * 机器人被添加到空间时的响应
 * @param {Object} e Chat传递的事件对象
 * @return {Object} 响应内容
 */
function onAddToSpace(e) {
  return {
    text: "骰子机器人已上线!输入 `!roll` 掷1个6面骰,或者 `!roll 2d6` 掷2个6面骰~"
  };
}

/**
 * 处理房间/私信中的消息
 * @param {Object} e Chat传递的事件对象
 * @return {Object} 响应内容
 */
function onMessage(e) {
  const messageText = e.message.text.trim().toLowerCase();
  let responseText = "";

  // 处理掷骰子指令
  if (messageText.startsWith("!roll")) {
    const dicePattern = /!roll (\d+d\d+)/;
    const match = messageText.match(dicePattern);
    if (match) {
      const [num, sides] = match[1].split("d").map(Number);
      let total = 0;
      const rolls = [];
      for (let i = 0; i < num; i++) {
        const roll = Math.floor(Math.random() * sides) + 1;
        rolls.push(roll);
        total += roll;
      }
      responseText = `你掷了${num}个${sides}面骰:${rolls.join(", ")},总和是${total}!`;
    } else {
      // 默认掷1个6面骰
      const roll = Math.floor(Math.random() * 6) + 1;
      responseText = `你掷出了${roll}点!`;
    }
  } else {
    responseText = "我不知道这个指令哦~ 输入 `!roll` 来掷骰子试试!";
  }

  return { text: responseText };
}

Manifest(appsscript.json)部分

{
  "timeZone": "Asia/Shanghai",
  "dependencies": {},
  "oauthScopes": [
    "https://www.googleapis.com/auth/chat.bot"
  ],
  "chat": {
    "botWorksInRooms": true,
    "botWorksInDirectMessages": true,
    "inviteOnly": false,
    "addToSpaceFallbackMessage": "骰子机器人已加入房间!输入指令开始掷骰子~"
  },
  "exceptionLogging": "STACKDRIVER"
}

内容的提问来源于stack exchange,提问作者JD L

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:32:02