n8nとSlackを連携させて業務を自動化しているけど、特定のスレッドに返信する方法がわからなくて困っていませんか。
Slackの通知は便利ですが、ボットからの通知が増えすぎると重要な情報が埋もれてしまうこともありますよね。
そんなとき、関連するメッセージをスレッドにまとめることで、チャンネルをすっきりと保つことができます。
しかし、n8nでこれを実現しようとすると、Slack APIの「ts」(タイムスタンプ)という少し特殊な値の扱いでつまずきがちです。
この記事を読めば、n8nでtsを動的に取得・指定して、Slackのスレッドに確実にメッセージを返信するワークフローを構築できるようになります。
チームのコミュニケーションをより円滑にし、自動化の幅を広げるための具体的な手順を、初心者にも分かりやすく解説していきます。
なぜSlackのスレッド返信にはts(タイムスタンプ)が重要なのか?
n8nを使ってSlackのスレッドに返信するためには、「ts」というパラメータの理解が不可欠です。これがなければ、意図した通りに動作しません。では、なぜこのtsがそれほど重要なのでしょうか。その役割と、スレッド返信がもたらすメリットについて掘り下げていきましょう。
Slack APIにおける「ts」の核心的な役割
Slackにおける「ts」とは、すべてのメッセージにユニークに割り当てられるタイムスタンプのことです。これは単なる時刻情報ではなく、メッセージそのものを一意に識別するためのIDとして機能します。例えば、「1706886000.123456」のような形式の文字列です。
スレッド機能において、このtsは「親メッセージ」を特定する鍵となります。あるメッセージのスレッド内に新しいメッセージを投稿したい場合、Slack APIに対して「どの親メッセージに対する返信なのか」を伝えなければなりません。その際に使用するのが、親メッセージのtsなのです。
もし、Slackへメッセージを投稿する際にこのtsを指定しなければ、n8nからの投稿はスレッド内ではなく、通常のチャンネル投稿として送信されてしまいます。これでは、関連情報が分散し、後から文脈を追うのが困難になってしまいます。つまり、tsを正しく指定することこそが、スレッド返信を成功させるための絶対条件なのです。
n8nでスレッド返信を実現する3つの大きなメリット
tsの重要性を理解した上で、n8nでスレッド返信を自動化することのメリットを見ていきましょう。
- 1. チャンネルの情報を整理し、可読性を高める:
特定の話題に関するやり取りがすべて一つのスレッドに集約されるため、チャンネルのメインフィードが散らかりません。例えば、顧客からの問い合わせごとにスレッドを立てて対応を自動化すれば、他の業務連絡が流されることなく、チャンネル全体の見通しが良くなります。 - 2. コミュニケーションの文脈を維持する:
「この返信は、どのメッセージに対するものか」が一目瞭然になります。数日後にやり取りを見返す必要が出た場合でも、スレッドを追うだけで迅速に背景や経緯を理解できます。これにより、チーム内の認識齟齬を防ぎ、スムーズな情報共有を促進します。 - 3. より高度でインタラクティブな自動化が可能になる:
スレッド返信を使いこなすことで、単純な通知ボットから一歩進んだ自動化が実現できます。例えば、「特定のキーワードを含む投稿があったら、そのスレッド内でAIが回答を生成する」「Eコマースサイトで注文が入ったら、注文確認メッセージを投稿し、そのスレッド内で発送状況を更新していく」といった、より対話的で高度なワークフローを構築できます。
このように、tsをマスターすることは、Slackでのコミュニケーションを効率化し、n8nによる業務自動化の可能性を大きく広げる第一歩と言えるでしょう。
n8nでSlackメッセージのts(タイムスタンプ)を取得する具体的な手順
スレッド返信の鍵となるtsを、n8nのワークフロー内で動的に取得する方法を解説します。基本となるのは、特定のメッセージを検知する「トリガー」の設定です。ここでは、最も一般的な「Slack Trigger」ノードを使った方法と、応用編として既存のメッセージからtsを取得する方法を紹介します。
基本編:Slackトリガーノードでtsを取得する
ワークフローの起点となるのがトリガーノードです。新しいメッセージが投稿された瞬間にそのtsを取得するための設定は非常にシンプルです。
- n8nのワークフローエディタを開き、「+」アイコンをクリックして「Slack Trigger」ノードを追加します。
- 認証情報(Credentials)を設定します。
まだ設定していない場合は、Slackの認証情報を新規作成してください。 - 「Event」ドロップダウンから「Message Received (direct or channel)」を選択します。
これにより、新しいメッセージが投稿されるたびにこのトリガーが起動します。 - 「Channel」フィールドで、監視したいSlackチャンネルを選択します。
特定のチャンネル(例: `random`, `general`)や、ダイレクトメッセージを監視対象に設定できます。 - テスト実行して出力を確認します。
設定したチャンネルにテストメッセージを投稿し、n8nの「Test workflow」ボタンをクリックします。成功すると、トリガーノードの出力結果がJSON形式で表示されます。その中に、event>tsという階層でタイムスタンプが含まれていることを確認してください。これが、返信先の親メッセージを特定するための重要なtsです。
この出力されたtsは、後のノードで {{ $json.event.ts }} のようなExpression(式)を使って簡単に参照できます。これで、メッセージが投稿されるたびに、そのtsを自動で取得する準備が整いました。
応用編:メッセージのURLからtsを抽出する方法
場合によっては、トリガーではなく、ワークフローの途中で特定のメッセージのtsが必要になることもあります。例えば、スプレッドシートに記録されたメッセージのURLからtsを取得したいケースなどです。
Slackメッセージのパーマリンク(URL)は、通常 `https://[your-workspace].slack.com/archives/[channel-id]/p[timestamp]` のような構造をしています。
この末尾のタイムスタンプ部分をn8nで抽出するには、以下のようなExpressionを利用します。
まず、URLの最後の部分(例: `p1706886000123456`)を取得し、先頭の「p」を取り除き、6桁目(右から6番目)にドット(.)を挿入するという処理を行います。
例えば、「Set」ノードを使い、以下のようなExpressionを記述することでtsを生成できます。
{{ const urlPart = $json.body.url.split('/').pop(); const tsWithDot = urlPart.slice(1, -6) + '.' + urlPart.slice(-6); tsWithDot }}
この方法は少し複雑ですが、トリガー以外の情報からでも柔軟にtsを生成できるため、より高度なワークフローを構築する際に役立ちます。n8nの基本的な使い方や、より多様なノードの連携方法について詳しく知りたい方は、詳細な情報を網羅したn8n完全ガイド記事も併せてご覧ください。
取得したtsを使ってスレッドに返信するワークフロー構築
tsを動的に取得できるようになったら、いよいよワークフローの核心部分である「スレッドへの返信」を実装します。ここでは、Slack Triggerで取得したtsを使い、Slackノードでメッセージをスレッドに投稿する具体的な手順と、より実践的なワークフローの例を紹介します。
Slackノードで「Thread Ts」を指定する
トリガーで取得したtsを使って返信メッセージを送るには、通常の「Slack」ノードを使用します。設定のポイントはただ一つ、「Thread Ts」フィールドに取得したtsを正しく設定することです。
- 「Slack Trigger」ノードの後ろに「Slack」ノードを接続します。
- 認証情報(Credentials)はトリガーと同じものを選択します。
- 「Resource」を「Message」、「Operation」を「Post」に設定します。
- 「Channel」フィールドに、返信したいチャンネルを指定します。
トリガーから動的にチャンネルIDを取得する場合は、Expressionを使い{{ $json.event.channel }}と設定します。 - 「Text」フィールドに、スレッドに投稿したいメッセージ内容を記述します。
ここでもExpressionを使い、他のノードの情報を埋め込むことが可能です。 - 最重要:Options > Add Option から「Thread Ts」を追加します。
表示された「Thread Ts」フィールドの横にある歯車アイコンをクリックし、「Add Expression」を選択します。 - Expressionエディタに、トリガーノードから取得したtsを指定します。
{{ $trigger.item.json.event.ts }}と入力します。これにより、トリガーを起動させた親メッセージのtsがこのフィールドに動的にセットされます。
これで設定は完了です。ワークフローを有効化(Activate)して、監視対象のチャンネルにメッセージを投稿してみてください。Slackノードで設定したメッセージが、親メッセージのスレッド内に正しく投稿されれば成功です。
実践的なワークフロー例:キーワードに反応してスレッドで回答するBot
この仕組みを応用して、より実用的な自動化ワークフローを構築してみましょう。ここでは、「質問」というキーワードが含まれる投稿に対して、AIが自動で回答を生成し、そのスレッドに返信するボットを作成します。
- 1. Slack Trigger:
前述の通り設定し、特定のチャンネルを監視します。 - 2. IFノード:
トリガーの次に「IF」ノードを接続します。ここで、メッセージ本文に特定のキーワードが含まれているかを判定します。ConditionのExpressionに{{ $json.event.text.includes("質問") }}と設定します。 - 3. AIノード(例: Gemini, ChatGPT):
IFノードの「true」出力にAIノードを接続します。親メッセージの内容({{ $trigger.item.json.event.text }})をプロンプトとして渡し、回答を生成させます。 - 4. Slackノード:
AIノードの次に、先ほど設定したSlackノードを接続します。TextフィールドにAIが生成した回答(例:{{ $json.output }})を設定し、「Thread Ts」フィールドにはトリガーから取得した{{ $trigger.item.json.event.ts }}を指定します。
このワークフローにより、チームメンバーが「〇〇について質問です」と投稿するだけで、AIがスレッド内で一次回答を返してくれるようになります。これにより、定型的な質問への対応工数を大幅に削減できるでしょう。
スレッド返信でつまずきやすい点と解決策(2026年2月版)
n8nでのSlackスレッド返信は非常に強力ですが、設定の過程でいくつかの問題に直面することがあります。ここでは、よくあるエラーの原因とその解決策、そして2026年2月時点での注意点をまとめました。
エラー事例1:「invalid_ts」エラーが表示される
このエラーは、Slack APIが提供されたtsの値を無効だと判断した場合に発生します。最も一般的な原因は、Expressionの記述ミスです。
- 原因の切り分け:
まずは、トリガーノードやtsを生成したノードの出力結果をエディタ画面で確認しましょう。tsの値が正しく取得できているか、期待通りの形式(例: `1706886000.123456`)になっているかを目で見て確認します。 - 解決策:
・Expressionが{{ $trigger.item.json.event.ts }}のようになっているか再確認してください。
・手動でURLからtsを生成している場合は、ドット(.)を正しい位置に挿入できているか、前後の処理に誤りがないかを入念にチェックします。
・それでも解決しない場合、一度Slackノードの「Thread Ts」フィールドを固定のts(過去のメッセージからコピーしたもの)でテストし、問題の切り分けを行うと良いでしょう。
エラー事例2:スレッドではなく通常のチャンネル投稿になってしまう
ワークフローはエラーなく実行されるのに、メッセージがスレッドに投稿されないケースです。これは、tsがSlackノードに正しく渡されていないことを意味します。
- 原因の切り分け:
ほとんどの場合、Slackノードの「Thread Ts」フィールドの設定ミスが原因です。 - 解決策:
・Slackノードの設定を開き、「Thread Ts」フィールドが追加されているか確認します。
・フィールドが空になっていないか、またはExpressionが正しく設定されているかを確認します。Expressionの参照先ノード名が間違っているだけでもデータは渡りません。
・n8nの実行ログ(Executions)を確認し、Slackノードへの入力データ(Input)にtsが正しく含まれているかをチェックするのも有効な手段です。
Slack APIの権限(Scope)とn8nの進化に関する注意点
n8nとSlackを連携させる際には、Slackアプリ側での権限設定が重要です。スレッド返信を含むメッセージ投稿には、最低でも以下の権限(Scope)が必要になることが一般的です。
chat:write: メッセージを投稿する権限channels:history: パブリックチャンネルのメッセージ履歴を読み取る権限(トリガーに必要)groups:history: プライベートチャンネルのメッセージ履歴を読み取る権限im:history: ダイレクトメッセージの履歴を読み取る権限
もしワークフローが権限エラーで失敗する場合は、Slack APIサイトであなたのn8n連携用アプリ設定を見直し、必要なScopeが追加されているか確認してください。
また、n8nは非常に活発に開発が進んでいるツールです。本記事は2026年2月時点の情報に基づいていますが、将来のアップデートでUIや一部の仕様が変更される可能性があります。しかし、tsを取得してスレッドに渡すという基本的な考え方は変わりません。最新のn8nは常に進化しており、どんどん使いやすくなっています。まだ利用していない方は、この機会に無料プランからn8nを始めて、そのパワフルな機能を直接体験してみてください。
まとめ:n8nとSlackのスレッド返信をマスターしよう
この記事では、n8nを使ってSlackのスレッドにメッセージを自動返信する方法について、その鍵となるts(タイムスタンプ)の扱いに焦点を当てて解説しました。
重要なポイントを振り返りましょう。
- Slackのスレッド返信には、親メッセージを特定するためのtsが不可欠です。
- n8nのSlack Triggerノードを使えば、新しいメッセージのtsを
{{ $json.event.ts }}のような形で簡単に取得できます。 - 取得したtsは、返信用のSlackノードにある「Thread Ts」フィールドにExpressionで指定します。
invalid_tsエラーや意図しないチャンネル投稿は、Expressionの記述ミスやフィールド設定漏れが主な原因です。
この基本をマスターすれば、キーワードに反応するAI応答ボットや、タスクの進捗を自動報告するワークフローなど、チームの生産性を劇的に向上させる自動化を構築できます。n8nを使えば、今回のようなSlack連携だけでなく、様々なSaaSを組み合わせた複雑な業務自動化もノーコード・ローコードで実現できます。
この記事を参考に、ぜひあなたのSlack自動化を次のレベルへ進めてください。そして、公式サイトでn8nのさらなる可能性をチェックしてみましょう。