人気のプログラミング言語「Python」で簡単なSlackBotを作ってみる

こんにちは、システム担当のてけてけです。
終わってからしばらく経ちますが、半沢直樹はやっぱり面白かったですね。

ところで、しのはら労働コンサルタントでは、チャットツールとしてSlackを利用しています。
Slackは日本でも人気があるツールなので、ご存知の方も多いと思います。
チャンネル(チャットルームのようなもの)を複数作れるため、業務ごとにチャンネルを作れば、会話があちこちに散らばることなくスムーズに追えます。

人気の最大の理由は、多数の外部サービスと連携できるところです。
例えば、Googleカレンダーと連携すると、Googleカレンダーに登録しておいた予定をSlackに通知できます。

また、Slack上で自動で発言するBotを作ることもできます。
弊所では、社会保険手続きが必要なタイミングになったら自動的にSlack上に通知するBotを作成して、手続き漏れの防止に役立ててます。

Bot(ボット)とは?

Botとは、作業を自動化するプログラムのことです。
Botの語源は、robot(ロボット)からきています。
ここでいうBotは主に、チャットで会話をしたり、一方的に発言したりするプログラムのこととします。

Slack上で「こんにちは、SlackBotです!」と発言するBot

簡単なSlackBotを作ってみる

今回、指定したチャンネルに固定メッセージを投稿するだけの簡単なSlackBotを作ってみました。
ここ数年激アツなプログラミング言語のPython(パイソン)を使っていきます。
今回の実行環境を以下に記載しておきます。

  • Python3.8.6
  • MacOS Catalina

Mac環境で作りましたが、もちろんWindowsでも同様に作成可能です。

SlackBotのアプリを作成する

今回は、Slack APIを利用します。
APIというのは、サービスの一部機能を外部で利用できる仕組みです。
Slackは、自身の一部機能(自動投稿など)を、第三者が利用できるようにAPIを公開しています。

まず、Slack APIのページでSlackBotで利用するSlackアプリを作成します。
(記事投稿時の手順です。Slack APIページの構成が変わっている場合があります。)

Slack APIトップページ画面

Slack APIトップページの真ん中にある「Start Building」ボタンをクリックします。

Slack App作成画面

Slackアプリを作成します。
Slack App作成画面が開くので、アプリ名と投稿するSlackのワークスペース名を指定します。
入力したら、「Create App」ボタンをクリックします。

Basic Informationページ(Add features and functionality設定)画面

Basic Informationページが表示されます。
まずは、上記で作成したSlackアプリが、チャットメッセージを投稿できる権限を付与します。
ページ上部の「Building Apps for Slack」配下の「Add features and functionality」から「Permissions」をクリックします。

OAuth & Permissions(Scopes設定)画面

OAuth & Permissionsページが表示されます。
ページ中程にあるScopesから、「Add an OAuth Scope」ボタンをクリックすると権限の一覧が表示されます。
今回は、指定したチャンネルにチャットメッセージを投稿したいので、「chat:write.public」を指定します。(同時に「chat:write」も勝手に付与されます。)

OAuth & Permissions(Install App to Workspace)画面


SlackアプリをSlackのワークスペースにインストールします。
画面上部に戻り、「Install App to Workspace」ボタンをクリックします。

OAuth認証画面

OAuth認証ページが表示されるので、「許可する」ボタンをクリックします。

OAuth & Permissions(Bot User OAuth Access Token)画面

再びOAuth & Permissionsページに戻り、Tokens for Your Workspace配下にBot User OAuth Access Tokenが表示されます。
この値が後のプログラムで必要になるので、控えておいてください。
(この値がわかると、誰でも自由にこのBotを利用できてしまうため、絶対に公開しないでください!)

Basic Information(Display Information設定)画面

画面左側の「Settings > Basic Information」からBasic Informationページに移動します。
SlackBotを設定します。
ページ下部のDisplay Information配下のSlackBot名、概要、背景色を入力します。(SlackBotアイコンを設定しない場合はSlackデフォルトのアイコンが表示されます。)

Basic Information画面

入力が終わったら、「Save changes」ボタンをクリックします。
これで準備完了です。

Pythonでプログラミングする

いよいよプログラミングしていきます。
まずは、Pythonをインストールしておきます。(ここでは省略します。Windowsの方は「Python インストール Window」などで検索してみてください。)

次に、必要なライブラリをインストールします。
今回は、APIにリクエストを送信するため、requestsというライブラリを利用します。
ターミナルで以下のコマンドを実行します。

pip install requests

Windowsの場合は、コマンドプロンプトで以下のコマンドを実行します。

python -m pip install requests

PythonでSlackBotを通して発言を投稿します。
コードは以下の通りです。
先ほど取得したSlackBotのトークン、チャンネル名、メッセージ内容を指定します。

import requests

params = {
    "token": "xoxb-000000000000-0000000000000-XXXXXXXXXXXXXXXXXXXXXXXX", # SlackBotのトークン
    "channel": "#dev", # 発言させたいチャンネル名
    "text": "施されたら施し返す……恩返しです!" # 発言させたいメッセージ内容
}

# Slack APIにリクエストを送信
r = requests.post('https://slack.com/api/chat.postMessage',
    headers={'Content-Type': 'application/json'},
    params=params
)

これを、slack_bot.pyというファイル名で保存しておきます。
これで全て準備が完了しました。

動かしてみる

早速、作成したPythonプログラムを実行します。
ターミナル(もしくはコマンドプロンプト)で以下のコマンドを実行します。

python slack_bot.py

以下のように、メッセージが投稿されると成功です。
このSlackBotを起動させれば、いつでもすぐに事務所のみんなに恩返しの気持ちを伝えることができます。
ついでに半沢ロスもこれで軽減されますね。

これを改良すると、以下のようなSlackBotも作れます。

  • 毎日決まった時間に挨拶を投稿する。
  • ネットで取得した今日の天気予報を基に傘が必要かどうか投稿する。

気になった方は是非試してみてください。