claudia.jsでslack custom commandsを作る
というわけで、まずはslackを使いこなせないと始まりません。
手始めに、custom commandsを使ってみます。
こちらが公式ページ(英語です)
api.slack.com
その前に、ここまでできてる前提で話しますね。
kei0425tan.hatenablog.com
slackの設定
というわけで、AWS lambdaで、web APIは使いこなせる??ようになっているはずです。
なので、slackでの設定を行います。
まずは、slackのチーム名の隣の下向き▼を押して、メニューを出して、「Apps & integrations」をクリックします。
面倒だったら、以下をクリックで!
slack.com
外部連携は基本的にいつもこのページからできるはずです。
その後、右上の「Build」をクリックし、「Something just for my team」をクリックします。
すると、以下の4つが表示されます。
- Incoming WebHooks
→ slackにメッセージを表示する。
- Bots
→ いわゆるBots
- Slash Commands
→ /で始まるコマンド
- Outgoing WebHooks
→ slackの表示されたメッセージを外部に渡す。
今回は、Slash Commandsを作成するので、そちらを選択します。
そうすると、コマンド名を入力する画面になるので、好きなコマンド名を入力します。
すると、まずPOSTデータのサンプルが表示されます。
token=RIKqnGNDN6r2yx01mOkIGgwe team_id=T0001 team_domain=example channel_id=C2147483705 channel_name=test user_id=U2147483697 user_name=Steve command=/weather text=94070 response_url=https://hooks.slack.com/commands/1234/5678
それぞれの意味は以下です。
- token → slackの認識用のトークン。受け取ったらまずここをチェックして違ったら弾くこと。
- team_id → チームID。チームドメインは変更可能だが、team_idはずっとユニークで変更できないはず。
- team_domain → チームドメイン。urlの最初。
- channel_id → チャンネルID。チャンネル名は変更可能だが、こちらはユニーク。
- channel_name → チャンネル名。
- user_id → ユーザID。こちらもユニーク
- user_name → ユーザ名
- command → 入力されたコマンド(/つき)
- text → 入力されたコマンドの引数。日本語も入ります。入力通りに受け取れます。
- response_url → 処理に時間が掛かるときに利用するレスポンス用URL
次に、上から順に以下を設定していきます。
- URL → 前回作成したURL
- Method → POSTのまま
- Token → そのまま。メモっておきましょう。
- Customize Name → 表示するコマンド名。
- Customize Icon → アイコンの変更ができます。
- Preview Message → 上のCustomize NameとCustomize Iconを適用したプレビュー
- Autocomplete help text → こちらを設定しておくと補完が効いてヘルプが見えます。
- Escape channels, users, and links → ここを設定しておくと、POSTデータのtextが拡張されて、一緒にユーザIDなどが来ます。
- Descriptive Label → なんだろう??知ってる人教えてください。
というわけで、大事なのはURLだけですね。
ここでは仮に、
コマンド名は/test
claudiaのpathも
https://yfw8aqrorg.execute-api.ap-northeast-1.amazonaws.com/latest/test
にしましょう。
それで、最後までいったら「Save Integration」をクリックします。
画面は遷移しませんが保存されます。
AWSの設定
とりあえず、前回のスクリプトに以下を追加。トークンは上のトークン入れてくださいね。
api.post('/test', function (request) { if (request.post.token != 'トークン') { return {message:'token error'}; } return { "response_type": "in_channel", "text": "It's 80 degrees right now.", "attachments": [ { "text":"Partly cloudy today and tomorrow" } ] }; });
- response_type → "in_channnel"を指定するとチャンネル全員が見えます。"ephemeral"を指定するとコマンドを発行した人のみに見えます。デフォルトでは、"ephemeral"を指定したのと同じです。
- text → 表示するメッセージです。
- attachments → 追加情報。引用みたくみえます。
さあ、ここまでできれば、あとは自由自在にコマンドを作れますね。
レッツコーディング!