前回に引き続き、SlackBotをカスタマイズしていきます。
今更ながらSlackBotを作ってみた
今回は、スラッシュコマンドです。
Slackには、/で始まるコマンドがたくさん用意されていますよね。
そこに、独自のコマンドを付け加えることができ、それをSlackBotが処理できるようになります。
前回の環境をそのまま使います。まだの方はぜひご参照ください。
(参考情報)
slack api:Slash Commands
https://api.slack.com/slash-commands
SlashCommandsを作成する
Setting-Basic Information のページを表示し、Slash Commandsを選択します。
それでは、「Create New Command」ボタンを押下しましょう。
「hi」という呼びかけに対して、あいさつ文と一緒にエコーバックするコマンドを作ってみましょう。例えば、以下のような感じで作成してみました。
・Command:/hi
・Request URL : 立ち上げたサーバのエンドポイントをフルパスで指定します。/testbot-cmdの方です。
・Short Description:やあ
・Usage Hint:呼びかけに応答します。
「Save」ボタンを押下します。
インストール済みのアプリを更新する必要がありますので、click hereのリンクをクリックします。あるいは、Setting-Install Appを選択して、「Reinstall App」ボタンを押下します。
すると、以下のような確認ページが表示されるので、「許可する」ボタンを押下します。
これで、Slack側の準備ができました。
#サーバ側の準備
次は、サーバ側を準備します。
すでに実装してあるコードに以下を追記します。
//・・・
app.command(async (body, web) =>{
if(body.command === '/hi'){
var hour = new Date().getHours();
var greeting = 'こんにちは';
if( 5 <= hour && hour <= 9 )
greeting = 'おはよう';
else if( 18 <= hour && hour < 5 )
greeting = 'こんにちは';
var message = {
text: greeting + '!' + (body.text ? (' ' + body.text + " です。") : '')
};
app.responseMessage(body.response_url, message );
}
});
//・・・
app.commandに関数を登録しておくと、コマンドが入力されたときにコールバックされてきます。
レスポンスメッセージを返す方法として、以下の3種類があります。
・Confirm your receipt of the payload. : 受信できたことを知らせるのみ
・Do something useful in response right away. : すぐにレスポンスメッセージを返す。
・Do something useful in response later. : 後でレスポンスメッセージを返す。
slack-utils.jsでは、「後でレスポンスを返す」 方法をとっています。
body.response_urlに後で返す先のURLがあります。それを使って、app.responseMessageを呼び出してメッセージを返しています。
レスポンスメッセージの詳細は、前回同様以下を参考にしてください。
slack api:Reference Message payloads
https://api.slack.com/reference/messaging/payload
#動作確認
こんな感じでできました。
入力中。
応答を受信。
SlackBot用にユーティリティslack-utils.jsを用意しておいたので、わりと簡単に実装できるようになったのではないかと思います。
以上