文系がslackbotを作ってみたので、手順をまとめる(202008時点)


slackBot作成の流れをまとめる(2020年08月時点)

目的

slackやbotkitは基本敵に英語で書かれているが、
その仕様はここ数年で結構変わっており、過去の日本語の記事が使えない事が多かったのでここにまとめる。
ちゃんと理解するならリファレンスを読もう。
(2020年8月仕様なので、また変わるかもしれない。注意されたし)

使うもの

slack
 ・・・これがないと始まらない。
slackAPI
・・・ここでbotの本体と権限付与とかするページ。
botkit(4.n)
・・・botのアプリ作成を手助けしてくれるスゴいツール。0.n系と仕様がそれなりに違うので注意されたし

基本的なbotの動き

一般的なAPIを使ってる時と動きは同じ。
slack→APPの部分とAPP→slackの部分で大きく切り分けられる。

slack→APP

slack上でEvent(※1)が発生した際にそれを検知し、アプリに既定の電文を送信する。
(※2:method毎に指定された引数を設定してslackに送信することで、外部からslackに干渉することができる)

APP⇒slack

受け取った電文を元に、APP内でmethod(※2)の引数を設定し、slackに電文を送信する。
(※1:slackで何かが動作する際には同時に「Event」というものが発行される)

 slackでbotを作ってみる

作るもの

botにmentionを飛ばしたら「hello]と回答するbot

1.botの皮を作る。

botの本体を作成して、Tokenを発行する。

リンク先が非常にわかりやすいのでこれに沿ってやれば大丈夫。
ただし画面がちょっと古かったり、ツールは古くなってるので使わない方が吉。
Slack の ボット に OAuth で 権限を追加する

【備考】
今回のケースで必要な権限スコープはBot Token Scopeのapp_mentions:readだけです。
権限スコープはTOKENをとったあとでも追加できるので、とりあえず1個だけ作ってやるのがいいと思います。

<追記>2020/11/05
一回目でも普通にインストールボタンを押すとできるようになったらしい。楽ですばらしい。

2.認証情報をコピーする

SlackAPIのBasicInformationタブにあるSIGHING_SECRETと
OAuthのタブにあるBotTokenをコピーする。
(今回はAuthTokenは不要。ユーザー代理で何かさせるときは必要になる)

3.Botkitでアプリ部分を作る

slackからapp_mentionが飛んで来た時の処理を書く。
以下の折り畳み部分をコピペする。
(javascriptで書くことになるので、少し学んで置くと吉)


サンプルプログラム
const { Botkit } = require('botkit');
const { SlackAdapter, SlackEventMiddleware } = require('botbuilder-adapter-slack');

var sSecret = YOUR_SIGNING_SECRET
var bToken = YOUR_BOTTOKEN

const adapter = new SlackAdapter({
    clientSigningSecret: sSecret,
    botToken: bToken,
    redirectUri:""
});

adapter.use(new SlackEventMiddleware());

let controller = new Botkit({
    adapter: adapter
});

controller.on("app_mention", async(bot,message) =>{
    await bot.reply(message, "hello");
});


トークン等の設定部分と最後のcontroller.onの部分以外はすべてコピペでOK。
(備考:基本的にTOKEN情報はプログラム内に記載せずに、環境変数に入れるのが一般的なので、
 運用時には環境変数に入れて実行しよう)

追記メモ:
botkit導入手順
git cloneでgithubからbotkitを持ってくる。
npm install でbotkitをインストールする。
npm install --save botbuilder-adapter-slack でslackbuilderをインストールする。
node xxxx.jsで実行

4.サーバーを建てる

何でもいいのでサーバーを建てる。
短時間で良いのならばngrokで良いと思う。お金かからないし。
参考:ngrokが便利すぎる

APPとslackを繋ぐ

APPとngrokを動かした状態で、slackapiの「Event Subscription」タブにあるRequestURLに
ngrokのアドレス+エンドポイントを記載するとVerifiedと出るのでセーブする。

これでslackで作ったbot宛にメンションをとばせば、helloと返ってくる。

終わり。

自分用メモ

外部鯖で動かすときのメモ
1.npmをインストールする
yum install nodejs
2.gitをインストールする
yum install git
3.githubの手順に沿ってやる
4.firewallのポートの穴をあける。
4.ちゃんとteratermとか使って操作する。(ターミナルは使っちゃだめ)