コラム
2025年6月9日
私はクラウド型RPAサービス「Coopel」のカスタマーサクセスディレクターです。
Slackには有料プランで使える「要約機能」がありますが、個人や小規模チームにとっては少し高価。
「これを無料で自動化できないか?」
この課題を解決するため、Power Automate for Desktop(PAD)とWindows Copilot アプリを組み合わせて、Slackのチャット履歴を自動で取得・整形・要約する仕組みを作りました。
結果:
こんな形で要約することができました!

\uXXXX)を人間が読める形式に変換| ツール | 用途 |
| Power Automate for Desktop | 自動化フローの作成 |
| Slack API | スレッド履歴取得 |
| Windows Copilot アプリ | テキストファイルをようやく(ファイルアップロード) |
Slackの履歴をAPI経由で取得するには、以下の2ステップを行っておきます。
手順:
channels:history
アプリ (この例ではSlackログ取得Bot) が追加されているパブリックチャンネル内のメッセージやその他のコンテンツを閲覧する権限
channels:read
ワークスペース内のパブリックチャンネルに関する基本情報を閲覧する権限
groups:read
アプリ (この例ではSlackログ取得Bot) が追加されているプライベートチャンネルに関する基本情報を閲覧する権限
mpim:history
アプリ (この例ではSlackログ取得Bot) が追加されているグループダイレクトメッセージのメッセージやその他のコンテンツを閲覧する権限
users:read
ワークスペース内のユーザー(メンバー)に関する情報を閲覧する権限
groups:history
アプリ (この例ではSlackログ取得Bot) が追加されているプライベートチャンネルのメッセージやその他のコンテンツを閲覧する権限
トークン発行手順:
xoxp-...) をコピーして控える手順:
/invite @アプリ名
例: /invite @Slackログ取得Bot
正しく追加されると「@Bot名 がこのチャンネルに参加しました」と表示されます
実際のフロー(全体)

入力ダイアログを表示アクションを使用し、履歴を要約する対象スレッドのリンクの入力を求める
スレッドURLスレッドのURLを記入してくださいhttps://YOURWORKSPACE.slack.com/archives/チャネルID/pスレッドID1行
Slack スレッドのリンクは https://YOURWORKSPACE.slack.com/archives/チャネルID/pスレッドID であり、Slack の該当スレッド上で右クリックし、リンクをコピーを選択することにより入手できます。
このアクションを実行すると、下記のようにダイアログが表示されるので、実行者は、要約したいスレッドのリンクをこのダイアログに貼り付けます。

2. Slack スレッドのリンクからチャネルID とスレッドID を抜き取る
https://YOURWORKSPACE.slack.com/archives/チャネルID/pスレッドID の形式の URL を /archives/ 前後に区切ります
テキストの分割アクションを使用して チャネルID/pスレッドID の文字列を / 前後で区切ります。区切った文字列のうち、前半がチャネルID、後半がSlackメッセージのタイムスタンプ(投稿ID)となります。
%SlackURLDevided[1]%カスタム/
変数の設定アクションを使用して、直前のアクションで区切った文字のうち前半部分を ChannelID 変数に格納します
ChannelID %ChannelAndThread[0]%
PowerShell スクリプトの実行アクションを使用して、SlackメッセージのタイムスタンプをスレッドID の形式に変換します。(例: p1745821585046879 がタイムスタンプである場合、p をまず取り除き、整数部分と少数部分に分け、1745821585.046879 のような形にします。これが Slack のスレッドID となります。実行する PowerShell コード:

コピー用PowerShell コード:
$numericThreadIdWithP = “%ChannelAndThread[1]%”
$numericThreadId = $numericThreadIdWithP.Substring(1)
$seconds = [int]($numericThreadId / 1000000)
$microseconds = $numericThreadId %% 1000000
$formattedThreadId = “$seconds.” + $microseconds.ToString(‘000000’)
$formattedThreadId

3. Slack APIを実行し、スレッド内のコメント一覧を取得
Web サービスを呼び出しますアクションを使用し、Slack API を実行して特定スレッドの履歴を取得します
https://slack.com/api/conversations.replies?channel=%ChannelID%&ts=%ThreadID%&limit=100Authorization: Bearer [Slack API Token]
テキストをファイルに書き込むアクションを使用し、取得した履歴をテキストファイルに保存します
任意のファイルパス及びファイル名を記載します%WebServiceResponse%
実行するPowerShellコード:

コピー用PowerShell コード:
# JSONファイルを読み込み
↑コピー用PowerShellコード
$json = Get-Content “手順1-cで指定したファイルパス (例: C:\temp\slack_texts.json)” -Raw | ConvertFrom-Json
# messages[].text を抽出して結合
$texts = $json.messages | ForEach-Object { $_.text }
# 改行区切りで保存
$texts -join “rn” | Set-Content “手順1-cで指定したファイルパス (例: C:\temp\slack_texts.json)” -Encoding UTF8

5. Copilotアプリ(Alt + Space)で起動する
キーの送信アクションを使用して Alt+Space キーを押下し、Copilot アプリの簡易版を起動します
{Alt}({Space})
6. ファイルをアップロード → 要約依頼

ウィンドウ内のフィールドに入力するアクションを使用して、Copilot のプロンプト内に “これを要約してください” と入力します
これを要約してください
キーの送信アクションを使用して、Enter キーを2度押下し、Copilot に内容を要約させます 送信するテキスト: {Enter}{Enter}
フロー実行前に、Slack 上の要約対象となるスレッドの一番最初のコメントの上で右クリックをし、リンクをコピーしてそのスレッドへのリンクをコピーしておきます。

Power Automate for Desktop でフローを実行すると、下記のダイアログが表示され、要約対象のスレッドへのリンクの入力が求められますので、コピーしたスレッドへのリンクを貼り付け、OK ボタンをクリックします。

Copilot が自動的に起動し、そのスレッドでの会話が Copilot で要約されます。

そこで、PowerShellで変換してファイル化 → Copilotにアップロードという手順に切り替えることで安定して要約できるようになりました
Slackの「要約」機能を無料で再現できたことに加え、指定したスレッドの内容を生成AIに任せて整理できるのはかなり便利です。
といった場合には、是非お試しください!
私の所属するCoopel でも、全く同じフローを作成することはできませんが、類似のフローを作成することは可能です。ただし、デスクトップ版 Copilot の操作ができないため、要約する部分を例えば Gemini や ChatGPT の API (有料)を使用する形となります。また、要約結果を画面上に表示する代わりに、例えば Slack に結果を貼り付けるなどの工夫が必要です。
みなさまの業務の一助になれば幸いです!