在 Google Chat 中响应斜杠命令

本页介绍了如何配置 Google Chat 应用以响应正斜线命令。

在 Google Chat 中,插件会以 Google Chat 应用的形式向用户显示。如需了解详情,请参阅扩展 Google Chat 概览

斜杠命令是用户调用和与 Chat 应用互动的一个常用方式。斜杠命令还有助于用户发现和使用 Chat 应用的关键功能。如需确定是否应设置斜杠命令,以及了解如何设计用户互动,请参阅 Chat API 文档中的定义所有用户历程

用户如何使用斜杠命令

如需使用斜杠命令,用户只需输入一个斜杠 (/),然后输入一个简短的文本命令(例如 /about),即可获取 Chat 应用的相关信息。用户可以在 Google Chat 中输入一个斜杠,系统随即会显示一个窗口,其中列出了 Chat 应用的可用命令:

斜杠命令窗口
图 1:用户在 Google Chat 中输入正斜线时显示的窗口。

当用户发送包含斜杠命令的消息时,该消息只会显示给用户和 Chat 应用。如果您已将 Chat 应用配置为添加到包含多人的聊天室,则可以考虑私下回复斜杠命令,以便用户与 Chat 应用之间的互动保持私密。

例如,如需了解用户在聊天室中发现的 Chat 应用,用户可以使用 /about/help 等命令。为避免通知聊天室中的所有其他人,Chat 应用可以私下回复,提供有关如何使用 Chat 应用和获取支持的信息。

前提条件

Node.js

这款 Google Workspace 插件可扩展 Google Chat 的功能。如需构建一个,请完成 HTTP 快速入门

Apps 脚本

这款 Google Workspace 插件可扩展 Google Chat 的功能。如需构建此类应用,请完成 Apps 脚本快速入门

设置斜杠命令

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

  1. 为您的 Slash 命令创建一个名称
  2. 在 Google Chat API 中配置斜杠命令

为斜杠命令命名

斜杠命令的名称是用户在 Chat 消息中输入的内容,用于调用 Chat 应用。名称下方还会显示简短说明,以进一步提示用户如何使用该命令:

斜杠命令的名称和说明
图 2:正斜线命令的名称和说明。

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

  • 如需为斜杠命令命名,请执行以下操作:

    • 使用简短、描述性强且切实可行的字词或短语,让用户能够清晰简明地执行命令。例如,使用 /remindMe 取代 /createAReminder
    • 如果您的命令包含多个字词,请将第一个字词全部用小写形式,然后将其他字词的第一个字母大写,以便用户轻松阅读该命令。例如,使用 /updateContact,而不是 /updatecontact
    • 考虑为命令使用唯一名称还是常用名称。如果您的命令描述的是典型的互动或功能,您可以使用用户熟悉且期望的通用名称,例如 /settings/feedback。否则,请尝试使用唯一的命令名称,因为如果您的命令名称与其他 Chat 应用的命令名称相同,用户就必须在类似的命令中进行过滤,才能找到并使用您的命令。
  • 如需描述您的斜杠命令,请执行以下操作:

    • 请使用简短、清晰的说明,以便用户知道在调用该命令时会出现什么情况。
    • 告知用户命令是否有任何格式要求。例如,如果您创建了一个需要实参文本的 /remindMe 命令,请将说明设置为 Remind me to do [something] at [time] 之类的内容。
    • 让用户知道 Chat 应用是回复聊天室中的所有人,还是私下回复发出命令的用户。例如,对于正斜线命令 /about,您可以将其描述为 Learn about this app (Only visible to you)

在 Google Chat API 中配置您的斜杠命令

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

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

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

    前往“Google Chat API”页面

  2. 点击配置

  3. 高级设置下,前往触发器,然后检查 MESSAGE 字段是否包含触发器,例如 HTTP 端点或 Apps Script 函数。您必须在下一部分中使用此触发器来响应正斜线命令。

  4. 斜杠命令下,点击添加斜杠命令

  5. 为该命令输入名称、命令 ID 和说明:

    1. 名称:命令的显示名称,即用户用于调用应用的输入内容。必须以斜线开头,仅包含文本,且不得超过 50 个字符。
    2. 说明:用于说明如何使用和设置命令格式的文本。说明最多可包含 50 个字符。
    3. 命令 ID:一个介于 1 到 1000 之间的数字,Chat 应用使用该 ID 来识别斜杠命令并返回响应。
  6. 可选:如果您希望 Chat 应用通过对话框响应该命令,请选中打开对话框复选框。

  7. 点击保存

现在,Chat 应用的斜杠命令已配置完毕。

响应斜杠命令

当用户创建 Chat 消息时,您的 Chat 应用会收到包含消息相关信息的事件对象。事件对象包含一个载荷,其中包含有关消息中使用的命令的详细信息(包括命令 ID),以便您返回适当的响应。

如需响应正斜线命令,您必须实现 Message 触发器,以便 Chat 应用能够处理包含正斜线命令元数据的任何事件对象

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

以下代码展示了一个 Chat 应用示例,该应用会使用文本消息回复 /about 正斜线命令。为了响应正斜线命令,Chat 应用会处理来自消息触发器的事件对象。当事件对象的载荷包含正斜线命令 ID 时,Chat 应用会返回包含 createMessageAction 对象的操作 DataActions

Node.js

// The ID of the slash command "/about".
// It's not enabled by default, set to the actual ID to enable it. You must
// use the same ID as set in the Google Chat API configuration.
const ABOUT_COMMAND_ID = 0;

/**
 * Google Cloud Function that responds to messages sent from a
 * Google Chat space.
 *
 * @param {Object} req Request sent from Google Chat space
 * @param {Object} res Response to send back
 */
exports.avatarApp = function avatarApp(req, res) {
    if (req.method === 'GET' || !req.body.chat) {
        return res.send('Hello! This function is meant to be used ' +
            'in a Google Chat Space.');
    }

    // Stores the Google Chat event as a variable.
    const chatMessage = req.body.chat.messagePayload.message;

    if (chatMessage.slashCommand) {
        // Executes the slash command logic based on its ID.
        // Slash command IDs are set in the Google Chat API configuration.
        switch (chatMessage.slashCommand.commandId) {
            case ABOUT_COMMAND_ID:
                return res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
                    text: 'The Avatar app replies to Google Chat messages.'
                }}}}});
        }
    }

    // Replies with the sender's avatar in a card otherwise.
    const displayName = chatMessage.sender.displayName;
    const avatarUrl = chatMessage.sender.avatarUrl;
    res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
        text: 'Here\'s your avatar',
        cardsV2: [{
            cardId: 'avatarCard',
            card: {
                name: 'Avatar Card',
                header: {
                    title: `Hello ${displayName}!`,
                },
                sections: [{
                    widgets: [{
                        textParagraph: { text: 'Your avatar picture: ' }
                    }, {
                        image: { imageUrl: avatarUrl }
                    }]
                }]
            }
        }]
    }}}}});
};

Apps 脚本

// The ID of the slash command "/about".
// It's not enabled by default, set to the actual ID to enable it. You must
// use the same ID as set in the Google Chat API configuration.
const ABOUT_COMMAND_ID = 0;

/**
 * Responds to a MESSAGE event in Google Chat.
 *
 * @param {Object} event the event object from Google Chat
 */
function onMessage(event) {
    // Stores the Google Chat event as a variable.
    const chatMessage = event.chat.messagePayload.message;

    if (chatMessage.slashCommand) {
        // Executes the slash command logic based on its ID.
        // Slash command IDs are set in the Google Chat API configuration.
        switch (chatMessage.slashCommand.commandId) {
            case ABOUT_COMMAND_ID:
                return { hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
                    text: 'The Avatar app replies to Google Chat messages.'
                }}}}};
        }
    }

    // Replies with the sender's avatar in a card otherwise.
    const displayName = chatMessage.sender.displayName;
    const avatarUrl = chatMessage.sender.avatarUrl;
    return { hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
        text: 'Here\'s your avatar',
        cardsV2: [{
            cardId: 'avatarCard',
            card: {
                name: 'Avatar Card',
                header: {
                    title: `Hello ${displayName}!`,
                },
                sections: [{
                    widgets: [{
                        textParagraph: { text: 'Your avatar picture: ' }
                    }, {
                        image: { imageUrl: avatarUrl }
                    }]
                }]
            }
        }]
    }}}}};
}

如需使用此代码示例,请将 ABOUT_COMMAND_ID 替换为您在在 Chat API 中配置正斜线命令时指定的命令 ID。