Slack_タスク管理bot(Python)

動作概要

1、特定のリアクション(絵文字)をした投稿先リンクをbotにて通知させる

2、リアクション(絵文字)の設定、解除が反映可能
:電球::「ラーメン食べたい」投稿にてリアクション(絵文字)解除
:ハロー::「Pythonを好これ」投稿にてリアクション(絵文字)追加

3、URLをリンク設定する事で、「どんな投稿先か?」が分かるように設定可能

※botにタスク名を登録
※タスク名登録後はURLではなく、リンクで紹介

4、上記をDB登録済みユーザーが実行可能
:ハロー::別アカウント(ゆーしゃんbot)にて「ラーメン食べたい」投稿にてリアクション(絵文字)追加

プログラムを作成した理由

下記ツイートの通り、
Slackチャンネル内にて沢山の業務効率化の依頼を頂く為、
簡単に「現在進行中タスクの依頼文」を確認出来るようにしたかった為。

Slackbot用アプリ_導入手順

1、下記ツイートの「Slack ソケットモードの最も簡単な始め方」記事の通りにSlackアプリを設定する

※助言頂き、本当にありがとうございました!!!

2、記事の通り「app.py」を作成し、
「こんにちは」とSlackに投稿したら「こんにちは〇〇さん!」とbotから返信が来る事を確認

「Slack_bold」のイベントとは?

「Slack ソケットモードの最も簡単な始め方」記事のサンプルコードとして、
「@app.message(“こんにちは”)」とありましたが、

こちらはExcelVBAで例えると「Workbook_Open」のように
「〇〇の状況になったら発動するトリガー」のようなものです。

Slackのイベント詳細は Slack_Bolt_for_Python 記事を参考にして頂ければと思いますが、
「いきなり公式記事見てもよく分からない…」という方は下記も併せてご参考下さい。


・「@app.message」…特定のメッセージが投稿された場合のイベント

↑画像のように、
【「こんにちは」を含む投稿がされた】事をトリガーに、
「こんにちは〇〇さん!」と新規投稿されております。

このイベントでは、
別の人に「Aさんこんにちは!」と投稿したつもりでも、
botから常に「こんにちは〇〇さん!」と新規投稿がされてしまう為、
bot作成時は下記イベントを使う事になると思います。


・「@app.message」…メンション付き投稿された場合のイベント

↑画像のように、
【「タスク管理bot」がメンションされた】事をトリガーに、
「chat_postMessage」というslack_apiを用いて投稿に返信しております。

「slack_api」とは?

先程紹介した、「chat_postMessage」(返信)のように、
Slackから情報取得、情報送信するには必ずapiを使う事となります。

つまり、「slack_apiで何が出来るのか?」を知らないと
望み通りの処理は組めないという事です。

api詳細は slack_api_一覧 を参考にして頂ければと思いますが、
「いきなり公式記事見てもよく分からない…」という方は下記も併せてご参考下さい。


・「chat_postMessage」…チャンネルにメッセージ送信

必須:「token」…下記コードの「client」部分かと思われます。

# botが行動出来るようにする
client = context[“client”]
client.chat_postMessage(
)

必須:「channel」…下記コードの「channel_id」部分。
※黄色の「channel」は完全一致で記載する事。

channel_id = context[‘channel_id’] #チャンネルID
client.chat_postMessage(
channel = channel_id,
)

必須:投稿したい内容を自由に記述
※黄色の「text」は完全一致で記載する事。

user_id = context[‘user_id’] #投稿ユーザー
client.chat_postMessage(
text = “こんにちは <@” + user_id + “> さん!”
)

任意:返信したい場合は、「ts」(下記赤文字部分)を指定
※黄色の「thread_ts」は完全一致で記載する事。

thread_ts = body[“event”][‘ts’] #投稿タイムスタンプ
client.chat_postMessage(
thread_ts = thread_ts
)


上記「chat_postMessage」で使用した下記項目が理解出来ると、
slack_apiの使い方が何となく見えてくると思います。

  • token (client = context[“client”]) #botが行動出来るようにする
  • channel (channel_id = context[‘channel_id’]) #チャンネルID
  • user_id (user_id = context[‘user_id’]) #投稿ユーザー
  • thread_ts (thread_ts = body[“event”][‘ts’]) #投稿タイムスタンプ

次に、本記事の「Slack_タスク管理_bot」で使用しているslack_apiを一つ紹介致します。


・「reactions.list」…ユーザーによる反応一覧を取得
※どのユーザーがどのリアクション(絵文字)をしたかを取得

  • 「token」は変数「client」に格納しているものを使用
  • 「オプションの引数」の「user」を見ると「このユーザーの反応を表示します」とあるので、ユーザーIDを指定

と下記コードを書くだけで「指定ユーザーのリアクション(絵文字)一覧」を取得する事が出来るようになります。

Slackタスク管理bot_ソースコード

  • 「slack_bold」のイベント
  • 「slack_api」の使い方

上記2点を解説したところで、
「Slackタスク管理bot」のソースコードを紹介致します。

注意事項

導入時に必要な「絵文字、タスク管理dbを設定するcsvファイル」は未紹介の為、
本コードをコピペしただけでは動きませんのでご注意下さい。
(「どのユーザー、どの絵文字を検索対象にするか?」のdbを初期化するcsv)

※今後需要がありましたら、実行可能なサンプルコードでダウンロード出来るように致します。

感想

Slackのbot作成は初挑戦でしたが、
Twitterで助言頂きながら、下記望み通りの動作を実現する事が出来ました…!!!
(10日間のGW休みを5日使いました←)

Slackチャンネル内にて沢山の業務効率化の依頼を頂く為、
簡単に「現在進行中タスクの依頼文」を確認出来るようにしたい

「sqlite3」を用いたdb操作も初心者であった為、苦労しましたが…
下記の基本的なSQL構文を理解、実行するのに丁度良い機会となりました。

  • SELECT (ユーザー毎の絵文字取得、タスク登録済み判定)
  • INSERT INTO (タスク追加)
  • UPDATE (タスク名更新)

今回作成したSlackbotを
GW明けに実運用してみて、下記の確認をしていきたいと思います…!

  • 実業務で使えるか?
  • 複数ユーザーで使用してみても便利か?
  • 自部署だけでなく、他部署に連携したくなるくらいの代物か?

編集履歴

2022/05/07 新規作成

関連記事一覧

PAGE TOP