前回の記事では、自作Slackコマンドが動作するまでの手順を説明した。
本記事では、自作Slackコマンドの出力をJSON形式としてUIをより柔軟なものにしていく。またその副産物として、出力結果を全員に見せられるようになる。
本記事の概要
- Slack APIのリファレンスに書かれている内容の一部を実践した
- Block Kit Builderを利用し、JSON形式で出力した
- 出力結果の可視性を変更し、全員に見えるようにした
JSON形式での出力
ブロックの記述と出力
Slack Appは、JSON形式のブロック構文を用いて視覚的にリッチなメッセージを送信することができる。ここでは、その機能の一部を紹介する。詳細は公式リファレンスを参照してほしい。
ひとつのブロックは、例えば以下のように構成される。
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "You can use *markdown* syntax _here_."
}
}
送信したい文章をtext
キーに格納すればよい。マークダウン記法を利用することもできる(type
キーでmrkdwn
と指定すること)。
実際の自作SlackコマンドによるCGI呼び出しへの応答は、以下のように記述される1。
Content-Type: application/json; charset=utf-8
{
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "You can use *markdown* syntax _here_."
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "You can also stack multiple blocks like this."
}
}
]
}
JSON形式での出力の際は、ヘッダ部でContent-Type: application/json
と指定しなければならない。ブロックはblocks
キーに配列形式で格納する。配列内に複数のブロックを格納すれば、それらが順番に出力されることになる。
Block Kit Builderについて
上述したJSON形式での出力を視覚的に行えるツール“Block Kit Builder”が用意されている。画面左側から利用したいブロックの種類を選択すると、自動的にJSON形式の出力およびそのプレビューを表示してくれる。
出力結果の可視性
Slackコマンドの出力は、デフォルトでは「コマンドを送信した本人にのみ表示される」仕様となっている。
これを変更するには、blocks
キーと同階層に"response_type" : "in_channel"
と追加する必要がある(下から2行目)2。
Content-Type: application/json; charset=utf-8
{
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "You can use *markdown* syntax _here_."
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "You can also stack multiple blocks like this."
}
}
],
"response_type": "in_channel"
}
おわりに
本記事では、JSON形式の記述により柔軟なメッセージ出力ができるようになった。
実は、Slackのメッセージ出力には静的なものだけでなく、動的な要素(ボタンやチェックボックスなど)も利用することができる。これらの利用方法についても、時間と気力が生まれたとき記事にしたい。