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

この記事でできること
- 指定された Slack スレッドのリンクをベースにスレッド内のコメント履歴を自動で取得
- Unicode形式(\uXXXX)を人間が読める形式に変換
- CopilotアプリにファイルをアップロードしてAI要約
- 無料の Power Automate for Desktop で構築可能!
使用ツール
ツール | 用途 |
Power Automate for Desktop | 自動化フローの作成 |
Slack API | スレッド履歴取得 |
Windows Copilot アプリ | テキストファイルをようやく(ファイルアップロード) |
事前準備(初回のみ)
Slackの履歴をAPI経由で取得するには、以下の2ステップを行っておきます。
1. Slack APIアプリを作成してUser Tokenを取得
手順:
- Slack API Apps にアクセス
- 「Create New App」→「From scratch」を選択
- 任意のアプリ名(例:Slackログ取得Bot)とワークスペースを選択 → Create
- 左メニュー「OAuth & Permissions」をクリック
- 「Bot Token Scopes」の下の「Add an OAuth Scope」をクリックし下記のOAuth Scopeを追加
channels:history
アプリ (この例ではSlackログ取得Bot) が追加されているパブリックチャンネル内のメッセージやその他のコンテンツを閲覧する権限
channels:read
ワークスペース内のパブリックチャンネルに関する基本情報を閲覧する権限
groups:read
アプリ (この例ではSlackログ取得Bot) が追加されているプライベートチャンネルに関する基本情報を閲覧する権限
mpim:history
アプリ (この例ではSlackログ取得Bot) が追加されているグループダイレクトメッセージのメッセージやその他のコンテンツを閲覧する権限
users:read
ワークスペース内のユーザー(メンバー)に関する情報を閲覧する権限
groups:history
アプリ (この例ではSlackログ取得Bot) が追加されているプライベートチャンネルのメッセージやその他のコンテンツを閲覧する権限
トークン発行手順:
- 左メニュー「OAuth & Permissions」から「Install to Workspace」
- 「許可する(Allow)」をクリック
- 表示された User OAuth Token(xoxp-...) をコピーして控える
2. 作成したBotをチャンネルに招待する
手順:
- Slackで対象チャンネルを開く
- メッセージ入力欄で以下を入力して送信:
/invite @アプリ名
例: /invite @Slackログ取得Bot
正しく追加されると「@Bot名 がこのチャンネルに参加しました」と表示されます
全体の流れ
1.Power Automate for Desktop の入力ダイアログにて Slack スレッドのリンクを受け取る
2.Slack スレッドのリンクからチャネルID とスレッドID を抜き取る
3.Slack API を実行し、スレッド内のコメント一覧を取得する
4.メッセージ部分のみを抜き取り、Unicode形式を整形してファイルに保存する
5.Copilotアプリを起動する(Alt + Space)
6.ファイルをアップロードし要約依頼する
自動化の手順(ステップバイステップ)
実際のフロー(全体)

1.Power Automate for Desktop の入力ダイアログから Slack スレッドのリンクを受け取る
a.入力ダイアログを表示アクションを使用し、履歴を要約する対象スレッドのリンクの入力を求める
- 入力ダイアログのタイトル: スレッドURL
- 入力ダイアログメッセージ: スレッドのURLを記入してください
- 既定値: https://YOURWORKSPACE.slack.com/archives/チャネルID/pスレッドID
- 入力の種類: 1行

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

2. Slack スレッドのリンクからチャネルID とスレッドID を抜き取る
a.テキストの分割アクションを使用して https://YOURWORKSPACE.slack.com/archives/チャネルID/pスレッドID の形式の URL を /archives/ 前後に区切ります

b.テキストの分割アクションを使用して チャネルID/pスレッドID の文字列を / 前後で区切ります。区切った文字列のうち、前半がチャネルID、後半がSlackメッセージのタイムスタンプ(投稿ID)となります。
- 分割するテキスト: %SlackURLDevided[1]%
- 区切り記号の種類: カスタム
- カスタム区切り記号: /

c.変数の設定アクションを使用して、直前のアクションで区切った文字のうち前半部分を ChannelID 変数に格納します
- 変数: ChannelID
- 値: %ChannelAndThread[0]%

d.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を実行し、スレッド内のコメント一覧を取得
a.Web サービスを呼び出しますアクションを使用し、Slack API を実行して特定スレッドの履歴を取得します
- URL: https://slack.com/api/conversations.replies?channel=%ChannelID%&ts=%ThreadID%&limit=100
- カスタムヘッダ: Authorization: Bearer [Slack API Token]

b.テキストをファイルに書き込むアクションを使用し、取得した履歴をテキストファイルに保存します
- ファイルパス: 任意のファイルパス及びファイル名を記載します
- 書き込むテキスト: %WebServiceResponse%

4.メッセージ部分のみを抜き取り、Unicode形式を整形して保存する
a.PowerShell スクリプトの実行アクションを使用し、取得した履歴の中からメッセージ部分のみを抜き取り、Unicode形式を整形して再度テキストファイルに保存します
実行するPowerShellコード:

コピー用PowerShell コード:
# JSONファイルを読み込み
$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↑コピー用PowerShellコード

5. Copilotアプリ(Alt + Space)で起動する
a.キーの送信アクションを使用して Alt+Space キーを押下し、Copilot アプリの簡易版を起動します
- 送信するテキスト: {Alt}({Space})

6. ファイルをアップロード → 要約依頼
a.PowerAutomate の記録機能を使用して、Copilot アプリ内の「+」→ 「アップロード」→ ファイル選択 → 開くボタンをクリックまでを行いアクションを記録します
- 結果、下記のようなフローが自動的に作成されます

b.ウィンドウ内のフィールドに入力するアクションを使用して、Copilot のプロンプト内に “これを要約してください” と入力します
- 入力するテキスト: これを要約してください

c.キーの送信アクションを使用して、Enter キーを2度押下し、Copilot に内容を要約させます 送信するテキスト:{Enter}{Enter}

フロー実行
フロー実行前に、Slack 上の要約対象となるスレッドの一番最初のコメントの上で右クリックをし、リンクをコピーしてそのスレッドへのリンクをコピーしておきます。

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

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

やってみた感想
- SlackのAPIレスポンスが \uXXXX形式のUnicode で、そのままでは読めなかった
- Copilotのチャット欄には 文字数制限 があり、文字列を直接貼り付ける形にすると文字数制限に引っかかってしまうことがあった
そこで、PowerShellで変換してファイル化 → Copilotにアップロードという手順に切り替えることで安定して要約できるようになりました。
まとめ
Slackの「要約」機能を無料で再現できたことに加え、指定したスレッドの内容を生成AIに任せて整理できるのはかなり便利です。
- 長いSlackのスレッドの情報整理に時間がかかっている
- 有料機能を無料で補いたい
といった場合には、是非お試しください!
私の所属するCoopel でも、全く同じフローではないですが、類似のフローを作成することは可能です。その際、要約する部分を Gemini や ChatGPT の API (有料)を使用する形となります。みなさまの業務の一助になれば幸いです!
