Slack APIを使ったDM送信のご紹介

Slack API

はじめに

こんにちは。GMOアドパートナーズのs-tです
二回目の投稿になる今回は内製の社内システムでSlack APIを使ったDM(ダイレクトメッセージ)送信機能をリリースしたので、紹介していきます

背景

GMOアドパートナーズ 連結では昨年より社内のコミュニケーションツールとしてSlackを導入しております
昨年は初期導入のフェーズで基本的な使い方がメインでしたが、今年から徐々に活用していくフェーズに入っています

どんなことをやったか

Slackが提供しているAPIを活用して、大きく2つの機能を作りました。

SlackのユーザーID一覧の作成

それぞれの処理を詳細に見ていきたいと思います。
まずはSlackユーザーIDの一覧化です
  1. 弊社では全員が参加するチャンネルがあるため、そのチャンネルIDを conversations.members に渡してメンバーIDを一覧化します。
  2. そして一覧化したメンバーIDを users.info に渡してメールアドレスを取得します。その結果としてメンバーIDとメールアドレスの一覧化ができました
※弊社では複数ワークスペースを利用しているためこの処理が必要ですが、ワークスペースが1つ場合は、users.lookupByEmailを使ってメールアドレスからSlackのユーザIDを取得できるので、この処理は不要になります

通知機能の作成

続いてはアプリとSlackユーザーの1対1でのDM通知機能です
1対1のDM以外にもチャンネルや複数人DMなどメッセージの送り先は選択可能です
直接 chat.postMessage にユーザIDを渡してメッセージを送ることもできますが、APIの仕様を見ると非推奨のようなので、DM用のチャンネルIDを特定してからメッセージを送る作りにしました
  1. conversations.openにSlackのユーザIDを渡すことでDMのチャンネルIDが取得できま
    • ※一度もDMしていない場合は新規でチャンネルIDが作成され、そのIDが戻されます
  2. chat.postMessageに1で取得したチャンネルIDを渡すことで該当のユーザーにメッセージを送れます

最後に

今回の開発では1対1でのDM送付という機能でしたが、Slackへの通知やSlackからメッセージを送信することをトリガーとした処理などSlackで実現可能なことはまだまだあるので開発の機会があればまた紹介させていただきます ここまで読んでいただきありがとうございました