Googleハングアウトのbotを作成する

プライベートでSlackのbotを作成して、遊ぶことがあります。


一方、弊社ではチャットツールにGoogleハングアウトを使用しています。
Googleハングアウトはbotとの連携が弱く、あまり遊ぶことができません。
最近発表されたHangouts Chatで、正式にチャットボットの機能が追加されますが、まだまだ先の話になります。

そこで今回は、外部のライブラリを用いて、Googleハングアウトで使えるbotを作成してみようと思います。

Hangoutsbotの導入

調べてみると早速、「Hangoutsbot」なるものを発見しました。

GitHub – hangoutsbot/hangoutsbot: Google Hangouts bot

「Hangoutsbot」は「Hangups(https://github.com/tdryer/hangups)」という、サードパーティー製のクライアントから作られたbotライブラリです。
そのため名前はhangoutsbotなのに作業フォルダはhangupsbotとなっており、非常に紛らわしいです。
とにかく、これでGoogleアカウントをbot化することができそうです。

導入にはbot化するためのGoogleアカウントと、Python3.3以上の環境が必要です。
作業はMacで行っており、Windowsでは当記事に書かれた手順やパスと異なる場合があります。

では、公式のインストール手順に従い、インストールしてみます。

まずはgitから、hangoutsbotをクローンします。

$ git clone https://github.com/hangoutsbot/hangoutsbot.git

pipで必要なモジュールをインストールします。

$ cd hangoutsbot
$ sudo pip3 install -r requirements.txt

インストール後、hangupsbotフォルダに移り、「hangupsbot」を実行します。

$ cd hangupsbot
$ python3 /hangupsbot.py

botにしたいGmailのアカウントと、パスワードを入力すると起動します。

Sign in with your Google account:
Email:
Password:

起動した状態でbotに「hi」と送ると、「Hello World!」が返ります。

botの機能を使う

ハングアウトでbotに「/bot (コマンド名)」と送ると、コマンド名に応じた処理を実行します。
どのようなコマンドがあるかは、「/bot help」と送ることで確認できます。
いくつかの機能を試してみました。

/bot ping

「pong」を返します。

/bot meme

memeの画像をランダムに表示します。

/bot screenshot (URL)

seleniumを用いて、(URL)で指定したサイトのスクリーンショットを撮影します。


しょうもない機能が多いですが、とりあえずプラグインを追加しましょう。

プラグインを追加する

hangupsbotには、便利(?)なプラグインが多数収録されています。
それらのプラグインは、config.jsonで追加することができます。
config.jsonは、初期設定では
/Users/(ユーザー名)/Library/Application Support/hangupsbot/
に置かれています。

付属の「remind」というプラグインを導入したい場合は、config.jsonに以下の設定を追記します。

  "plugins": [
    "remind"
  ],

「remind」はその名の通り、リマインダーの機能を追加するプラグインです。
「/bot remindme (時間:分) (タスク)」を入力することで、指定した時間が経つとメッセージが送られます。

プラグインを作成する

「remind」などのプラグインは全て「/hangupsbot/plugins」フォルダに置かれています。
ここにPythonコードを追加すれば、任意のプログラムを実行することが可能です。

「コマンドを実行した時に、文字列を出力する」最低限の処理を記述すると、こうなりました。

import plugins

# 起動時に実行
def _initialize(bot):
    # 「test」コマンドの登録
    plugins.register_user_command(['test'])

# 「test」が送られた時の処理
def test(bot, event):
    message = _("テストです。")
    # メッセージの出力
    yield from bot.coro_send_message(event.conv, message)

_initialize関数内に「register_user_command()」を記述し、testコマンドを登録します。
この状態でハングアウトから「/bot test」を送ると、test関数が実行されるようになります。
test関数に処理を書いて、結果の出力は「yield from bot.coro_send_message(event.conv, “文字列”)」で行います。

food関数を作成し、冒頭のお店紹介機能を移植しました。
「/bot food (食べ物名)」で、ホットペッパーからお店の情報を拾ってくるシンプルな機能です。
アタッチメントなどで整形できないので無骨な表記ですが、ちゃんと機能しています。


このように、Googleハングアウトでも簡単にbotを作ることができました。
wikiを確認しながら、少しずつ遊びます。

Writer

hys

よろしくお願いします。

Page Topへ