响应 Google Chat 应用命令

本页介绍了如何作为 Google Chat 应用设置和响应命令。

命令可帮助用户发现和使用 Chat 应用的关键功能。只有 Chat 应用可以看到命令的内容。例如,如果用户使用正斜线命令发送消息,则只有该用户和 Chat 应用可以看到该消息。

如需确定是否应构建命令,以及了解如何设计用户互动,请参阅定义所有用户历程

Chat 应用命令的类型

您可以将 Chat 应用命令构建为斜杠命令或快捷命令。如需发现和使用每种类型的命令,用户可以执行以下操作:
  1. 正斜线命令:用户可以通过输入正斜线 (/) 和预定义文本(例如 /about)来以消息的形式发送命令。 聊天应用还可以要求斜杠命令提供参数文本。例如,正斜线命令 /search 可能需要用于搜索查询的参数文本。
  2. 快捷命令:用户通过在 Chat 消息的回复区域中打开菜单来使用命令。如需使用某个命令,用户只需点击添加图标 ,然后从菜单中选择相应命令即可。
以下图片展示了用户如何发现包含斜杠命令和快捷命令的菜单:
  • 用户发现了斜杠命令。
    图 1. 用户可以在回复区域中输入斜杠 / 后跟命令名称,以发现和使用 Slash 命令。
  • 用户从菜单中查看快捷命令。
    图 2. 用户可在 Chat 消息的回复区域内通过菜单发现和使用快捷命令。

前提条件

启用了交互功能的 Google Chat 应用。如需使用 HTTP 服务创建交互式 Chat 应用,请完成此快速入门

启用了交互功能的 Google Chat 应用。如需在 Apps 脚本中创建交互式 Chat 应用,请完成此快速入门

启用了交互功能的 Google Chat 应用。如需使用 HTTP 服务创建交互式 Chat 应用,请完成此快速入门

启用了交互功能的 Google Chat 应用。如需使用 HTTP 服务创建交互式 Chat 应用,请完成此快速入门

设置命令

本部分介绍了如何完成以下步骤来设置该命令:

  1. 为该命令创建名称和说明
  2. 在 Google Cloud 控制台中配置命令

为命令命名并添加说明

用户输入或选择的用于调用 Chat 应用的便是命令名称。名称下方还会显示简短说明,以便进一步提示用户如何使用该命令:

斜杠命令的名称和说明
图 3:斜杠命令的名称和说明。

为命令选择名称和说明时,请考虑以下建议:

若要为命令命名,请执行以下操作:

  • 使用简短、具描述性且可操作的字词或短语,让用户清楚地了解命令。例如,使用 Remind me,而不是名称 Create a reminder
  • 请考虑为您的命令使用唯一名称或通用名称。如果您的命令描述的是典型的互动或功能,您可以使用用户熟悉且预期的通用名称,例如 SettingsFeedback。否则,请尝试使用唯一的命令名称,因为如果您的命令名称与其他 Chat 应用的命令名称相同,用户必须过滤出类似的命令才能找到并使用您的命令。

如需描述命令,请执行以下操作:

  • 请使用简洁明了的说明,让用户知道使用该命令后会出现什么情况。
  • 告知用户命令是否有任何格式要求。例如,如果您创建了一个需要参数文本的斜杠命令,请将说明设置为 Remind me to do [something] at [time] 之类的内容。
  • 告知用户 Chat 应用是回复聊天室中的所有人,还是仅回复发出相应命令的用户。例如,对于快捷命令 About,您可以将其描述为 Learn about this app (Only visible to you)

在 Google Cloud 控制台中配置命令

如需创建斜杠命令或快捷命令,您需要在 Chat 应用的 Google Chat API 配置中指定相应命令的相关信息。

如需在 Google Chat API 中配置命令,请完成以下步骤:

  1. 在 Google Cloud 控制台中,依次点击“菜单”图标 > API 和服务 > 已启用的 API 和服务 > Google Chat API

    前往“Google Chat API”页面

  2. 点击配置

  3. 命令下,点击添加命令

  4. 为该命令输入命令 ID、名称、说明和命令类型:

    • 命令 ID:一个介于 1 到 1000 之间的数字,聊天应用使用该数字来识别命令并返回响应。
    • 名称:命令的显示名称。名称最多可包含 50 个字符,并且可以包含特殊字符。
    • 说明:用于说明命令用途的文本。说明最多可包含 50 个字符,并且可以包含特殊字符。
    • 命令类型:选择快捷命令Slash 命令
    • 如果您要配置正斜线命令,请为 Slash command name(正斜线命令名称)字段输入一个值,以指定用户要输入什么内容才能调用该命令。必须以斜线开头,只能包含文本,且长度不得超过 50 个字符。例如 /remindMe
  5. 可选:如果您希望 Chat 应用使用对话框响应该命令,请选中打开对话框复选框。

  6. 点击保存

该命令现已针对 Chat 应用配置完毕。

响应命令

当用户使用某个命令时,您的 Chat 应用会收到互动事件。事件载荷包含元数据,其中包含有关所调用命令的详细信息(包括命令 ID 和命令类型),以便您返回适当的响应。

有关 Cymbal Labs Chat 应用的私信。该消息指出 Chat 应用由 Cymbal Labs 创建,并分享了文档链接和用于与支持团队联系的链接。
Chat 应用会私下响应斜杠命令 /help,说明如何获取支持。

如需响应每种类型的命令,您必须处理事件载荷中的不同事件类型和元数据对象:

命令类型 事件类型 命令元数据
斜杠命令 MESSAGE message.slashCommandmessage.annotation.slashCommand
快速命令 APP_COMMAND appCommandMetadata

如需了解如何使用消息回复命令,请参阅以下部分。

响应斜杠命令

以下代码展示了一个 Chat 应用的示例,该应用会回复正斜线命令 /about。Chat 应用会处理 MESSAGE 互动事件,检测互动事件是否包含匹配的命令 ID,并返回私信:

node/avatar-app/index.js
/**
 * Handles slash and quick commands.
 *
 * @param {Object} event - The Google Chat event.
 * @param {Object} res - The HTTP response object.
 */
function handleAppCommands(event, res) {
  const {appCommandId, appCommandType} = event.appCommandMetadata;

  switch (appCommandId) {
    case ABOUT_COMMAND_ID:
      return res.send({
        privateMessageViewer: event.user,
        text: 'The Avatar app replies to Google Chat messages.'
      });
    case HELP_COMMAND_ID:
      return res.send({
        privateMessageViewer: event.user,
        text: 'The Avatar app replies to Google Chat messages.'
      });
  }
}
apps-script/avatar-app/avatar-app.gs
// Checks for the presence of a slash command in the message.
if (event.message.slashCommand) {
  // Executes the slash command logic based on its ID.
  // Slash command IDs are set in the Google Chat API configuration.
  switch (event.message.slashCommand.commandId) {
    case ABOUT_COMMAND_ID:
      return {
        privateMessageViewer: event.user,
        text: 'The Avatar app replies to Google Chat messages.'
      };
  }
}
python/avatar-app/main.py
def handle_app_commands(event: Mapping[str, Any]) -> Mapping[str, Any]:
    """Handles slash and quick commands.

    Args:
        Mapping[str, Any] event: The Google Chat event.

    Returns:
        Mapping[str, Any]: the response
    """
    app_command_id = event["appCommandMetadata"]["appCommandId"]

    if app_command_id == ABOUT_COMMAND_ID:
        return {
            "privateMessageViewer": event["user"],
            "text": "The Avatar app replies to Google Chat messages.",
        }
    elif app_command_id == HELP_COMMAND_ID:
        return {
            "privateMessageViewer": event["user"],
            "text": "The Avatar app replies to Google Chat messages.",
        }
    return {}
java/avatar-app/src/main/java/AvatarApp.java
/**
 * Handles slash and quick commands.
 *
 * @param event    The Google Chat event.
 * @param response The HTTP response object.
 */
private void handleAppCommands(JsonObject event, HttpResponse response) throws Exception {
  int appCommandId = event.getAsJsonObject("appCommandMetadata").get("appCommandId").getAsInt();

  switch (appCommandId) {
    case ABOUT_COMMAND_ID:
      Message aboutMessage = new Message();
      aboutMessage.setText("The Avatar app replies to Google Chat messages.");
      aboutMessage.setPrivateMessageViewer(new User()
          .setName(event.getAsJsonObject("user").get("name").getAsString()));
      response.getWriter().write(gson.toJson(aboutMessage));
      return;
    case HELP_COMMAND_ID:
      Message helpMessage = new Message();
      helpMessage.setText("The Avatar app replies to Google Chat messages.");
      helpMessage.setPrivateMessageViewer(new User()
          .setName(event.getAsJsonObject("user").get("name").getAsString()));
      response.getWriter().write(gson.toJson(helpMessage));
      return;
  }
}

ABOUT_COMMAND_ID 替换为您在 Google Cloud 控制台中配置该命令时指定的命令 ID。

响应快速命令

以下代码展示了一个 Chat 应用的示例,该应用会回复快捷命令 Help。Chat 应用会处理 APP_COMMAND 互动事件,检测互动事件是否包含匹配的命令 ID,并返回私信:

node/avatar-app/index.js
/**
 * Handles slash and quick commands.
 *
 * @param {Object} event - The Google Chat event.
 * @param {Object} res - The HTTP response object.
 */
function handleAppCommands(event, res) {
  const {appCommandId, appCommandType} = event.appCommandMetadata;

  switch (appCommandId) {
    case ABOUT_COMMAND_ID:
      return res.send({
        privateMessageViewer: event.user,
        text: 'The Avatar app replies to Google Chat messages.'
      });
    case HELP_COMMAND_ID:
      return res.send({
        privateMessageViewer: event.user,
        text: 'The Avatar app replies to Google Chat messages.'
      });
  }
}
apps-script/avatar-app/avatar-app.gs
// Checks for the presence of a slash command in the message.
if (event.message.slashCommand) {
  // Executes the slash command logic based on its ID.
  // Slash command IDs are set in the Google Chat API configuration.
  switch (event.message.slashCommand.commandId) {
    case ABOUT_COMMAND_ID:
      return {
        privateMessageViewer: event.user,
        text: 'The Avatar app replies to Google Chat messages.'
      };
  }
}
python/avatar-app/main.py
def handle_app_commands(event: Mapping[str, Any]) -> Mapping[str, Any]:
    """Handles slash and quick commands.

    Args:
        Mapping[str, Any] event: The Google Chat event.

    Returns:
        Mapping[str, Any]: the response
    """
    app_command_id = event["appCommandMetadata"]["appCommandId"]

    if app_command_id == ABOUT_COMMAND_ID:
        return {
            "privateMessageViewer": event["user"],
            "text": "The Avatar app replies to Google Chat messages.",
        }
    elif app_command_id == HELP_COMMAND_ID:
        return {
            "privateMessageViewer": event["user"],
            "text": "The Avatar app replies to Google Chat messages.",
        }
    return {}
java/avatar-app/src/main/java/AvatarApp.java
/**
 * Handles slash and quick commands.
 *
 * @param event    The Google Chat event.
 * @param response The HTTP response object.
 */
private void handleAppCommands(JsonObject event, HttpResponse response) throws Exception {
  int appCommandId = event.getAsJsonObject("appCommandMetadata").get("appCommandId").getAsInt();

  switch (appCommandId) {
    case ABOUT_COMMAND_ID:
      Message aboutMessage = new Message();
      aboutMessage.setText("The Avatar app replies to Google Chat messages.");
      aboutMessage.setPrivateMessageViewer(new User()
          .setName(event.getAsJsonObject("user").get("name").getAsString()));
      response.getWriter().write(gson.toJson(aboutMessage));
      return;
    case HELP_COMMAND_ID:
      Message helpMessage = new Message();
      helpMessage.setText("The Avatar app replies to Google Chat messages.");
      helpMessage.setPrivateMessageViewer(new User()
          .setName(event.getAsJsonObject("user").get("name").getAsString()));
      response.getWriter().write(gson.toJson(helpMessage));
      return;
  }
}

HELP_COMMAND_ID 替换为您在 Google Cloud 控制台中配置该命令时指定的命令 ID。

测试命令

如需测试该命令和代码,请参阅测试 Google Chat 应用的交互式功能

如需了解如何在 Chat 界面中测试和使用该命令,请参阅 Google Chat 帮助文档中的在 Google Chat 中使用应用