Node.js
Slack
slackbot

今更ながらSlackBotを作ってみた:Slash Commands

前回に引き続き、SlackBotをカスタマイズしていきます。

 今更ながらSlackBotを作ってみた

今回は、スラッシュコマンドです。

Slackには、/で始まるコマンドがたくさん用意されていますよね。

そこに、独自のコマンドを付け加えることができ、それをSlackBotが処理できるようになります。

前回の環境をそのまま使います。まだの方はぜひご参照ください。

(参考情報)

slack api:Slash Commands

 https://api.slack.com/slash-commands


SlashCommandsを作成する

Setting-Basic Information のページを表示し、Slash Commandsを選択します。

image.png

それでは、「Create New Command」ボタンを押下しましょう。

image.png

「hi」という呼びかけに対して、あいさつ文と一緒にエコーバックするコマンドを作ってみましょう。例えば、以下のような感じで作成してみました。

・Command:/hi

・Request URL : 立ち上げたサーバのエンドポイントをフルパスで指定します。/testbot-cmdの方です。

・Short Description:やあ

・Usage Hint:呼びかけに応答します。

image.png

「Save」ボタンを押下します。

インストール済みのアプリを更新する必要がありますので、click hereのリンクをクリックします。あるいは、Setting-Install Appを選択して、「Reinstall App」ボタンを押下します。

image.png

すると、以下のような確認ページが表示されるので、「許可する」ボタンを押下します。

image.png

これで、Slack側の準備ができました。


サーバ側の準備

次は、サーバ側を準備します。

すでに実装してあるコードに以下を追記します。


controllers\slack_testbot\index.js

//・・・

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


動作確認

こんな感じでできました。

入力中。

image.png

応答を受信。

image.png

SlackBot用にユーティリティslack-utils.jsを用意しておいたので、わりと簡単に実装できるようになったのではないかと思います。

以上