0. はじめに

目的

今回の目的としては「SlackBotの開発方法を知ってもらう」という点にあります。

Goの書き方に関しては触れませんし、テストコードとかも書きません。

コピペして指示に従うだけで誰でもSlackBotが作れちゃうので、この方法を応用して各自で作りたいSlackBotを実現していただければと思います!

内容

  • 範囲
    • Go言語でのSlackBot開発の基本的な流れ
    • SlackAPIでできること
  • 範囲外
    • Go言語の環境構築(筆者はバージョン1.15.2で試しています)
    • Go言語の基本文法
    • 本番環境に関する内容

筆者環境

  • Go : 1.15.2 windows/amd64(多少違ってもOK)
  • OS : Windows 10(Mac用の内容も書いています)

サンプルコード

記事中にも載せますが、コピペもめんどくさいという方はこちらを使ってください!

https://github.com/ree-rishun/slack-bot-handson-go

Slackの準備

Slackチャンネルは各自用意してください。

初めから会社などのプライベートなワークスペースを使うのは危険なため、新規で開発用のワークスペースを作成することを推奨します。

1.環境構築

ngrok

以下を参考にngrokをインストールしてください。

ngrokの使い方(windows, mac)- Qiita

2.SlackAppの作成

1. Slack APIにアクセス
2. Create New Appを選択

3. From scratchを選択

4. 作成

  • App Name:
    • 好きな名前でOK
  • Pick a workspace to develop your app in:
    • 今回利用するSlackワークスペースを選択してください

7. 左のメニューからOAuth & Permissionsに移動

8. Scopes > Bot Token Scopes > Add an OAuth Scopeを押す

9. chat:writeを選択

10. ページトップのInstall to Workspaceを押す

3.接続検証

3-1.プロジェクト作成

今回作成するプロジェクトのディレクトリを作成(コマンドでやらなくてもOK)

ファイルを作成(コマンドでやらなくてもOK)

以下のコードを main.go へコピペ

こちらのコードは以下のブログから引用させていただきました。

Go で Slack Bot を作る (2020年3月版) – Qiita

これは「Slackとやり取りが可能です!」というのを証明するコードです。このコードに関しては余り深く考えなくて大丈夫です。

3-2. パッケージのインストール

Slackのパッケージをインストールします。

3-3. アプリケーションの実行

アプリケーションを実行してください

3-4. ngrokを実行して外部公開

ngrok http 8080を実行すると以下のように表示されます(見やすいように一部整形しています)

11行目のForwarding https://xxxxxxxxxxxx.ngrok.io -> http://localhost:8080の中から、https://xxxxxxxxxxxx.ngrok.ioのみをコピーしてください。

※ngrokは一度実行したらコードを変更しても再起動する必要はありません。

※一定時間が経過するとリンクが無効になるため、その際は再発行して以下の手順を再度行ってください。

3-5. Redirect URLsに登録

Event Subscriptions > Enable Events をONにします。

先程コピーしたURL https://xxxxxxxxxxxx.ngrok.ioRequest URL にペーストします。

※エラーの場合は以下を確認してください

  • httpsで始まっているか?
  • Goのプログラムが動いているか?
  • ngrokが動いているか?

4. HelloWorldしてみる

どこの業界でも最初は挨拶ということで、挨拶します。

4-1. コードを変更

main.go を以下のコードに変更

4-2. godotenv をインストール

4-3. envファイルの作成

  1. ファイルを作成

2. OAuth & Permissions > OAuth Tokens for Your WorkspaceBot User OAuth Tokenをコピー

3. ファイルの内容を編集

4-4. アプリを再起動

4-5. app_mentionイベントを追加

Add Bot User Eventを選択

app_mentionを選択

こんな感じになればOK

右下のSave Changesボタンを押して保存してください。

4-6. ワークスペースに再インストール

Installed App Settings > OAuth Tokens for Your WorkspaceReinstall to Workspace を押してください。

これで、Botに対してのメンションがイベントとしてApp側に飛ぶようになります。

4-7. 動作確認

  1. Slackを開いて、チャンネルにBotを招待する(メンション付けて適当なメッセージ飛ばすと招待できるっぽい)
  2. メンションを付けてhelloと送る
  3. Botからworldと返す

5. 禁止用語を注意する

特定のワードをチャンネルに投稿すると反応するBotを作成します。

5-1. コードを変更

main.goを以下のコードに変更

5-2. アプリを再起動

5-3. チャンネル監視設定を追加

WebのSlackAPIコンソールを開きます。

  1. Event Subscriptions > Subscribe to bot eventsを開く
  2. message.channelsを追加

View post on imgur.com

5-4. アプリを再インストール

変更を反映するために再インストール

1. OAuth & Permissions > OAuth Tokens for Your Workspace を開く
2. Reinstall to Workspaceにてアプリを再インストール

5-5. 動作確認

fuck youが含まれている文を送信すると、Botから注意されます。
その他の言葉には反応しません。

6. チャンネル追加を検知する

チャンネルが追加されたときに通知する機能です。

6-1. コードを変更

main.goを以下のコードに変更

6-2. アプリを再起動

6-3. チャンネル作成時のイベントを追加

チャンネルが作成時にイベントが発生するように設定

1. Event Subscriptions > Subscribe to bot eventsを開く
2. channel_createdを追加

6-4. アプリを再インストール

変更を反映するために再インストール

1. OAuth & Permissions > OAuth Tokens for Your Workspace を開く
2. Reinstall to Workspaceにてアプリを再インストール

6-5. 動作検証

任意のチャンネルを作成すると、以下のように特定のチャンネルに通知が発生する

7. 参加者にフランクな挨拶をする

Disc〇rd的なやつです。

7-1. コードを変更

main.goを以下のコードに変更

7-2. アプリを再起動

7-3. チャンネル参加イベントを追加

チャンネルが作成時にイベントが発生するように設定

1. イベントの講読 > ボットのイベントに登録するを開く
2. member_joined_channelを追加

7-4. 動作検証

  • Botを招待済みのチャンネルに参加する
  • 既に参加しているチャンネルも退出して参加したらOK

最後に

今回は4種類のサンプルを使ってGoを使ったSlackBotの開発方法を紹介しました。

SlackAPIには他にも色々な機能があるので、今回実施した手順を応用して作りたいアプリケーションの実現ができれば幸いです!

参考

今回のブログ曲

今回投稿中に聴いていた曲はこちら


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です