React、node.js、Google Cloud Platform (App Enigine)でSORTFULというチームビルディングゲームを作る際に出てきた疑問を、備忘録として記事にまとめています。
はじめに
SORTFULは参加者それぞれにダイレクトメッセージで「数字」を送るところから始まります。
この「メールアドレス情報から、ダイレクトメッセージを送る」というのが、今回の目的です。
Webexとslackを使いたいので、以下のような感じになります。
本記事はslackのapiについて書いていきます。
webex apiについてはこちら
APIを使うおおまかな流れ
1.Slack Appを作成する
2.権限を付与する
3.ワークスペースにインストールする
4.(3の時に生成されたトークン等の情報を使って)apiを叩く
手順
1.Slack Appを作成する
slack APIにページで、Your appsまたはCreate an appを選択すると、サインインを求められます。
slackのアカウントをお持ちでない方は、アカウントの作成をしてください。
サインインした後、slack apiにて、Create an appを選択すると、以下のようなポップアップが出ます。
From scratchを選んで
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で設定できます。
Add an OAuth Scopeで、users:read.emailを追加してください。
users:readを一緒に追加するように言われるので、それも一緒に。
②ユーザIDにダイレクトメッセージを送る
続いてchat.postMessageも同じく見ていきましょう。
Required scopeがchat:writeになっているので、OAuth & Permissionsで追加します。
3.ワークスペースにインストールする
次にWorkspaceにこのAppをインストールします。
Basic Informationの"Install to Workspace"ボタンでインストールできます。
4.(3の時に生成されたトークン等の情報を使って)apiを叩く
chat.postMessage、users.lookUpByEmailそれぞれのArgumentsによると、どちらにもtokenとあります。このtokenとは?となるのでOAuth & Permissionsのページに戻ってみるとできてます。
Bot User OAuth Tokenをメモしておきましょう。
あとはnode.jsでslack apiにpostするのですが、今回は簡単なので@slack/web-apiパッケージを使っています。
const { WebClient } = require('@slack/web-api');
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は色々なことができるのですが、機能が多すぎて、調べるのに少し時間がかかりました。