You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Manychat应用JSON文件中实现类似Google Sheets Manychat应用的关联式设置功能?普通用户是否具备实现权限?

嘿,这个需求我之前帮朋友实现过,刚好能给你详细说说怎么在Manychat应用的JSON里配置出这种联动选择的功能,还有普通用户能不能搞定~

实现Manychat Google Sheets应用的联动选择(表格→工作表)

核心思路:动态下拉菜单+依赖字段

要实现选完电子表格再选对应工作表的联动,关键是用Manychat设置项里的dynamic_options(动态选项)和depends_on(依赖字段)属性,再结合Google Sheets API动态拉取数据。

具体JSON配置示例

下面是Manychat应用JSON文件中settingsoauth部分的核心代码,我标了关键注释方便你理解:

{
  "settings": [
    // 第一个选择框:选择电子表格
    {
      "type": "select",
      "name": "spreadsheet_id",
      "label": "选择你的Google电子表格",
      "options": {
        "dynamic_options": {
          // 替换为你用来获取用户所有表格的API端点URL
          "url": "https://your-api-endpoint.com/get-spreadsheets",
          "method": "GET",
          // 携带OAuth令牌,验证用户身份并访问其Google数据
          "headers": {
            "Authorization": "Bearer {{oauth_access_token}}"
          }
        }
      },
      "required": true
    },
    // 第二个选择框:选择对应工作表(依赖第一个选择框)
    {
      "type": "select",
      "name": "worksheet_id",
      "label": "选择该表格下的工作表",
      "options": {
        "dynamic_options": {
          // 替换为获取指定表格下工作表的API端点,用{{settings.spreadsheet_id}}引用之前选中的表格ID
          "url": "https://your-api-endpoint.com/get-worksheets?spreadsheet_id={{settings.spreadsheet_id}}",
          "method": "GET",
          "headers": {
            "Authorization": "Bearer {{oauth_access_token}}"
          }
        }
      },
      "required": true,
      // 设置依赖:只有选了电子表格才显示这个选择框
      "depends_on": {
        "field": "spreadsheet_id",
        "operator": "not_empty"
      }
    }
  ],
  // 必须配置OAuth2授权,才能访问用户的Google Sheets
  "oauth": {
    "client_id": "你的Google OAuth客户端ID",
    "client_secret": "你的Google OAuth客户端密钥",
    "scopes": [
      "https://www.googleapis.com/auth/spreadsheets.readonly" // 只读权限足够,如需修改可换对应scope
    ],
    "auth_url": "https://accounts.google.com/o/oauth2/auth",
    "token_url": "https://oauth2.googleapis.com/token"
  }
}

怎么实现动态选项的API端点?

普通用户不用自己搭服务器,用Google Apps Script就能搞定——它可以直接调用Google Sheets/Drive API,还能部署成Web App当API用:

步骤1:编写Google Apps Script代码

打开Google Apps Script,新建一个项目,粘贴下面的代码:

function doGet(e) {
  const accessToken = e.parameter.access_token;
  // 验证OAuth令牌(可选但推荐,防止非法请求)
  const service = getOAuthService(accessToken);
  if (!service.hasAccess()) {
    return ContentService.createTextOutput(JSON.stringify({error: "未授权访问"})).setMimeType(ContentService.MimeType.JSON);
  }

  // 如果请求带了spreadsheet_id,返回该表格的所有工作表
  if (e.parameter.spreadsheet_id) {
    const spreadsheetId = e.parameter.spreadsheet_id;
    try {
      const sheets = SpreadsheetApp.openById(spreadsheetId).getSheets();
      const options = sheets.map(sheet => ({
        label: sheet.getName(), // 显示给用户的工作表名称
        value: sheet.getSheetId().toString() // 保存的工作表ID
      }));
      return ContentService.createTextOutput(JSON.stringify(options)).setMimeType(ContentService.MimeType.JSON);
    } catch (err) {
      return ContentService.createTextOutput(JSON.stringify({error: "无法获取工作表:" + err.message})).setMimeType(ContentService.MimeType.JSON);
    }
  } 
  // 否则返回用户的所有Google电子表格
  else {
    const files = DriveApp.getFilesByType(MimeType.GOOGLE_SHEETS);
    const options = [];
    while (files.hasNext()) {
      const file = files.next();
      options.push({
        label: file.getName(),
        value: file.getId()
      });
    }
    return ContentService.createTextOutput(JSON.stringify(options)).setMimeType(ContentService.MimeType.JSON);
  }
}

// 初始化OAuth服务,验证令牌合法性
function getOAuthService(accessToken) {
  return OAuth2.createService('Google')
    .setTokenUrl('https://oauth2.googleapis.com/token')
    .setAccessToken(accessToken);
}

步骤2:部署为Web App

  1. 点击右上角「部署」→「新部署」
  2. 类型选择「Web应用」
  3. 执行权限选「我自己」,访问权限选「任何人,甚至匿名」(要更安全的话可以选「仅限自己」,但这样只有你能测试)
  4. 点击「部署」,复制生成的Web App URL,替换到Manychat JSON里的dynamic_options.url字段即可

普通用户能实现吗?

完全可以!只要你愿意花10-20分钟研究Google Apps Script的基本操作和Manychat应用配置逻辑,不需要专业的后端开发技能。Google Apps Script是低代码工具,语法和JavaScript类似,官方文档也很详细,跟着步骤走就能搞定。

内容的提问来源于stack exchange,提问作者Timur Malyshev

火山引擎 最新活动