使用 Node.js 构建 Google Workspace 插件

使用 Node.js 运行时在 Cloud Functions 中创建 Google Workspace 插件。

目标

  • 设置环境。
  • 创建和部署 Cloud Functions 函数。
  • 创建并部署插件。
  • 安装插件。

前提条件

设置环境

在 Google Cloud 控制台中打开您的 Cloud 项目

  1. 在 Google Cloud 控制台中,前往选择项目页面。

    选择 Cloud 项目

  2. 选择您要使用的 Google Cloud 项目。或者,点击创建项目,然后按照屏幕上的说明操作。如果您创建了 Google Cloud 项目,可能需要为该项目启用结算功能

配置 OAuth 权限请求页面

Google Workspace 加购项需要配置同意屏幕。配置插件的 OAuth 权限请求页面可定义 Google 向用户显示的内容。

  1. 在 Google Cloud 控制台中,依次前往菜单 > Google Auth platform > 品牌推广

    前往“品牌推广”

  2. 如果您已配置 Google Auth platform,则可以在品牌推广受众群体数据访问中配置以下 OAuth 权限请求页面设置。如果您看到一条消息,指出Google Auth platform 尚未配置,请点击开始
    1. 应用信息下,在应用名称中输入应用的名称。
    2. 用户支持电子邮件中,选择一个支持电子邮件地址,以便用户在对自己的同意情况有疑问时与您联系。
    3. 点击下一步
    4. 受众群体下,选择内部
    5. 点击下一步
    6. 联系信息下,输入一个电子邮件地址,以便您接收有关项目变更的通知。
    7. 点击下一步
    8. 完成部分,查看 Google API 服务用户数据政策,如果您同意该政策,请选择我同意《Google API 服务:用户数据政策》
    9. 点击继续
    10. 点击创建
  3. 目前,您可以跳过添加范围的步骤。 未来,如果您创建的应用供 Google Workspace 组织以外的用户使用,则必须将用户类型更改为外部。然后,添加应用所需的授权范围。如需了解详情,请参阅完整的配置 OAuth 同意指南。

创建和部署 Cloud Functions 函数

  1. 在 Google Cloud 控制台中,点击激活 Cloud Shell “激活 Cloud Shell”按钮

    激活 Cloud Shell

    Cloud Shell 终端随即会在 Google Cloud 控制台的底部窗格中打开并启动会话。

  2. 点击授权以预配并连接到 Cloud Shell。

  3. 在 Cloud Shell 终端中,启用 Cloud Functions API、Cloud Build API、Google Workspace 插件 API 和 Compute Engine API:

    gcloud services enable cloudfunctions.googleapis.com  \
                        cloudbuild.googleapis.com  \
                        gsuiteaddons.googleapis.com  \
                        compute.googleapis.com
    
  4. 通过点击 Cloud Shell 窗口工具栏上的 代码编辑器按钮 打开编辑器,启动 Cloud Shell Editor。

    借助此内置的代码编辑器,您可以在构建和部署项目的相同环境中轻松查看和修改文件。

  5. 在空目录中,使用以下示例代码创建文件 function.js

    /**
     * Cloud Function that loads the homepage for a
     * Google Workspace add-on.
     *
     * @param {Object} req Request sent from Google
     * @param {Object} res Response to send back
     */
    exports.loadHomePage = function addonsHomePage (req, res) {
      res.send(createAction());
    };
    
    /** Creates a card with two widgets. */
    function createAction() {
      return {
        "action": {
          "navigations": [
            {
              "pushCard": {
                "header": {
                  "title": "Cats!"
                },
                "sections": [
                  {
                    "widgets": [
                      {
                        "textParagraph": {
                          "text": "Your random cat:"
                        }
                      },
                      {
                        "image": {
                          "imageUrl": "https://cataas.com/cat"
                         }
                      }
                    ]
                  }
                ]
              }
            }
          ]
        }
      };
    }
    
  6. 在同一目录中,创建包含以下示例代码的文件 package.json

    {
      "dependencies": {
        "@google-cloud/functions-framework": "^3.0.0"
      }
    }
    
  7. 点击 “激活 Cloud Shell”按钮 打开终端,返回 Cloud Shell 终端。

  8. Cloud Build Service Account 角色 (roles/cloudbuild.builds.builder) 添加到 Compute Engine 默认服务账号。

    首先,设置服务账号权限:

    export PROJECT_ID=$(gcloud config get project)
    export SERVICE_ACCOUNT_NAME=$(gcloud compute project-info describe \
      --format="value(defaultServiceAccount)")
    

    接下来,授予缺失的服务账号权限:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
      --role="roles/cloudbuild.builds.builder"
    
  9. 运行以下命令以部署函数:

    gcloud functions deploy loadHomePage --runtime nodejs22 --trigger-http
    

    如果出现提示,请指定不允许在未通过身份验证的情况下调用函数。部署该函数可能需要几分钟的时间。

创建插件部署

  1. 查找插件的服务账号电子邮件地址:

    gcloud workspace-add-ons get-authorization
    
  2. 向服务账号授予 cloudfunctions.invoker 角色。将 SERVICE_ACCOUNT_EMAIL 替换为上一步中的 serviceAccountEmail 字段。

    gcloud functions add-iam-policy-binding loadHomePage \
       --role roles/cloudfunctions.invoker \
       --member serviceAccount:SERVICE_ACCOUNT_EMAIL
    
  3. 获取已部署函数的网址。如需获取该网址,请运行以下命令,然后在 httpsTrigger 部分下查找 url 字段:

    gcloud functions describe loadHomePage
    
  4. 点击 代码编辑器按钮 Open Editor(打开编辑器),返回到 Cloud Shell 编辑器。

  5. package.json 所在的同一目录中,创建包含以下示例代码的 deployment.json 文件。将 URL 替换为上一步中已部署函数的 url

    {
      "oauthScopes": ["https://www.googleapis.com/auth/gmail.addons.execute"],
      "addOns": {
        "common": {
          "name": "My HTTP Add-on",
          "logoUrl": "https://raw.githubusercontent.com/webdog/octicons-png/main/black/beaker.png",
          "homepageTrigger": {
            "runFunction": "URL"
          }
        },
        "gmail": {},
        "drive": {},
        "calendar": {},
        "docs": {},
        "sheets": {},
        "slides": {},
        "httpOptions": {
          "granularOauthPermissionSupport": "OPT_IN"
        }
      }
    }
    
  6. 返回到 Cloud Shell 终端以创建部署:

    gcloud workspace-add-ons deployments create quickstart \
       --deployment-file=deployment.json
    

安装插件

  1. 在开发模式下安装部署:

    gcloud workspace-add-ons deployments install quickstart
    
  2. 打开或重新加载 Gmail 以查看该插件。 在右侧的工具栏中,找到烧杯图标。

  3. 点击该图标即可打开相应插件。如果系统提示,请授权该插件。

可选:清理

为避免系统向您的账号收取费用,请删除您创建的资源:

  1. 从您的 Google 账号中卸载该插件:

    gcloud workspace-add-ons deployments uninstall quickstart
    
  2. 为避免系统因本快速入门中使用的资源向您收取费用,请删除 Cloud 项目:

    gcloud projects delete PROJECT_ID
    

    PROJECT_ID 替换为您在快速入门中使用的 Cloud 项目的 ID。您可以在 Google Cloud 控制台的信息中心页面中找到 Cloud 项目 ID。

如需为 Google Workspace 加购项添加更多功能,请参阅以下内容: