Slackのハドルミーティングでは参加/退出の際にチャンネル内に表示されるため一目でわかりますが、Google Meetを使う際もSlackに参加/退出の通知が来ると便利ですよね。
今回はプレビュー版のGoogle Meet APIを使用してMeetの入退出イベントを取得し、Slackに通知を飛ばす方法を解説します。
通知部分のコードを変えればSlack以外にDiscordなどでも通知可能です。
前提条件
- Google Workspace を利用している人
(個人で使用している人は対象外です。) -
Google Workspace Developer Preview Program に申請し、承認されている人
以下のリンクの1番下に申請フォームがあります。承認には数日かかります。
https://developers.google.com/workspace/preview - プレビュー版APIのため動作が不安定なことに同意できる人
- 社内のみでの使用
その他条件については Developer Preview Program Terms 参照。
注意
2023/12/21に仕様変更があり、Space Nameが今までは spaces/3eaf892f-2628-445d-ba90-918e9f53e077
形式だったのが、spaces/abc-mnop-xyz
形式に変わるようです。
それに伴い、12/21以前から使用している場合は、環境変数 SPACE_NAME
の変更およびサブスクリプションへの再登録が必要です。
用語について
- Space: ミーティングID (例:
abc-mnop-xyz
) 単位。 - Conference: Space内に誰かが参加すると自動的に作成され、参加者が0人になると自動的に終了する。
コード
GCP周りの設定
Pythonライブラリのダウンロード
承認されたユーザーにのみPythonクライアントライブラリは公開されているため、pip等でそのままはインストールできません。
上記の申請が承認されると、以下の Download the client library
リンクから飛べるGoogleドライブにアクセスが付与されているはずなので、ダウンロードします。
OAuth設定
OAuth同意画面を https://www.googleapis.com/auth/meetings.space.created
スコープで作成します。
https://console.cloud.google.com/apis/credentials/consent
また、クライアントIDを作成します。
https://console.cloud.google.com/apis/credentials
gcloud CLI のインストール
以下のような記事を参考に gcloud
コマンドを使用可能な状態にしてください。
https://qiita.com/G-awa/items/e6904b040caa0096fba0
gcloud auth
gcloud auth application-default login
Artifact Registry にアップロード
以下を参考にして twine
でアップロードします。
https://cloud.google.com/artifact-registry/docs/python/store-python
なお、ローカルで動かすだけであればpipでそのままローカルからパッケージをインストールしてOKです。
設定
mv .env.example .env
mv .env.yaml.example .env.yaml
-
.env
,.env.yaml
ファイルに環境変数を入力 -
requirements.txt
の1行目にArtifact Registryのリポジトリ名を入力
pip install -r requirements.txt
実行
ローカルでの実行
python main.py
Cloud Functionsへのデプロイ
gcloud functions deploy your-function-name \
--gen2 \
--runtime=python312 \
--region=asia-northeast1 \
--source=. \
--entry-point=subscribe \
--trigger-topic=your-topic-name \
--env-vars-file .env.yaml
サブスクリプションの更新について
Expire time must be between 0 and 7 days from now
とのことで、サブスクリプションは1週間ごとに更新が必要です。
参考
設定の詳細や最新情報はこちらを参照してください。