見出し画像

Slack Block Kitはめっちゃ使いやすいけど使いまくると怒られる

SlackはIncomming Webhookとか、Slack Bot APIとか、めっちゃ便利な機能が盛りだくさんです。各SaaSベンダが仕組み作りに専念し、Slackがインターフェースとなる概念は本当に素晴らしいと思います。(とはいえ各SaaSベンダがIF作らないとどういうものか分からないから完全に仕組みだけ作るって世界には中々ならないと思うけれど。)

で、いろいろなSaaSと合わせてSlackを使ってると、だいたいAlertやステータス等を通知したくなってくるんですよね。だって各SaaSにログインしてUIで確認して~って作業がめんどくさいから。

イメージ (Cacoo使ってみた)

この通知はSlackがREST APIで受け付けてくれるので、LambdaでやってもGASでやっても何でもよいのですが、もちろんrate limitsがあります。

Rate limiting conditions are unique for methods with this tier. For example, chat.postMessage generally allows posting one message per second per channel, while also maintaining a workspace-wide limit. Consult the method's documentation to better understand its rate limiting conditions.

ざっくり読み解くと、「ワークスペースの使われ方によって制限は変わるけどチャンネル1つにつき1秒間に1回投稿できるよ」とのこと。

なるほど、滅多矢鱈にメッセージを投稿せず、ある程度纏めて投稿するほうが良さそうですね。何かがバーストしてAlertをすべてpostするようなことが引き起こされれば制限に引っ掛かりそうです。

と、いうわけで。
1つの投稿だけど、複数の内容であることがわかるように投稿するため、PostするJSONにAttachmentの要素を含めるか、あるいはBlock Kitを利用した投稿にする必要があります。

Attachment 
(Slack API Incoming Webhooks  - Making it fancy with advanced formattingから引用)

Block Kit
(Block Kit Builder から引用)

AttachmentでもBlock Kitでも、2019/08時点ではよいのですが、AttachmentはLegacy messageとして定義されているため、シンプル化されたBlock Kitに置き換わるのではないかと思われます。(そもそもAttachmentのJSONが複雑だからBlock Kitが出てきたっぽい)

というわけで、Incoming Webhookやchat.postMessageによる通知はBlock Kitを利用するとよさそうです。・・・ですが、Block Kitにはこのページに記載されてない制限があります。(私の検索スキルがショボすぎて見つけられてないだけかも。)
Block KitのJSONとして有効なBlockアイテム数は「50」なのです。50アイテムを超えるような通知をするとInvalid_ItemみたいなPostエラーが帰ってきます。

そんなアホな通知するか?と思いますが、まぁいろいろな要件が重なって通知件数が増えに増えた結果、見事にPostエラーとなり、一切通知されなくなりました。

・通知チャンネル等を作っているときは1秒1投稿に気を付けよう
 ⇒スレッドに追加の情報を乗っけようとして引っ掛かりがち。
・1投稿に含まれる通知が増え過ぎない運用を考えよう
・たくさんのログを見る必要があるときは、そのログを表示できるUIへのリンクをPostする等にしよう(すべてのIFがSlackとなる理念から外れるけど、無理にSlackを利用して運用や通知の仕組みが複雑化することは本末転倒)

インターフェースとして優秀過ぎるがゆえにやりすぎちゃうことがあるので、注意したいですね。


※本件とは関係ないけど思ってること。
Attachmentの引用符と同じカンジでBlock Kitでも色分けしたりする仕組みがほしい・・・!

この記事が気に入ったらサポートをしてみませんか?