Hubot と Google Chat の統合

Hubot を使用すると、複数のプラットフォームで動作するアプリを構築できます。Google Chat Hubot アダプターを使うと、Hubot アプリを Google Chat で簡単に利用できます。このアダプタは、Hubot にメッセージをフィードして応答を返します。

Google Chat Hubot アダプターは、次の 2 種類のエンドポイントをサポートしています。

  • HTTP
  • Cloud Pub/Sub

このガイドでは、両方のエンドポイントを使用して、Google Chat で Hubot アプリを起動する方法について説明します。

インストール

Hubot のスタートガイドの手順に沿って、Node.jsnpmYeoman 用の Hubot 生成ツールをダウンロードしてインストールします。

組み込みの shell アダプターを使用する Hubot の新しいインスタンスを作成し、Hubot スクリプトをインストールして操作してみることで、Hubot エコシステムを体験し、Hubot アプリを開発できます。

Hubot Google Chat アダプターの使用

このセクションでは、Google Chat アダプタを使用する Hubot アプリの作成、AppEngine へのデプロイ、Google Chat でのアプリの公開について説明します。App Engine 以外の任意のシステムにデプロイすることもできます。

Google Chat Hubot アダプターは、HTTP と Cloud Pub/Sub の 2 つのモードをサポートしています。HTTP モードは Express ウェブサーバーをスピンアップし、ユーザーが指定したポートでイベントをリッスンします。Cloud Pub/Sub モードでは、Pub/Sub サブスクライバーを作成し、ユーザーが指定したサブスクリプションからイベントを pull します。どちらのモードでも、Google Chat からイベントを受信すると、HangoutsChatMessage オブジェクト(Hubot の Message オブジェクトの一つを拡張)を作成し、Hubot スクリプトに渡します。Hubot スクリプトからのレスポンスは、元のメッセージ イベントがアプリに公開された Google Chat のチャット スペースまたは DM に投稿されます。

Hubot インスタンスを作成する

先に進む前に、Node.js、npm パッケージ マネージャー、Hubot 用の 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 モードで実行するために、追加の構成は必要ありません。アダプタは、デフォルトではポート 8080 で実行される Hubot の Express サーバーを使用します。ポートを変更するには、PORT 環境変数を設定する必要があります。

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

Cloud Pub/Sub のオプション

アプリで使用する GCP プロジェクト、Cloud Pub/Sub トピック、サブスクリプション、サービス アカウントを設定するには、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 アダプターが正常に初期化されると、コンソールに次のメッセージが表示されます。

Hangouts Chat adapter initialized successfully

HTTP アダプタと Cloud Pub/Sub アダプタのどちらを構成したかによっては、その他の関連情報も画面に表示されます。

AppEngine へのデプロイ

AppEngine クイックスタートの手順に沿って、GCP プロジェクトと開発環境を設定します。

設定が完了したら、以下の手順に沿って AppEngine で Hubot インスタンスを構成してデプロイします。

app.yaml を作成する

まず、Hubot ディレクトリに app.yaml ファイルを作成します。内容は次の例のようになります。

runtime: nodejs8
env_variables:
  PORT: 8080
  

環境の構成

次に、環境変数の構成に関するこのページの手順を確認します。

package.json を作成する

最後に、package.json ファイルを作成し、node.js バージョンと、アプリの起動に使用する scripts プロパティを指定します。

  • package.json ファイルの engines プロパティで使用する Node.js バージョンを指定します。
  • AppEngine は npm start を使用してアプリケーションを開始します。package.json の scripts プロパティを設定して、npm が 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 Console を介して Google Chat でアプリを公開します。アプリの構成ページで適切なエンドポイント(HTTP または Cloud Pub/Sub)を構成します。前のステップで GCP プロジェクトを作成して AppEngine に Hubot インスタンスをデプロイする場合、同じ GCP プロジェクトを使用してアプリを公開できます。

アプリをテストする

アプリを公開すると、スペースに追加したり、Google Chat でダイレクト メッセージを開始したりできます。アプリは、送信されたメッセージに応答する必要があります。Hubot の scripts フォルダには、サンプル スクリプトがあります。「badger」という単語を含むメッセージに応答するサンプルコードのコードをコメント化解除し、アプリを再起動します。

アプリに「myhubot」という名前を付け、スペースに追加すると、次のようにメッセージを送信できます。

@myhubot badger

アプリから次のレスポンスが表示されます。

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

これで、Hubot スクリプトをカスタマイズまたは追加して、アプリに目的の機能を実装できるようになりました。Google Chat に固有のスクリプトの例については、Google Chat アダプタ GitHub リポジトリをご覧ください。