Skip to content

shikajiro/term-slack-bot

Repository files navigation

これはなに

主に用語集を教えてくれるbotです。

準備

SpreadSheetに用語をまとめる

まずはデータとなる情報をSpreadSheetにまとめます。SpreadSheetを選んだのは誰でも追加編集削除が簡単なためです。A列に用語、B列にその説明を記載していきます。会社内で権限をオープンにしてどんどん用語を集めるのがいいでしょう。

SpreadSheetのKeyを取得する

SpreadSheetのURLに含まれるKeyをメモしておきます。画像はモザイクを掛けていますが、今回の例だと 10g~Y-c の部分がKeyになります。

SlackAPIの作成

SlackにBotを追加します。ワークスペースで利用するボットの作成 | Slack などを参考に作ってください。

tokenが作成できたらメモしておきます

botにはこのアイコン使ってください。かわいいので。

GCPプロジェクトの準備

GAEを実行するためのGCPプロジェクトを準備します。作り方などは公式ドキュメントがあるので割愛します。

サービスアカウントの作成

SlackBotがSpreadSheetの情報を取得するのにサービスアカウントが必要なので作ります。権限はとりあえず 閲覧者 にしています。 この時のサービスアカウントのメールアドレスをメモしておき、クレデンシャルファイルをjsonでダウンロードしておきます。

SpreadSheetの共有権限を付与する

先程のサービスアカウントでSpreadSheetを読み取りできるように設定します。共有設定でサービスアカウントのメールアドレスを入力し、閲覧者権限を付与します。

ここまでの設定で、SpreadSheetのデータをSlackBotが読み取れるようになりました。

サービスアカウントの保存

SlackBotがSpreadSheetにアクセスするためにサービスアカウントのクレデンシャルが必要です。秘密鍵が含まれるためgitで保存したくありません。SecretManagerを使ってサービスアカウントのクレデンシャルを保持しておき、CloudBuildを実行する際に取り込むようにしたいと思います。 先程作成したサービスアカウントのクレデンシャルをダウンロードして、シークレットの値として保存します。ここで作ったシークレットの名前を後ほど利用します。

CloudBuildの設定

CloudBuildのトリガーを作ります。

イベント

手動呼び出しにします。

構成

クラウドビルド構成ファイルを選択し、以下のファイルを指定します。 infra/cloudbuild.yaml

代入変数

大事な環境変数は代入変数で指定できるようにしています。ここに今までメモしてきた値を入力します。

変数名
_API_TOKEN SlackのAPIトークン
_SPREADSHEET_KEY SpreadSheetのKey
_CREDENTIALS SecretManagerに保存したクレデンシャルの名前
_LOGGER_CHANNEL_ID オプション:用語検索のログを出力するslack channnel IDを指定する

デプロイ

先程作ったCloudBuildを使ってビルドとデプロイを行います。実行ボタンを押してビルド・デプロイを行います。

これで用語を説明してくれるbotの完成です。アプリケーションを作るより用語集をみんなで育てて行く方が大変なので、みんなでがんばりましょう。

使い方

bot呼び出し方

@tellme
or
@tellme help

簡単な使い方を教えてくれます。

@tellme sku

用語を送信すると説明をしてくれます

細かい条件

  • 大文字小文字どちらでもかまいません
  • 2文字以上のクエリ文字は部分一致です
  • 1文字のクエリ文字は完全一致です(基本的に対象となる用語がない)

番外編

GASは権限で詰まる

当初GASのwebアプリケーションで作ろうとしました。GCPプロジェクトを作る必要がなくシンプルなのです。しかし、SpreadSheetが会社アカウントの場合SlackからGASにアクセスする際に認証を通す必要があり、Slackの仕組み上解決することができませんでした。SpreadSheetを完全に公開してもいい場合はGASだけで実装できます。