概要
みなさん!
アプリケーションからSlackに通知する仕組みを作ったものの、通知量が多くお目当ての通知を探せない!!なんてことありませんか?
この記事を読むと、Slack通知をスレッド形式で行うことで通知わかりやすくする方法がわかるはずです!
Laravel既存の通知機能
Laravelにはとても便利なSlackへの通知機能があるんですよね。
Slack Webhookの発行を行い、ドキュメントに従って実装するとSlackへ通知すること機能が簡単にできてしまいます!
ただ通知量が増えてくるとスレッドを使いたくなるのですよね...。
そうだSlackAPIを使おう
chat.postMessageのthread_tsを設定することでどうやら特定のメッセージにリプライが送れるようです。
LaravelからSlackAPIを呼ぶためのライブラリ
今回はこちらのライブラリを使います!
https://github.com/jolicode/slack-php-api
README見て使いやすそうと思ったのが決め手!
Slack Web APIのすべてのエンドポイント、リクエスト、レスポンスに対する完全なオブジェクト指向インターフェイスを提供します。
いざ、実装
Get Started通りにcomposerを設定
composer require symfony/http-client nyholm/psr7
composer require jolicode/slack-php-api
Slack ボットの作成を作成してBotUserOAuthTokenを入手
Laravel環境で下記コードを動かしてみると!?
$yourSlackToken = "[BotUserOAuthToken]";
$client = ClientFactory::create($yourSlackToken);
$client->chatPostMessage([
'text' => '全部通知しちゃうゾ!',
'channel' => '#bot-practice'
]);
スレッド形式で通知
$client = ClientFactory::create($yourSlackToken);
$response = $client->chatPostMessage([
'text' => '全部通知しちゃうゾ!',
'channel' => '#bot-practice'
]);
dump($response);
Slack通知した後のレスポンスを除くと...
tsという返却値が!
このtsの値をthread_tsとして渡してあげると無事スレッド形式で通知できます!
$client = ClientFactory::create($yourSlackToken);
$response = $client->chatPostMessage([
'text' => '全部スレッド通知しちゃうゾ!',
'channel' => '#bot-practice',
'thread_ts' => '1689573862.454549'
]);
まとめ
通知BOT多すぎて欲しい通知が見つけられないという方はスレッド化を検討してみてはいかがでしょうか?
備考
動かしてみたコード
$attachments = [];
$attachments[] = [
'fallback' => 'fallback',
'color' => '#36a64f',
'pretext' => '*お肉を食べましょう!*',
'title' => 'どこで食べますか?',
'title_link' => '#',
'fields' => [
[
'title' => '北海道',
'value' => 'ジンギスカンが美味しい',
'short' => true,
],
[
'title' => '沖縄',
'value' => 'ステーキが美味しい',
'short' => true,
],
],
];
$yourSlackToken = "[TOKEN]";
$client = ClientFactory::create($yourSlackToken);
$client->chatPostMessage([
'attachments' => json_encode($attachments),
'channel' => '#bot-practice',
'thread_ts' => '1689573862.454549'
]);
参考資料