search
LoginSignup
0

posted at

updated at

2段階でちょっと面倒!ボットからユーザにダイレクトメッセージを送る方法(Slack API編)

React、node.js、Google Cloud Platform (App Enigine)でSORTFULというチームビルディングゲームを作る際に出てきた疑問を、備忘録として記事にまとめています。

はじめに

SORTFULは参加者それぞれにダイレクトメッセージで「数字」を送るところから始まります。
soortful1.PNG

この「メールアドレス情報から、ダイレクトメッセージを送る」というのが、今回の目的です。
Webexとslackを使いたいので、以下のような感じになります。

Webex
Webex6.PNG

slack
slack8.PNG

本記事はslackのapiについて書いていきます。
webex apiについてはこちら

APIを使うおおまかな流れ

1.Slack Appを作成する
2.権限を付与する
3.ワークスペースにインストールする
4.(3の時に生成されたトークン等の情報を使って)apiを叩く

手順

1.Slack Appを作成する

slack APIにページで、Your appsまたはCreate an appを選択すると、サインインを求められます。
slackのアカウントをお持ちでない方は、アカウントの作成をしてください。

slack1.PNG

サインインした後、slack apiにて、Create an appを選択すると、以下のようなポップアップが出ます。

slack2.PNG

From scratchを選んで

slack3.PNG

App NameにBotにつけたい名前をいれます。(後で変更できます。)

2.権限を付与する

今回は送り先のメールアドレスのみが分かっている状態で、ダイレクトメッセージを送ることが目的です。
これをslack apiでやろうとすると、以下2つのmethodが必要になります。
①メールアドレスからユーザ情報を取得する⇒users.lookUpByEmail
②ユーザIDにダイレクトメッセージを送る⇒chat.postMessage

①メールアドレスからユーザ情報を取得する

まずはusers.lookUpByEmail機能から見ていきましょう。
Required scopesを見ると、users:read.emailが必要と書いてあります。
これはslack apiのOAuth&PermissionsのScopeで設定できます。

slack4.PNG

Add an OAuth Scopeで、users:read.emailを追加してください。
users:readを一緒に追加するように言われるので、それも一緒に。

②ユーザIDにダイレクトメッセージを送る

続いてchat.postMessageも同じく見ていきましょう。
Required scopeがchat:writeになっているので、OAuth & Permissionsで追加します。

こんな感じになります。
slack9.PNG

3.ワークスペースにインストールする

次にWorkspaceにこのAppをインストールします。
Basic Informationの"Install to Workspace"ボタンでインストールできます。

slack6.PNG

4.(3の時に生成されたトークン等の情報を使って)apiを叩く

chat.postMessageusers.lookUpByEmailそれぞれのArgumentsによると、どちらにもtokenとあります。このtokenとは?となるのでOAuth & Permissionsのページに戻ってみるとできてます。

slack7.PNG

Bot User OAuth Tokenをメモしておきましょう。

あとはnode.jsでslack apiにpostするのですが、今回は簡単なので@slack/web-apiパッケージを使っています。

  const { WebClient } = require('@slack/web-api');
slackApi.js
async function slackApi(token, email, number, name) {
  // See: https://api.slack.com/methods/chat.postMessage
  const web = new WebClient(token);

 try {
  const res = await web.users.lookupByEmail({
    email: email,
   });
 }catch(e){
  console.log(res.error);
 }
  console.log("get user: ", res.user.id);

  try {
    const response = await web.chat.postMessage({
      channel: res.user.id,
      text: `Hello ${name}, \r\n please do not tell anyone... \r\n your number is ${number}!`,
    });
    if (response.ok) console.log(`The number sent successfully to ${name}`);
  } catch (error) {
    console.log(response.error);
  }
}

これでユーザ情報がゲットできたので、次はこのユーザIDを使って、ダイレクトメッセージを送ります。

まとめ

Slack APIの使い方
1.Slack Appを作成する
2.権限を付与する
3.ワークスペースにインストールする
4.(3の時に生成されたトークン等の情報を使って)apiを叩く

slack apiでダイレクトメッセージを送るには、以下の二つの機能が必要になります。
users.lookUpByEmailでユーザ情報からユーザIDを取得
chat.postMessageでユーザID宛にダイレクトメッセージを送信

slack apiは色々なことができるのですが、機能が多すぎて、調べるのに少し時間がかかりました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0