将 Hubot 与 Google Chat 集成

Hubot 是构建可在多个平台上运行的应用的绝佳方式。借助 Google Chat Hubot Adapter,您可以在 Google Chat 中轻松利用 Hubot 应用。适配器将消息馈送到 Hubot 并传送回复。

Google Chat Hubot 适配器支持两种类型的端点:

  • HTTP
  • Cloud Pub/Sub

本指南介绍如何使用任一类型的端点在 Google Chat 中启动 Hubot 应用。

安装

按照 Hubot 使用入门中的说明下载并安装必要的工具:Node.jsnpm 以及 Yeoman 的 Hubot 生成器

您可以尝试使用内置 shell 适配器创建新 Hubot 实例,安装 Hubot 脚本,试用该脚本,并体验 Hubot 生态系统并开发 Hubot 应用。

使用 Hubot Google Chat 适配器

本部分将指导您创建使用 Google Chat 适配器的 Hubot 应用,将其部署在 AppEngine 中,并在 Google Chat 中发布该应用。您还可以选择在您选择的任何系统(App Engine 除外)中部署应用。

Google Chat Hubot 适配器支持两种模式:HTTP 和 Cloud Pub/Sub。HTTP 模式会启动 Express Web 服务器并监听用户指定的端口中的事件。Cloud Pub/Sub 模式会创建 Pub/Sub 订阅者,并从用户指定的订阅中提取事件。从 Google Chat 接收事件后,这两种模式都会创建一个 HangoutsChatMessage 对象(用于扩展 Hubot 的某个 Message 对象),并将其传递给 Hubot 脚本。Hubot 脚本的回复会发布到 Google Chat 中原始消息事件所发布到的 Chat 聊天室或私信。

创建 Hubot 实例

在继续操作之前,请务必为 Hubot 设置 Node.js、npm 软件包管理器和 Yeoman 生成器。

假设您要创建一个名为“myhubot”的应用。首先创建一个新目录,然后在其中创建 Hubot 实例。

$> mkdir myhubot
$> cd myhubot
$> yo hubot

此时,Yeoman 会询问几个问题,了解谁在创建该应用以及使用哪个适配器。为适配器指定 google-hangouts-chat

或者,您可以使用以下命令单独安装适配器:

$> npm install --save hubot-google-hangouts-chat

在 Hubot 中,实际应用行为是使用脚本实现的。Hubot 附带了一个可用于测试的示例脚本。完成所有设置后,您可以自定义和添加自己的脚本来实现所需的应用行为。

配置 Google Chat 适配器的选项

系统会使用环境变量将选项传递给 Google Chat 适配器。

服务帐号

如需使用适配器,您需要为应用设置服务帐号。请按照使用服务帐号指南创建服务帐号并下载包含密钥的 JSON 文件。然后,在环境变量中设置密钥的路径:

# Point to the private key json file of the service account you created.
$> export GOOGLE_APPLICATION_CREDENTIALS='Path to the service account key json file'

HTTP 选项

无需额外配置即可在 HTTP 模式下运行适配器。适配器使用 Hubot 的 Express 服务器,该服务器默认在端口 8080 上运行。如需更改端口,您需要设置 PORT 环境变量:

# Port number, 8080 by default.
$> export PORT=8080

Cloud Pub/Sub 选项

请参阅设置 Pub/Sub 端点,以设置您的应用要使用的 GCP 项目、Cloud Pub/Sub 主题、订阅和服务帐号。忽略链接中的示例代码;在下面的段落中,您将创建一个使用 Google Chat 适配器的 Hubot 应用。

如需在 Pub/Sub 模式下使用 Google Chat 适配器,您需要设置以下选项:

# To toggle the adapter to Pub/Sub mode.
$> export IS_PUBSUB=true

# Set the IDs of the project and subscription you created.
$> export PUBSUB_PROJECT_ID='GCP Project ID'
$> export PUBSUB_SUBSCRIPTION_ID='GCP Cloud Pub/Sub Subscription ID'

在本地运行

如需在本地运行 Hubot 实例,请从 myhubot 目录运行相应的命令:

# For HTTP mode
$> bin/hubot -a google-hangouts-chat

# For Cloud Pub/Sub mode
$> bin/hubot -d -a google-hangouts-chat

如果 Google Chat Hubot Adapter 已成功初始化,则控制台中会显示以下消息:

Hangouts Chat adapter initialized successfully

根据您配置的是 HTTP 适配器还是 Cloud Pub/Sub 适配器,其他相关信息也可能会出现在屏幕上。

在 App Engine 中部署

按照 App Engine 快速入门中的说明设置 GCP 项目和开发环境。

设置完成后,请按照以下步骤在 App Engine 中配置和部署 Hubot 实例。

创建 app.yaml

首先,在 Hubot 目录中创建一个 app.yaml 文件。内容类似于以下示例:

runtime: nodejs8
env_variables:
  PORT: 8080
  

配置环境

接下来,请查看此页面中有关配置环境变量的说明

创建 package.json

最后,创建一个 package.json 文件,用于指定 Node.js 版本和用于启动应用的脚本属性。

  • 指定您要与 package.json 文件中的 engines 属性搭配使用的 Node.js 版本。
  • App Engine 使用 npm start 启动您的应用。在 package.json 中设置 scripts 属性,以配置 npm start 以调用 Hubot。
# Sample snippet of package.json file

"dependencies" : {
  "hubot": "^3.1.1",
  "hubot-google-hangouts-chat": "^3",
  # more deps...
}

"scripts": {
  "start": "bin/hubot -a google-hangouts-chat"
},
"engines": {
  "node": ">=8"
}

# Once you've set up everything, deploy the app in AppEngine
$> gcloud app deploy

在 Google Chat 中发布

按照发布应用页面中的说明,通过 Google Cloud 控制台在 Google Chat 中发布应用。在应用配置页面中配置适当的端点(HTTP 或 Cloud Pub/Sub)。如果您在上一步中创建了 GCP 项目以在 App Engine 中部署 Hubot 实例,则可以使用同一 GCP 项目发布应用。

测试应用

发布应用后,您可以在 Google Chat 中将其添加到聊天室或向其发送私信。您的应用应响应发送到应用的消息。Hubot 的 scripts 文件夹中提供了示例脚本。取消示例脚本中响应包含“badger”一词的消息的代码,然后重启应用。

如果您将应用命名为“myhubot”并将其添加到聊天室,则可以向其发送消息,如下所示:

@myhubot badger

您应该会看到应用的以下响应:

Badgers? BADGERS? WE DON'T NEED NO STINKIN BADGERS

您现在可以自定义 Hubot 脚本或将其添加到 Hubot 实例,以实现应用的所需功能。如需查看特定于 Google Chat 的示例脚本,请查看 Google Chat 适配器 GitHub 代码库