Google Cloudを活用してGoogle Chatのスペースに自動投稿するbotを作成してみよう!
Google Chatのスペースへの投稿を自動化してみよう!
本記事では、Google Workspace(旧G Suite)で利用することができるチャット機能「Google Chat」の便利な使い方をご説明したいと思います。
Google Chatについては、個人でGmailを利用している方や仕事でGoogle Workspaceを利用されている人はご存じかもしれませんが、Googleによって開発されたチャットコミュニケーションツールです。そのGoogle ChatサービスにSpace(スペース)という機能があります。
https://support.google.com/chat/answer/7659784
スペースとは、「チームや特定のグループで長期的なプロジェクトに共同で取り組む」ための機能であり、イメージとしてはSlackのチャンネルと似たような機能となります。本記事を読んでいただいている方の中にもおそらくSlackを利用されている方が多いかと思います。Slack自体は非常に使いやすいツールではありますが、昨今の無料プランの内容が変更したことによって、今後は無料で利用を継続していくことが難しくなっていくものと思われます。
Google Workspaceを利用されている方はぜひ、この機会にGoogle Workspace(特にGoogle Chat)を使いこなすことで、より業務効率を上げることに繋げていただければと思います。
本記事では、スペース内で自動投稿を行うためのbot機能を作成するための手順となります。
webhookを利用してスペースに投稿できることを確認
まずはwebhookを利用してスペースに投稿できることを確認してみましょう。
スペースを作成
まずはGoogle Chat内でスペースを新規で作成します。
webhookに利用するurlを発行
作成したスペースを選択し、スペース名の右側の矢印を選んで「Webhookを管理」をクリックします。
以下の画面で名前を記入します。(アバターのURLは未記入でも可です)
URL(https://chat.googleapis.com/v1/space/~)をコピーしておきます。
サンプルコードを作成
以下のコードを所定のディレクトリに任意のファイル名(ここでは”test.py”)として保存します。
from json import dumps
from httplib2 import Http
def main():
"""Google Chat incoming webhook quickstart."""
url = '[Google Chatのスペースから取得したURLを設定]'
bot_message = {
'text': 'Hello World!'
}
message_headers = {
'Content-Type': 'application/json; charset=UTF-8'
}
http_obj = Http()
response = http_obj.request(
uri=url,
method='POST',
headers=message_headers,
body=dumps(bot_message),
)
print(response)
if __name__ == '__main__':
main()
上記のコードは以下の公式ドキュメントを基に作成しています。https://developers.google.com/chat/quickstart/incoming-app-python
サンプルコードを実行
サンプルコード(test.py)を実行し、対象のスペースにメッセージが投稿されることを確認します。
これで、PythonのコードからGoogle Chatのスペースに投稿できることが確認できました。
自動化するためのアーキテクチャについて
続いて、スペースへの投稿を自動化するための設定を行います。自動化するにはいくつかの方法がありますが、今回はGoogle CloudのCloud Schedulerというスケジューラーサービスを利用して自動化することにします。
Cloud Scheduler・Cloud Pub/Sub・Cloud Functionsを利用してGoogle Chatのスペースに自動投稿!
Cloud Schedulerを利用して自動でwebhookを実行するためのPythonコードを実行するために、今回はGoogle Cloud上の以下のサービスを利用します。
- Cloud Scheduler (スケジューラー)
- Cloud Pub/Sub (メッセージングサービス)
- Cloud Functions (サーバレスアーキテクチャ)
上記で説明したCloud Scheduler、Cloud Pub/Sub、Cloud Functionsを利用して、Google Chatのスペースに自動投稿するbotを作成したいと思います。
Cloud Functions・Pub/Subの設定
それでは具体的な設定手順を説明します。
まずはCloud Functionsで先ほどサンプルコードで試したように、Google Chatのスペースにメッセージを投稿するコードの設定を行います。
Google CloudのコンソールからCloud Functionsを開き、以下の通り設定を行います。
環境:第1世代
関数名:test_functions (任意の名前で可)
リージョン:asia-northeast1 (任意のリージョンで可)
続いて、トリガーの設定です。
トリガーのタイプ:Cloud Pub/Sub
“Cloud Pub/Subトピックを選択してください”の中で「トピックを作成する」をクリックします。
トピックの作成項目では
トピックID:test_topic (任意の名前で可)
を設定して「トピックを作成」をクリックします。
以下の画面のように設定が完了したら「保存」をクリックして「次へ」に進みます。
次は関数の作成です。今回はPython3.9を利用します。
ランタイム:Python 3.9
エントリポイント:test_functions
ソースコード:インライン エディタ
実際に設定するソースは以下の通りです。
main.py
import base64
from httplib2 import Http
from json import dumps
def test_functions(event, context):
pubsub_message = base64.b64decode(event['data']).decode('utf-8')
print(pubsub_message)
url = '[Google Chatのスペースの「Webhookを管理」から取得したURLを設定]'
bot_message = {
'text': 'Hello Google Chat!!'
}
message_headers = {
'Content-Type': 'application/json; charset=UTF-8'
}
http_obj = Http()
response = http_obj.request(
uri=url,
method='POST',
headers=message_headers,
body=dumps(bot_message),
)
print(response)
基本的にはサンプルコードと違いはほとんどないのですが、今回はCloud Pub/Subからトリガーされるため一部修正があります。
requirements.txt
# Function dependencies, for example:
# package>=version
httplib2==0.13.1
main.pyとrequirements.txtの設定が完了したら「デプロイ」をクリックしてデプロイを実行します。
デプロイが正常終了したら以下のような画面が表示されます。
Cloud Schedulerの設定
続いてCloud Schedulerの設定を行います。
コンソールからCloud Schedulerを開き、
「スケジュールを定義する」には以下の通り設定を行います。
名前:test_scheduler (任意の名前で可)
リージョン:asia-northeast1 (任意のリージョンで可)
頻度:* * * * * (任意の頻度で実行(テストのため毎分実行にしています))
タイムゾーン:日本標準時(JST)
「実行内容を構成する」には以下の通り設定を行い、「作成」をクリックします。
ターゲットタイプ:Pub/Sub
Cloud Pub/Subトピックを選択してください:projects/[任意のプロジェクト名]/topics/test_topics
メッセージ本文:test
Cloud Schedulerの設定が完了したら以下の画面が表示されます。
数分経てばスケジューリングが勝手に行われますが、すぐに実行確認をしたい場合は上記画面の右端の「操作」から「今すぐ実行」をクリックすると、すぐに実行されます。
Cloud Schedulerが動くと、Google Chatのスペースで以下のようにメッセージが投稿されます。
ちなみにスペースを作成するときには以下のように「スレッド返信を使用する」かどうかを選択できます。利用用途によって使い分けると良いかと思います。
Google Chatについては、以下の記事でも触れています。こちらはGoogle CloudのオブジェクトストレージであるCloud Storageのバケットにファイルをアップロードしたことをトリガーに、Google Chatに投稿を行うというものです。こちらも参考にしていただければと思います。
(参考)Cloud StorageへのファイルアップロードをトリガーにGoogle Chatへチャットを送る方法
また、Google Chat APIをうまく利用すれば、スペース上に書き込みをしたユーザーに対して自動で返信するBot機能のようなアプリケーションを開発することもできます。こちらについては本記事では説明しきれないので、以下のドキュメントを参考にしていただければと思います。
https://developers.google.com/chat/quickstart/gcf-app