投稿の多いチャンネルを朝に読み返すだけで、始業後の時間がなくなることがあります。この記事では、前日の投稿を AI に要約させて、決まった時刻に別のチャンネルへ届ける手順を説明します。
結論
- Samurai App のワークフローを定期実行で動かし、3 つのステップをつなぎます。 Slack の履歴を読む操作、「AI で生成」での要約、「通知先へ送る」の順です。
- 読めるのは、接続したアカウントが読めるチャンネルの、読める分だけです。スレッドの返信は履歴の操作に含まれません。
- 要約はモデルを使うので、実行のたびにクレジットを使います。投稿がない日も同じです。
- 定期実行は最短 1 時間に 1 回で、時刻は日本時間です。
できること・できないこと
できること:
- 決まった時刻に、1 つのチャンネルの最新の投稿をまとめて要約すること
oldestを指定して、読む範囲を時刻で区切ること- 要約を、元のチャンネルとは別のチャンネルに送ること
読む範囲の制約:
- 参加していないチャンネルは避けてください。 プライベートチャンネルと DM は、接続したアカウントがメンバーでないと読めません。Slack はボットのトークンに対しても、参加していないチャンネルは
not_in_channelで断ります。 - スレッドの返信は取得されません。 履歴の操作
SLACK_FETCH_CONVERSATION_HISTORYが返すのは、チャンネルの本流の投稿です。議論がスレッドで進むチャンネルでは、要約が親の投稿だけになります。スレッドは別の操作SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATIONで読みますが、スレッドごとに読むことになります。 - 取得件数は 1 回 100 件が既定です。 指定できるのは 1,000 件までですが、Slack は 2025 年 5 月から、Marketplace 外で配布される商用アプリの新規インストールについて、
conversations.historyを 1 分 1 回、1 回 15 件までに制限しています。社内で作ったアプリは対象外です。15 件しか取れないときは、「コネクタ」で「自社の OAuth クライアントで追加」に切り替えます。 - 投稿者は名前ではなく ID で届きます。 履歴の
userはUで始まる ID です。本文中のメンションも ID の形になるので、「誰が言ったか」を名前で要約させるには、ID と名前の対応を別に用意する必要があります。
用意するもの
- 読むチャンネルに参加している Slack のアカウント
- 要約を投稿するチャンネルの Incoming Webhook の URL
- Samurai App で定期実行を作る権限(作成者とマネージャー以上)
- クレジットの残り(利用上限に達していると AI のステップは動きません)
手順
1. Slack を接続する
「コネクタ」画面の「コネクタ」タブで Slack を「追加」し、読むチャンネルに参加しているアカウントで「連携」します。
2. 要約の届け先を登録する
Slack の Incoming Webhook を、要約を投稿するチャンネル向けに作ります。URL を「設定」→「通知」の「通知先」に登録し、「テスト送信」で確認します。
3. 履歴を読むステップを作る
「ワークフロー」で新しく作り、「ステップを追加」から Slack の SLACK_FETCH_CONVERSATION_HISTORY を選びます。
channelにチャンネル ID を入れます。ID が分からなければ、同じ Slack のSLACK_FIND_CHANNELSで調べられます。limitに件数を入れます。
「テスト」タブの「このステップを試す」で、投稿が返ることを確認します。読み取りなので試しても Slack 側は変わりません。
前日分に区切る場合: oldest は Unix 時刻の文字列です。その前に「コード」のステップ(「隔離」)を足し、次のように返します。
return { oldest: String(Math.floor(Date.now() / 1000) - 86400) };
oldest にはこのステップの結果を「変数」で選びます。区切らない場合は最新から limit 件を読むので、投稿の少ない日は前日より前も混ざります。
4. 要約のステップを作る
「ステップを追加」で「AI で生成」を足します。頼み方の例です。「/」か「変数」で履歴の結果を差し込みます。
次の Slack の投稿を、決定事項、未解決の質問、今日の対応の 3 つに分けて要約してください。
投稿にないことは書かないでください。投稿がなければ「投稿はありませんでした」とだけ返してください。
書式は Slack に合わせ、太字は *文字* で書き、# の見出しは使わないでください。
全体を 2,000 字以内に収めてください。
{{履歴のステップの結果}}
Slack の書式は Markdown と規則が異なるので、書式を指定します。投稿本文は <@U…> の形のメンションを含みます。
5. 送信のステップを作る
「ステップを追加」の「つなぐ」から「通知先へ送る」を足し、手順 2 の通知先を選びます。「本文」には要約のステップの text を選びます。
6. 公開して定期実行を付ける
「バージョン」タブで「バージョン N を公開」を押します。「トリガー」タブの「定期実行を追加」を押し、「いつ動くか」の「cron(分 時 日 月 曜)」に、たとえば平日の朝 8 時なら 0 8 * * 1-5 と入れます。
チャットで作るなら、「毎朝 8 時に Slack の #営業 の投稿を要約して通知先へ送るワークフローを作って」と頼めます。出来上がりは下書きなので、公開前に中身を確認してください。
無人の実行と承認
Slack の履歴の読み取りと「AI で生成」「通知先へ送る」には、カードを出す操作がありません。定期実行でそのまま動きます。例外は、管理者がその操作を「毎回確認」か「禁止」にしているときで、承認する人がいないので断られます。
既定では、起動した人のアカウントで動きます。定期実行は登録者のアカウントで読むので、登録者が読めるチャンネルの内容が、要約を通じて投稿先の全員に伝わります。 プライベートチャンネルを広いチャンネルへ要約するときは、この点を確認してください。担当者が替わる場合は、ステップの「実行に使う認証情報」で「このワークフローに貸す」を使えます。
動かないとき
- 件数が少ない。 取得件数の制限にかかっている可能性があります。「実行」タブの出力で実際の件数を確認し、15 件で止まるなら自社の OAuth クライアントを試してください。
not_in_channelや権限のエラーが出る。 接続したアカウントがそのチャンネルのメンバーか確認します。- 要約が薄い、話が抜ける。 スレッドでのやり取りは入っていません。議論がスレッドに集まるチャンネルは、この形に向いていません。
- 実行そのものが動かない。 下書きのままか、利用上限に達している可能性があります。「実行」タブの「最近の実行」を見てください。
よくある質問
複数のチャンネルをまとめて要約できますか
チャンネルごとに履歴のステップを足し、要約のステップにすべて差し込めば、1 通にまとめられます。件数が増えるほどクレジットを多く使います。
投稿がない日は通知を止められますか
「AI で生成」の「出力の項目」に、投稿があったかどうかを はい / いいえ で返す項目を足し、「条件分岐」でその値を見て「通知先へ送る」を分ければ止められます。AI のステップは動くので、その回のクレジットは使います。
要約を元のチャンネルに返信できますか
通知先の投稿先は Incoming Webhook の URL ごとに固定されるので、そのチャンネルへの新しい投稿になります。スレッドへの返信は「通知先へ送る」ではできません。